Allow the Package Registry to be disabled (#14849)
When a project is packaged for redistribution the local package registries should not be updated or consulted. They are for developers. Add variables to disable use of package registries globally: * CMAKE_EXPORT_NO_PACKAGE_REGISTRY that disables the export(PACKAGE) command * CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY that disables the User Package Registry in all the find_package calls. * CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY that disables the System Package Registry in all the find_package calls. Update documentation and unit tests.
This commit is contained in:
parent
d09fda5d91
commit
be8ae96098
|
@ -51,4 +51,7 @@ 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
|
without help from the user. Note that the entry in the package
|
||||||
registry that this command creates works only in conjunction with a
|
registry that this command creates works only in conjunction with a
|
||||||
package configuration file (<name>Config.cmake) that works with the
|
package configuration file (<name>Config.cmake) that works with the
|
||||||
build tree.
|
build tree. In some cases, for example for packaging and for system
|
||||||
|
wide installations, it is not desirable to write the user package
|
||||||
|
registry. If the :variable:`CMAKE_EXPORT_NO_PACKAGE_REGISTRY` variable
|
||||||
|
is enabled, the ``export(PACKAGE)`` command will do nothing.
|
||||||
|
|
|
@ -272,7 +272,9 @@ enabled.
|
||||||
(This step is implemented only on Windows.)
|
(This step is implemented only on Windows.)
|
||||||
|
|
||||||
6. Search paths stored in the CMake :ref:`User Package Registry`.
|
6. Search paths stored in the CMake :ref:`User Package Registry`.
|
||||||
This can be skipped if ``NO_CMAKE_PACKAGE_REGISTRY`` is passed.
|
This can be skipped if ``NO_CMAKE_PACKAGE_REGISTRY`` is passed or by
|
||||||
|
setting the :variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY`
|
||||||
|
to ``TRUE``.
|
||||||
See the :manual:`cmake-packages(7)` manual for details on the user
|
See the :manual:`cmake-packages(7)` manual for details on the user
|
||||||
package registry.
|
package registry.
|
||||||
|
|
||||||
|
@ -285,7 +287,9 @@ enabled.
|
||||||
CMAKE_SYSTEM_APPBUNDLE_PATH
|
CMAKE_SYSTEM_APPBUNDLE_PATH
|
||||||
|
|
||||||
8. Search paths stored in the CMake :ref:`System Package Registry`.
|
8. Search paths stored in the CMake :ref:`System Package Registry`.
|
||||||
This can be skipped if ``NO_CMAKE_SYSTEM_PACKAGE_REGISTRY`` is passed.
|
This can be skipped if ``NO_CMAKE_SYSTEM_PACKAGE_REGISTRY`` is passed
|
||||||
|
or by setting the
|
||||||
|
:variable:`CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY` to ``TRUE``.
|
||||||
See the :manual:`cmake-packages(7)` manual for details on the system
|
See the :manual:`cmake-packages(7)` manual for details on the system
|
||||||
package registry.
|
package registry.
|
||||||
|
|
||||||
|
|
|
@ -564,6 +564,21 @@ containing the package configuration file.
|
||||||
|
|
||||||
There is no system package registry on non-Windows platforms.
|
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 to disable them using the following variables:
|
||||||
|
|
||||||
|
* :variable:`CMAKE_EXPORT_NO_PACKAGE_REGISTRY` disables the
|
||||||
|
:command:`export(PACKAGE)` command.
|
||||||
|
* :variable:`CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY` disables the
|
||||||
|
User Package Registry in all the :command:`find_package` calls.
|
||||||
|
* :variable:`CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY` disables
|
||||||
|
the System Package Registry in all the :command:`find_package` calls.
|
||||||
|
|
||||||
Package Registry Example
|
Package Registry Example
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
|
|
|
@ -109,10 +109,13 @@ Variables that Change Behavior
|
||||||
/variable/CMAKE_DISABLE_FIND_PACKAGE_PackageName
|
/variable/CMAKE_DISABLE_FIND_PACKAGE_PackageName
|
||||||
/variable/CMAKE_ERROR_DEPRECATED
|
/variable/CMAKE_ERROR_DEPRECATED
|
||||||
/variable/CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION
|
/variable/CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION
|
||||||
|
/variable/CMAKE_EXPORT_NO_PACKAGE_REGISTRY
|
||||||
/variable/CMAKE_SYSROOT
|
/variable/CMAKE_SYSROOT
|
||||||
/variable/CMAKE_FIND_LIBRARY_PREFIXES
|
/variable/CMAKE_FIND_LIBRARY_PREFIXES
|
||||||
/variable/CMAKE_FIND_LIBRARY_SUFFIXES
|
/variable/CMAKE_FIND_LIBRARY_SUFFIXES
|
||||||
/variable/CMAKE_FIND_NO_INSTALL_PREFIX
|
/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_WARN_NO_MODULE
|
/variable/CMAKE_FIND_PACKAGE_WARN_NO_MODULE
|
||||||
/variable/CMAKE_FIND_ROOT_PATH
|
/variable/CMAKE_FIND_ROOT_PATH
|
||||||
/variable/CMAKE_FIND_ROOT_PATH_MODE_INCLUDE
|
/variable/CMAKE_FIND_ROOT_PATH_MODE_INCLUDE
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
CMAKE_EXPORT_NO_PACKAGE_REGISTRY
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
Disable the :command:`export(PACKAGE)` command.
|
||||||
|
|
||||||
|
In some cases, for example for packaging and for system wide
|
||||||
|
installations, it is not desirable to write the user package registry.
|
||||||
|
If the :variable:`CMAKE_EXPORT_NO_PACKAGE_REGISTRY` variable is enabled,
|
||||||
|
the :command:`export(PACKAGE)` command will do nothing.
|
||||||
|
|
||||||
|
See also :ref:`Disabling the Package Registry`.
|
|
@ -0,0 +1,13 @@
|
||||||
|
CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
Skip :ref:`User Package Registry` in :command:`find_package` calls.
|
||||||
|
|
||||||
|
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 enabled, 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`.
|
|
@ -0,0 +1,13 @@
|
||||||
|
CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY
|
||||||
|
---------------------------------------------
|
||||||
|
|
||||||
|
Skip :ref:`System Package Registry` in :command:`find_package` calls.
|
||||||
|
|
||||||
|
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
|
||||||
|
enabled, 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`.
|
|
@ -285,6 +285,13 @@ bool cmExportCommand::HandlePackage(std::vector<std::string> const& args)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If the CMAKE_EXPORT_NO_PACKAGE_REGISTRY variable is set the command
|
||||||
|
// export(PACKAGE) does nothing.
|
||||||
|
if(this->Makefile->IsOn("CMAKE_EXPORT_NO_PACKAGE_REGISTRY"))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// We store the current build directory in the registry as a value
|
// We store the current build directory in the registry as a value
|
||||||
// named by a hash of its own content. This is deterministic and is
|
// named by a hash of its own content. This is deterministic and is
|
||||||
// unique with high probability.
|
// unique with high probability.
|
||||||
|
|
|
@ -90,6 +90,18 @@ bool cmFindPackageCommand
|
||||||
this->UseLib64Paths = true;
|
this->UseLib64Paths = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if User Package Registry should be disabled
|
||||||
|
if(this->Makefile->IsOn("CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY"))
|
||||||
|
{
|
||||||
|
this->NoUserRegistry = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if System Package Registry should be disabled
|
||||||
|
if(this->Makefile->IsOn("CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY"))
|
||||||
|
{
|
||||||
|
this->NoSystemRegistry = true;
|
||||||
|
}
|
||||||
|
|
||||||
// Find the current root path mode.
|
// Find the current root path mode.
|
||||||
this->SelectDefaultRootPathMode();
|
this->SelectDefaultRootPathMode();
|
||||||
|
|
||||||
|
|
|
@ -331,7 +331,7 @@ try_compile(EXPORTER_COMPILED
|
||||||
${FindPackageTest_BINARY_DIR}/Exporter-build
|
${FindPackageTest_BINARY_DIR}/Exporter-build
|
||||||
${FindPackageTest_SOURCE_DIR}/Exporter
|
${FindPackageTest_SOURCE_DIR}/Exporter
|
||||||
CMakeTestExportPackage dummy
|
CMakeTestExportPackage dummy
|
||||||
CMAKE_FLAGS
|
CMAKE_FLAGS "-UCMAKE_EXPORT_NO_PACKAGE_REGISTRY"
|
||||||
-Dversion=${version}
|
-Dversion=${version}
|
||||||
OUTPUT_VARIABLE output)
|
OUTPUT_VARIABLE output)
|
||||||
message(STATUS "Searching for export(PACKAGE) test project")
|
message(STATUS "Searching for export(PACKAGE) test project")
|
||||||
|
@ -339,6 +339,36 @@ set(CMakeTestExportPackage_DIR "" CACHE FILEPATH
|
||||||
"Wipe out find results for testing." FORCE)
|
"Wipe out find results for testing." FORCE)
|
||||||
find_package(CMakeTestExportPackage 1.${version} EXACT REQUIRED)
|
find_package(CMakeTestExportPackage 1.${version} EXACT REQUIRED)
|
||||||
|
|
||||||
|
message(STATUS "Searching for export(PACKAGE) test project with CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=TRUE")
|
||||||
|
set(CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY TRUE)
|
||||||
|
set(CMakeTestExportPackage_DIR "" CACHE FILEPATH
|
||||||
|
"Wipe out find results for testing." FORCE)
|
||||||
|
find_package(CMakeTestExportPackage 1.${version} EXACT QUIET)
|
||||||
|
if(CMakeTestExportPackage_FOUND)
|
||||||
|
message(SEND_ERROR "CMakeTestExportPackage should not be FOUND!")
|
||||||
|
endif()
|
||||||
|
unset(CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY)
|
||||||
|
|
||||||
|
message(STATUS "Remove export(PACKAGE) test project")
|
||||||
|
file(REMOVE_RECURSE ${FindPackageTest_BINARY_DIR}/Exporter-build)
|
||||||
|
set(CMakeTestExportPackage_DIR "" CACHE FILEPATH
|
||||||
|
"Wipe out find results for testing." FORCE)
|
||||||
|
find_package(CMakeTestExportPackage QUIET) # Should clean the user package cache
|
||||||
|
#
|
||||||
|
message(STATUS "Preparing export(PACKAGE) test project with CMAKE_EXPORT_NO_PACKAGE_REGISTRY=TRUE")
|
||||||
|
try_compile(EXPORTER_COMPILED
|
||||||
|
${FindPackageTest_BINARY_DIR}/Exporter-build
|
||||||
|
${FindPackageTest_SOURCE_DIR}/Exporter
|
||||||
|
CMakeTestExportPackage dummy
|
||||||
|
CMAKE_FLAGS "-DCMAKE_EXPORT_NO_PACKAGE_REGISTRY:BOOL=TRUE"
|
||||||
|
-Dversion=${version}
|
||||||
|
OUTPUT_VARIABLE output)
|
||||||
|
message(STATUS "Searching for export(PACKAGE) test project")
|
||||||
|
find_package(CMakeTestExportPackage 1.${version} EXACT QUIET)
|
||||||
|
if(CMakeTestExportPackage_FOUND)
|
||||||
|
message(SEND_ERROR "CMakeTestExportPackage should not be FOUND!")
|
||||||
|
endif()
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
# Test configure_package_config_file().
|
# Test configure_package_config_file().
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue