mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-14 19:08:07 +08:00
@@ -57,6 +57,7 @@ Policies Introduced by CMake 3.21
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
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>
|
||||
|
25
Help/policy/CMP0125.rst
Normal file
25
Help/policy/CMP0125.rst
Normal file
@@ -0,0 +1,25 @@
|
||||
CMP0125
|
||||
-------
|
||||
|
||||
.. versionadded:: 3.21
|
||||
|
||||
The :command:`find_file`, :command:`find_path`, :command:`find_library` and
|
||||
:command:`find_program` commands handle cache variables in the same way
|
||||
regardless of whether they are defined on the command line, with or without a
|
||||
type, or using the :command:`set` command.
|
||||
|
||||
Starting with CMake 3.21, the :command:`find_file`, :command:`find_path`,
|
||||
:command:`find_library`, and :command:`find_program` commands ensure that the
|
||||
cache variables will be used in the same way regardless how they were defined
|
||||
and the result will be always successful if the searched artifact exists.
|
||||
|
||||
The ``OLD`` behavior for this policy is to have the find commands' behaviors
|
||||
differ depending on how the cache variable is defined. The ``NEW`` behavior for
|
||||
this policy is to have consistent behavior.
|
||||
|
||||
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
|
6
Help/release/dev/find_item-consistent-behavior.rst
Normal file
6
Help/release/dev/find_item-consistent-behavior.rst
Normal file
@@ -0,0 +1,6 @@
|
||||
find_item-consistent-behavior
|
||||
-----------------------------
|
||||
|
||||
* 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.
|
@@ -9,8 +9,10 @@
|
||||
|
||||
#include <cmext/algorithm>
|
||||
|
||||
#include "cmCMakePath.h"
|
||||
#include "cmMakefile.h"
|
||||
#include "cmMessageType.h"
|
||||
#include "cmPolicies.h"
|
||||
#include "cmProperty.h"
|
||||
#include "cmRange.h"
|
||||
#include "cmSearchPath.h"
|
||||
@@ -18,6 +20,7 @@
|
||||
#include "cmStateTypes.h"
|
||||
#include "cmStringAlgorithms.h"
|
||||
#include "cmSystemTools.h"
|
||||
#include "cmake.h"
|
||||
|
||||
class cmExecutionStatus;
|
||||
|
||||
@@ -328,28 +331,65 @@ bool cmFindBase::CheckForVariableInCache()
|
||||
|
||||
void cmFindBase::NormalizeFindResult()
|
||||
{
|
||||
// If the user specifies the entry on the command line without a
|
||||
// type we should add the type and docstring but keep the original
|
||||
// value.
|
||||
if (this->AlreadyInCacheWithoutMetaInfo) {
|
||||
this->Makefile->AddCacheDefinition(this->VariableName, "",
|
||||
this->VariableDocumentation.c_str(),
|
||||
this->VariableType);
|
||||
if (this->Makefile->GetPolicyStatus(cmPolicies::CMP0125) ==
|
||||
cmPolicies::NEW) {
|
||||
// ensure the path returned by find_* command is absolute
|
||||
const auto* existingValue =
|
||||
this->Makefile->GetDefinition(this->VariableName);
|
||||
std::string value;
|
||||
if (!existingValue->empty()) {
|
||||
value =
|
||||
cmCMakePath(*existingValue, cmCMakePath::auto_format)
|
||||
.Absolute(cmCMakePath(
|
||||
this->Makefile->GetCMakeInstance()->GetCMakeWorkingDirectory()))
|
||||
.Normal()
|
||||
.GenericString();
|
||||
// value = cmSystemTools::CollapseFullPath(*existingValue);
|
||||
if (!cmSystemTools::FileExists(value, false)) {
|
||||
value = *existingValue;
|
||||
}
|
||||
}
|
||||
|
||||
// If the user specifies the entry on the command line without a
|
||||
// type we should add the type and docstring but keep the original
|
||||
// value.
|
||||
if (value != *existingValue || this->AlreadyInCacheWithoutMetaInfo) {
|
||||
this->Makefile->GetCMakeInstance()->AddCacheEntry(
|
||||
this->VariableName, value.c_str(), this->VariableDocumentation.c_str(),
|
||||
this->VariableType);
|
||||
// if there was a definition then remove it
|
||||
// This is required to ensure same behavior as
|
||||
// cmMakefile::AddCacheDefinition.
|
||||
// See #22038 for problems raised by this behavior.
|
||||
this->Makefile->RemoveDefinition(this->VariableName);
|
||||
}
|
||||
} else {
|
||||
// If the user specifies the entry on the command line without a
|
||||
// type we should add the type and docstring but keep the original
|
||||
// value.
|
||||
if (this->AlreadyInCacheWithoutMetaInfo) {
|
||||
this->Makefile->AddCacheDefinition(this->VariableName, "",
|
||||
this->VariableDocumentation.c_str(),
|
||||
this->VariableType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void cmFindBase::StoreFindResult(const std::string& value)
|
||||
{
|
||||
bool force =
|
||||
this->Makefile->GetPolicyStatus(cmPolicies::CMP0125) == cmPolicies::NEW;
|
||||
|
||||
if (!value.empty()) {
|
||||
this->Makefile->AddCacheDefinition(this->VariableName, value,
|
||||
this->VariableDocumentation.c_str(),
|
||||
this->VariableType);
|
||||
this->VariableType, force);
|
||||
return;
|
||||
}
|
||||
|
||||
this->Makefile->AddCacheDefinition(
|
||||
this->VariableName, cmStrCat(this->VariableName, "-NOTFOUND"),
|
||||
this->VariableDocumentation.c_str(), this->VariableType);
|
||||
this->VariableDocumentation.c_str(), this->VariableType, force);
|
||||
|
||||
if (this->Required) {
|
||||
this->Makefile->IssueMessage(
|
||||
|
@@ -1963,6 +1963,8 @@ void cmMakefile::AddCacheDefinition(const std::string& name, const char* value,
|
||||
}
|
||||
this->GetCMakeInstance()->AddCacheEntry(name, value, doc, type);
|
||||
// if there was a definition then remove it
|
||||
// The method cmFindBase::NormalizeFindResult also apply same workflow.
|
||||
// See #22038 for problems raised by this behavior.
|
||||
this->StateSnapshot.RemoveDefinition(name);
|
||||
}
|
||||
|
||||
|
@@ -372,7 +372,11 @@ class cmMakefile;
|
||||
3, 21, 0, cmPolicies::WARN) \
|
||||
SELECT(POLICY, CMP0124, \
|
||||
"foreach() loop variables are only available in the loop scope.", 3, \
|
||||
21, 0, cmPolicies::WARN)
|
||||
21, 0, cmPolicies::WARN) \
|
||||
SELECT(POLICY, CMP0125, \
|
||||
"find_(path|file|library|program) have consistent behavior for " \
|
||||
"cache variables.", \
|
||||
3, 21, 0, cmPolicies::WARN)
|
||||
|
||||
#define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1)
|
||||
#define CM_FOR_EACH_POLICY_ID(POLICY) \
|
||||
|
51
Tests/RunCMake/CMP0125/CMP0125-find_file-Common.cmake
Normal file
51
Tests/RunCMake/CMP0125/CMP0125-find_file-Common.cmake
Normal file
@@ -0,0 +1,51 @@
|
||||
|
||||
find_file(RELATIVE_PATH NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_file(RELATIVE_PATH_WITH_TYPE NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
find_file(ABSOLUTE_PATH NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_file(ABSOLUTE_PATH_WITH_TYPE NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
find_file(NOTFOUND_PATH NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_file(NOTFOUND_PATH_WITH_TYPE NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
file(WRITE "${CMAKE_BINARY_DIR}/${FILE_NAME}" "")
|
||||
find_file(FILE_NAME NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_file(FILE_NAME_WITH_TYPE NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
message("RELATIVE_PATH=${RELATIVE_PATH}")
|
||||
message("RELATIVE_PATH_WITH_TYPE=${RELATIVE_PATH_WITH_TYPE}")
|
||||
|
||||
message("ABSOLUTE_PATH=${ABSOLUTE_PATH}")
|
||||
message("ABSOLUTE_PATH_WITH_TYPE=${ABSOLUTE_PATH_WITH_TYPE}")
|
||||
|
||||
message("NOTFOUND_PATH=${NOTFOUND_PATH}")
|
||||
message("NOTFOUND_PATH_WITH_TYPE=${NOTFOUND_PATH_WITH_TYPE}")
|
||||
|
||||
message("FILE_NAME=${FILE_NAME}")
|
||||
message("FILE_NAME_WITH_TYPE=${FILE_NAME_WITH_TYPE}")
|
||||
|
||||
|
||||
set(RELATIVE_PATH_AND_LOCAL relative_local)
|
||||
set(RELATIVE_PATH_WITH_TYPE_AND_LOCAL relative_local)
|
||||
set(ABSOLUTE_PATH_AND_LOCAL /absolute_local)
|
||||
set(ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL /absolute_local)
|
||||
set(NOTFOUND_AND_LOCAL "${FILE_NAME}")
|
||||
set(NOTFOUND_WITH_TYPE_AND_LOCAL "${FILE_NAME}")
|
||||
|
||||
find_file(RELATIVE_PATH_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_file(RELATIVE_PATH_WITH_TYPE_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
find_file(ABSOLUTE_PATH_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_file(ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
find_file(NOTFOUND_PATH_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_file(NOTFOUND_PATH_WITH_TYPE_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
message("RELATIVE_PATH_AND_LOCAL=${RELATIVE_PATH_AND_LOCAL}")
|
||||
message("RELATIVE_PATH_WITH_TYPE_AND_LOCAL=${RELATIVE_PATH_WITH_TYPE_AND_LOCAL}")
|
||||
|
||||
message("ABSOLUTE_PATH_AND_LOCAL=${ABSOLUTE_PATH_AND_LOCAL}")
|
||||
message("ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL=${ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL}")
|
||||
|
||||
message("NOTFOUND_PATH_AND_LOCAL=${NOTFOUND_PATH_AND_LOCAL}")
|
||||
message("NOTFOUND_PATH_WITH_TYPE_AND_LOCAL=${NOTFOUND_PATH_WITH_TYPE_AND_LOCAL}")
|
14
Tests/RunCMake/CMP0125/CMP0125-find_file-NEW-stderr.txt
Normal file
14
Tests/RunCMake/CMP0125/CMP0125-find_file-NEW-stderr.txt
Normal file
@@ -0,0 +1,14 @@
|
||||
RELATIVE_PATH=relative
|
||||
RELATIVE_PATH_WITH_TYPE=relative
|
||||
ABSOLUTE_PATH=/absolute
|
||||
ABSOLUTE_PATH_WITH_TYPE=/absolute
|
||||
NOTFOUND_PATH=/.+/CMP0125/file\.txt
|
||||
NOTFOUND_PATH_WITH_TYPE=/.+/CMP0125/file\.txt
|
||||
FILE_NAME=/.+/CMP0125/CMP0125-find_file-NEW-build/file2\.txt
|
||||
FILE_NAME_WITH_TYPE=/.+/CMP0125/CMP0125-find_file-NEW-build/file2\.txt
|
||||
RELATIVE_PATH_AND_LOCAL=relative_local
|
||||
RELATIVE_PATH_WITH_TYPE_AND_LOCAL=relative_local
|
||||
ABSOLUTE_PATH_AND_LOCAL=/absolute_local
|
||||
ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL=/absolute_local
|
||||
NOTFOUND_PATH_AND_LOCAL=/.+/CMP0125/file.txt
|
||||
NOTFOUND_PATH_WITH_TYPE_AND_LOCAL=/.+/CMP0125/file.txt
|
4
Tests/RunCMake/CMP0125/CMP0125-find_file-NEW.cmake
Normal file
4
Tests/RunCMake/CMP0125/CMP0125-find_file-NEW.cmake
Normal file
@@ -0,0 +1,4 @@
|
||||
|
||||
cmake_policy(SET CMP0125 NEW)
|
||||
|
||||
include(CMP0125-find_file-Common.cmake)
|
14
Tests/RunCMake/CMP0125/CMP0125-find_file-OLD-stderr.txt
Normal file
14
Tests/RunCMake/CMP0125/CMP0125-find_file-OLD-stderr.txt
Normal file
@@ -0,0 +1,14 @@
|
||||
RELATIVE_PATH=/.+/CMP0125/CMP0125-find_file-OLD-build/relative
|
||||
RELATIVE_PATH_WITH_TYPE=relative
|
||||
ABSOLUTE_PATH=/absolute
|
||||
ABSOLUTE_PATH_WITH_TYPE=/absolute
|
||||
NOTFOUND_PATH=NOTFOUND
|
||||
NOTFOUND_PATH_WITH_TYPE=/.+/CMP0125/file\.txt
|
||||
FILE_NAME=/.+/CMP0125/CMP0125-find_file-OLD-build/file2\.txt
|
||||
FILE_NAME_WITH_TYPE=file2\.txt
|
||||
RELATIVE_PATH_AND_LOCAL=/.+/CMP0125/CMP0125-find_file-OLD-build/relative
|
||||
RELATIVE_PATH_WITH_TYPE_AND_LOCAL=relative_local
|
||||
ABSOLUTE_PATH_AND_LOCAL=/absolute
|
||||
ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL=/absolute_local
|
||||
NOTFOUND_PATH_AND_LOCAL=NOTFOUND
|
||||
NOTFOUND_PATH_WITH_TYPE_AND_LOCAL=/.+/CMP0125/file\.txt
|
4
Tests/RunCMake/CMP0125/CMP0125-find_file-OLD.cmake
Normal file
4
Tests/RunCMake/CMP0125/CMP0125-find_file-OLD.cmake
Normal file
@@ -0,0 +1,4 @@
|
||||
|
||||
cmake_policy(SET CMP0125 OLD)
|
||||
|
||||
include(CMP0125-find_file-Common.cmake)
|
52
Tests/RunCMake/CMP0125/CMP0125-find_library-Common.cmake
Normal file
52
Tests/RunCMake/CMP0125/CMP0125-find_library-Common.cmake
Normal file
@@ -0,0 +1,52 @@
|
||||
|
||||
find_library(RELATIVE_PATH NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_library(RELATIVE_PATH_WITH_TYPE NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
find_library(ABSOLUTE_PATH NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_library(ABSOLUTE_PATH_WITH_TYPE NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
find_library(NOTFOUND_PATH NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_library(NOTFOUND_PATH_WITH_TYPE NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
file(WRITE "${CMAKE_BINARY_DIR}/${FILE_NAME}" "")
|
||||
file(CHMOD "${CMAKE_BINARY_DIR}/${FILE_NAME}" PERMISSIONS OWNER_EXECUTE OWNER_READ OWNER_WRITE)
|
||||
find_library(FILE_NAME NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_library(FILE_NAME_WITH_TYPE NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
message("RELATIVE_PATH=${RELATIVE_PATH}")
|
||||
message("RELATIVE_PATH_WITH_TYPE=${RELATIVE_PATH_WITH_TYPE}")
|
||||
|
||||
message("ABSOLUTE_PATH=${ABSOLUTE_PATH}")
|
||||
message("ABSOLUTE_PATH_WITH_TYPE=${ABSOLUTE_PATH_WITH_TYPE}")
|
||||
|
||||
message("NOTFOUND_PATH=${NOTFOUND_PATH}")
|
||||
message("NOTFOUND_PATH_WITH_TYPE=${NOTFOUND_PATH_WITH_TYPE}")
|
||||
|
||||
message("FILE_NAME=${FILE_NAME}")
|
||||
message("FILE_NAME_WITH_TYPE=${FILE_NAME_WITH_TYPE}")
|
||||
|
||||
|
||||
set(RELATIVE_PATH_AND_LOCAL relative_local)
|
||||
set(RELATIVE_PATH_WITH_TYPE_AND_LOCAL relative_local)
|
||||
set(ABSOLUTE_PATH_AND_LOCAL /absolute_local)
|
||||
set(ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL /absolute_local)
|
||||
set(NOTFOUND_AND_LOCAL "${FILE_NAME}")
|
||||
set(NOTFOUND_WITH_TYPE_AND_LOCAL "${FILE_NAME}")
|
||||
|
||||
find_library(RELATIVE_PATH_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_library(RELATIVE_PATH_WITH_TYPE_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
find_library(ABSOLUTE_PATH_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_library(ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
find_library(NOTFOUND_PATH_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_library(NOTFOUND_PATH_WITH_TYPE_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
message("RELATIVE_PATH_AND_LOCAL=${RELATIVE_PATH_AND_LOCAL}")
|
||||
message("RELATIVE_PATH_WITH_TYPE_AND_LOCAL=${RELATIVE_PATH_WITH_TYPE_AND_LOCAL}")
|
||||
|
||||
message("ABSOLUTE_PATH_AND_LOCAL=${ABSOLUTE_PATH_AND_LOCAL}")
|
||||
message("ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL=${ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL}")
|
||||
|
||||
message("NOTFOUND_PATH_AND_LOCAL=${NOTFOUND_PATH_AND_LOCAL}")
|
||||
message("NOTFOUND_PATH_WITH_TYPE_AND_LOCAL=${NOTFOUND_PATH_WITH_TYPE_AND_LOCAL}")
|
14
Tests/RunCMake/CMP0125/CMP0125-find_library-NEW-stderr.txt
Normal file
14
Tests/RunCMake/CMP0125/CMP0125-find_library-NEW-stderr.txt
Normal file
@@ -0,0 +1,14 @@
|
||||
RELATIVE_PATH=relative
|
||||
RELATIVE_PATH_WITH_TYPE=relative
|
||||
ABSOLUTE_PATH=/absolute
|
||||
ABSOLUTE_PATH_WITH_TYPE=/absolute
|
||||
NOTFOUND_PATH=/.+/CMP0125/libfile\.(so|dylib)
|
||||
NOTFOUND_PATH_WITH_TYPE=/.+/CMP0125/libfile\.(so|dylib)
|
||||
FILE_NAME=/.+/CMP0125/CMP0125-find_library-NEW-build/libfile2\.(so|dylib)
|
||||
FILE_NAME_WITH_TYPE=/.+/CMP0125/CMP0125-find_library-NEW-build/libfile2\.(so|dylib)
|
||||
RELATIVE_PATH_AND_LOCAL=relative_local
|
||||
RELATIVE_PATH_WITH_TYPE_AND_LOCAL=relative_local
|
||||
ABSOLUTE_PATH_AND_LOCAL=/absolute_local
|
||||
ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL=/absolute_local
|
||||
NOTFOUND_PATH_AND_LOCAL=/.+/CMP0125/libfile.(so|dylib)
|
||||
NOTFOUND_PATH_WITH_TYPE_AND_LOCAL=/.+/CMP0125/libfile.(so|dylib)
|
6
Tests/RunCMake/CMP0125/CMP0125-find_library-NEW.cmake
Normal file
6
Tests/RunCMake/CMP0125/CMP0125-find_library-NEW.cmake
Normal file
@@ -0,0 +1,6 @@
|
||||
|
||||
cmake_policy(SET CMP0125 NEW)
|
||||
|
||||
enable_language(C)
|
||||
|
||||
include(CMP0125-find_library-Common.cmake)
|
14
Tests/RunCMake/CMP0125/CMP0125-find_library-OLD-stderr.txt
Normal file
14
Tests/RunCMake/CMP0125/CMP0125-find_library-OLD-stderr.txt
Normal file
@@ -0,0 +1,14 @@
|
||||
RELATIVE_PATH=/.+/CMP0125/CMP0125-find_library-OLD-build/relative
|
||||
RELATIVE_PATH_WITH_TYPE=relative
|
||||
ABSOLUTE_PATH=/absolute
|
||||
ABSOLUTE_PATH_WITH_TYPE=/absolute
|
||||
NOTFOUND_PATH=NOTFOUND
|
||||
NOTFOUND_PATH_WITH_TYPE=/.+/CMP0125/libfile\.(so|dylib)
|
||||
FILE_NAME=/.+/CMP0125/CMP0125-find_library-OLD-build/libfile2\.(so|dylib)
|
||||
FILE_NAME_WITH_TYPE=libfile2\.(so|dylib)
|
||||
RELATIVE_PATH_AND_LOCAL=relative_local
|
||||
RELATIVE_PATH_WITH_TYPE_AND_LOCAL=relative_local
|
||||
ABSOLUTE_PATH_AND_LOCAL=/absolute_local
|
||||
ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL=/absolute_local
|
||||
NOTFOUND_PATH_AND_LOCAL=/.+/CMP0125/libfile\.(so|dylib)
|
||||
NOTFOUND_PATH_WITH_TYPE_AND_LOCAL=/.+/CMP0125/libfile\.(so|dylib)
|
6
Tests/RunCMake/CMP0125/CMP0125-find_library-OLD.cmake
Normal file
6
Tests/RunCMake/CMP0125/CMP0125-find_library-OLD.cmake
Normal file
@@ -0,0 +1,6 @@
|
||||
|
||||
cmake_policy(SET CMP0125 OLD)
|
||||
|
||||
enable_language(C)
|
||||
|
||||
include(CMP0125-find_library-Common.cmake)
|
51
Tests/RunCMake/CMP0125/CMP0125-find_path-Common.cmake
Normal file
51
Tests/RunCMake/CMP0125/CMP0125-find_path-Common.cmake
Normal file
@@ -0,0 +1,51 @@
|
||||
|
||||
find_path(RELATIVE_PATH NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_path(RELATIVE_PATH_WITH_TYPE NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
find_path(ABSOLUTE_PATH NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_path(ABSOLUTE_PATH_WITH_TYPE NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
find_path(NOTFOUND_PATH NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_path(NOTFOUND_PATH_WITH_TYPE NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
file(WRITE "${CMAKE_BINARY_DIR}/${FILE_NAME}" "")
|
||||
find_path(FILE_NAME NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_path(FILE_NAME_WITH_TYPE NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
message("RELATIVE_PATH=${RELATIVE_PATH}")
|
||||
message("RELATIVE_PATH_WITH_TYPE=${RELATIVE_PATH_WITH_TYPE}")
|
||||
|
||||
message("ABSOLUTE_PATH=${ABSOLUTE_PATH}")
|
||||
message("ABSOLUTE_PATH_WITH_TYPE=${ABSOLUTE_PATH_WITH_TYPE}")
|
||||
|
||||
message("NOTFOUND_PATH=${NOTFOUND_PATH}")
|
||||
message("NOTFOUND_PATH_WITH_TYPE=${NOTFOUND_PATH_WITH_TYPE}")
|
||||
|
||||
message("FILE_NAME=${FILE_NAME}")
|
||||
message("FILE_NAME_WITH_TYPE=${FILE_NAME_WITH_TYPE}")
|
||||
|
||||
|
||||
set(RELATIVE_PATH_AND_LOCAL relative_local)
|
||||
set(RELATIVE_PATH_WITH_TYPE_AND_LOCAL relative_local)
|
||||
set(ABSOLUTE_PATH_AND_LOCAL /absolute_local)
|
||||
set(ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL /absolute_local)
|
||||
set(NOTFOUND_AND_LOCAL "${FILE_NAME}")
|
||||
set(NOTFOUND_WITH_TYPE_AND_LOCAL "${FILE_NAME}")
|
||||
|
||||
find_path(RELATIVE_PATH_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_path(RELATIVE_PATH_WITH_TYPE_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
find_path(ABSOLUTE_PATH_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_path(ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
find_path(NOTFOUND_PATH_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_path(NOTFOUND_PATH_WITH_TYPE_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
message("RELATIVE_PATH_AND_LOCAL=${RELATIVE_PATH_AND_LOCAL}")
|
||||
message("RELATIVE_PATH_WITH_TYPE_AND_LOCAL=${RELATIVE_PATH_WITH_TYPE_AND_LOCAL}")
|
||||
|
||||
message("ABSOLUTE_PATH_AND_LOCAL=${ABSOLUTE_PATH_AND_LOCAL}")
|
||||
message("ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL=${ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL}")
|
||||
|
||||
message("NOTFOUND_PATH_AND_LOCAL=${NOTFOUND_PATH_AND_LOCAL}")
|
||||
message("NOTFOUND_PATH_WITH_TYPE_AND_LOCAL=${NOTFOUND_PATH_WITH_TYPE_AND_LOCAL}")
|
14
Tests/RunCMake/CMP0125/CMP0125-find_path-NEW-stderr.txt
Normal file
14
Tests/RunCMake/CMP0125/CMP0125-find_path-NEW-stderr.txt
Normal file
@@ -0,0 +1,14 @@
|
||||
RELATIVE_PATH=relative
|
||||
RELATIVE_PATH_WITH_TYPE=relative
|
||||
ABSOLUTE_PATH=/absolute
|
||||
ABSOLUTE_PATH_WITH_TYPE=/absolute
|
||||
NOTFOUND_PATH=/.+/CMP0125
|
||||
NOTFOUND_PATH_WITH_TYPE=/.+/CMP0125
|
||||
FILE_NAME=/.+/CMP0125/CMP0125-find_path-NEW-build/file2\.txt
|
||||
FILE_NAME_WITH_TYPE=/.+/CMP0125/CMP0125-find_path-NEW-build/file2\.txt
|
||||
RELATIVE_PATH_AND_LOCAL=relative_local
|
||||
RELATIVE_PATH_WITH_TYPE_AND_LOCAL=relative_local
|
||||
ABSOLUTE_PATH_AND_LOCAL=/absolute_local
|
||||
ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL=/absolute_local
|
||||
NOTFOUND_PATH_AND_LOCAL=/.+/CMP0125
|
||||
NOTFOUND_PATH_WITH_TYPE_AND_LOCAL=/.+/CMP0125
|
4
Tests/RunCMake/CMP0125/CMP0125-find_path-NEW.cmake
Normal file
4
Tests/RunCMake/CMP0125/CMP0125-find_path-NEW.cmake
Normal file
@@ -0,0 +1,4 @@
|
||||
|
||||
cmake_policy(SET CMP0125 NEW)
|
||||
|
||||
include(CMP0125-find_path-Common.cmake)
|
14
Tests/RunCMake/CMP0125/CMP0125-find_path-OLD-stderr.txt
Normal file
14
Tests/RunCMake/CMP0125/CMP0125-find_path-OLD-stderr.txt
Normal file
@@ -0,0 +1,14 @@
|
||||
RELATIVE_PATH=/.+/CMP0125/CMP0125-find_path-OLD-build/relative
|
||||
RELATIVE_PATH_WITH_TYPE=relative
|
||||
ABSOLUTE_PATH=/absolute
|
||||
ABSOLUTE_PATH_WITH_TYPE=/absolute
|
||||
NOTFOUND_PATH=NOTFOUND
|
||||
NOTFOUND_PATH_WITH_TYPE=/.+/CMP0125
|
||||
FILE_NAME=/.+/CMP0125/CMP0125-find_path-OLD-build/file2\.txt
|
||||
FILE_NAME_WITH_TYPE=file2\.txt
|
||||
RELATIVE_PATH_AND_LOCAL=/.+/CMP0125/CMP0125-find_path-OLD-build/relative
|
||||
RELATIVE_PATH_WITH_TYPE_AND_LOCAL=relative_local
|
||||
ABSOLUTE_PATH_AND_LOCAL=/absolute
|
||||
ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL=/absolute_local
|
||||
NOTFOUND_PATH_AND_LOCAL=NOTFOUND
|
||||
NOTFOUND_PATH_WITH_TYPE_AND_LOCAL=/.+/CMP0125
|
4
Tests/RunCMake/CMP0125/CMP0125-find_path-OLD.cmake
Normal file
4
Tests/RunCMake/CMP0125/CMP0125-find_path-OLD.cmake
Normal file
@@ -0,0 +1,4 @@
|
||||
|
||||
cmake_policy(SET CMP0125 OLD)
|
||||
|
||||
include(CMP0125-find_path-Common.cmake)
|
52
Tests/RunCMake/CMP0125/CMP0125-find_program-Common.cmake
Normal file
52
Tests/RunCMake/CMP0125/CMP0125-find_program-Common.cmake
Normal file
@@ -0,0 +1,52 @@
|
||||
|
||||
find_program(RELATIVE_PATH NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_program(RELATIVE_PATH_WITH_TYPE NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
find_program(ABSOLUTE_PATH NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_program(ABSOLUTE_PATH_WITH_TYPE NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
find_program(NOTFOUND_PATH NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_program(NOTFOUND_PATH_WITH_TYPE NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
file(WRITE "${CMAKE_BINARY_DIR}/${FILE_NAME}" "")
|
||||
file(CHMOD "${CMAKE_BINARY_DIR}/${FILE_NAME}" PERMISSIONS OWNER_EXECUTE OWNER_READ OWNER_WRITE)
|
||||
find_program(FILE_NAME NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_program(FILE_NAME_WITH_TYPE NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
message("RELATIVE_PATH=${RELATIVE_PATH}")
|
||||
message("RELATIVE_PATH_WITH_TYPE=${RELATIVE_PATH_WITH_TYPE}")
|
||||
|
||||
message("ABSOLUTE_PATH=${ABSOLUTE_PATH}")
|
||||
message("ABSOLUTE_PATH_WITH_TYPE=${ABSOLUTE_PATH_WITH_TYPE}")
|
||||
|
||||
message("NOTFOUND_PATH=${NOTFOUND_PATH}")
|
||||
message("NOTFOUND_PATH_WITH_TYPE=${NOTFOUND_PATH_WITH_TYPE}")
|
||||
|
||||
message("FILE_NAME=${FILE_NAME}")
|
||||
message("FILE_NAME_WITH_TYPE=${FILE_NAME_WITH_TYPE}")
|
||||
|
||||
|
||||
set(RELATIVE_PATH_AND_LOCAL relative_local)
|
||||
set(RELATIVE_PATH_WITH_TYPE_AND_LOCAL relative_local)
|
||||
set(ABSOLUTE_PATH_AND_LOCAL /absolute_local)
|
||||
set(ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL /absolute_local)
|
||||
set(NOTFOUND_AND_LOCAL "${FILE_NAME}")
|
||||
set(NOTFOUND_WITH_TYPE_AND_LOCAL "${FILE_NAME}")
|
||||
|
||||
find_program(RELATIVE_PATH_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_program(RELATIVE_PATH_WITH_TYPE_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
find_program(ABSOLUTE_PATH_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_program(ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
find_program(NOTFOUND_PATH_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
find_program(NOTFOUND_PATH_WITH_TYPE_AND_LOCAL NAMES ${SEARCH_NAME} PATHS ${SEARCH_PATH})
|
||||
|
||||
message("RELATIVE_PATH_AND_LOCAL=${RELATIVE_PATH_AND_LOCAL}")
|
||||
message("RELATIVE_PATH_WITH_TYPE_AND_LOCAL=${RELATIVE_PATH_WITH_TYPE_AND_LOCAL}")
|
||||
|
||||
message("ABSOLUTE_PATH_AND_LOCAL=${ABSOLUTE_PATH_AND_LOCAL}")
|
||||
message("ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL=${ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL}")
|
||||
|
||||
message("NOTFOUND_PATH_AND_LOCAL=${NOTFOUND_PATH_AND_LOCAL}")
|
||||
message("NOTFOUND_PATH_WITH_TYPE_AND_LOCAL=${NOTFOUND_PATH_WITH_TYPE_AND_LOCAL}")
|
14
Tests/RunCMake/CMP0125/CMP0125-find_program-NEW-stderr.txt
Normal file
14
Tests/RunCMake/CMP0125/CMP0125-find_program-NEW-stderr.txt
Normal file
@@ -0,0 +1,14 @@
|
||||
RELATIVE_PATH=relative
|
||||
RELATIVE_PATH_WITH_TYPE=relative
|
||||
ABSOLUTE_PATH=/absolute
|
||||
ABSOLUTE_PATH_WITH_TYPE=/absolute
|
||||
NOTFOUND_PATH=/.+/CMP0125/file\.txt
|
||||
NOTFOUND_PATH_WITH_TYPE=/.+/CMP0125/file\.txt
|
||||
FILE_NAME=/.+/CMP0125/CMP0125-find_program-NEW-build/file2\.txt
|
||||
FILE_NAME_WITH_TYPE=/.+/CMP0125/CMP0125-find_program-NEW-build/file2\.txt
|
||||
RELATIVE_PATH_AND_LOCAL=relative_local
|
||||
RELATIVE_PATH_WITH_TYPE_AND_LOCAL=relative_local
|
||||
ABSOLUTE_PATH_AND_LOCAL=/absolute_local
|
||||
ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL=/absolute_local
|
||||
NOTFOUND_PATH_AND_LOCAL=/.+/CMP0125/file.txt
|
||||
NOTFOUND_PATH_WITH_TYPE_AND_LOCAL=/.+/CMP0125/file.txt
|
4
Tests/RunCMake/CMP0125/CMP0125-find_program-NEW.cmake
Normal file
4
Tests/RunCMake/CMP0125/CMP0125-find_program-NEW.cmake
Normal file
@@ -0,0 +1,4 @@
|
||||
|
||||
cmake_policy(SET CMP0125 NEW)
|
||||
|
||||
include(CMP0125-find_program-Common.cmake)
|
14
Tests/RunCMake/CMP0125/CMP0125-find_program-OLD-stderr.txt
Normal file
14
Tests/RunCMake/CMP0125/CMP0125-find_program-OLD-stderr.txt
Normal file
@@ -0,0 +1,14 @@
|
||||
RELATIVE_PATH=/.+/CMP0125/CMP0125-find_program-OLD-build/relative
|
||||
RELATIVE_PATH_WITH_TYPE=relative
|
||||
ABSOLUTE_PATH=/absolute
|
||||
ABSOLUTE_PATH_WITH_TYPE=/absolute
|
||||
NOTFOUND_PATH=NOTFOUND
|
||||
NOTFOUND_PATH_WITH_TYPE=/.+/CMP0125/file\.txt
|
||||
FILE_NAME=/.+/CMP0125/CMP0125-find_program-OLD-build/file2\.txt
|
||||
FILE_NAME_WITH_TYPE=file2\.txt
|
||||
RELATIVE_PATH_AND_LOCAL=/.+/CMP0125/CMP0125-find_program-OLD-build/relative
|
||||
RELATIVE_PATH_WITH_TYPE_AND_LOCAL=relative_local
|
||||
ABSOLUTE_PATH_AND_LOCAL=/absolute
|
||||
ABSOLUTE_PATH_WITH_TYPE_AND_LOCAL=/absolute_local
|
||||
NOTFOUND_PATH_AND_LOCAL=NOTFOUND
|
||||
NOTFOUND_PATH_WITH_TYPE_AND_LOCAL=/.+/CMP0125/file.txt
|
4
Tests/RunCMake/CMP0125/CMP0125-find_program-OLD.cmake
Normal file
4
Tests/RunCMake/CMP0125/CMP0125-find_program-OLD.cmake
Normal file
@@ -0,0 +1,4 @@
|
||||
|
||||
cmake_policy(SET CMP0125 OLD)
|
||||
|
||||
include(CMP0125-find_program-Common.cmake)
|
3
Tests/RunCMake/CMP0125/CMakeLists.txt
Normal file
3
Tests/RunCMake/CMP0125/CMakeLists.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
cmake_minimum_required(VERSION 3.20)
|
||||
project(${RunCMake_TEST} NONE)
|
||||
include(${RunCMake_TEST}.cmake)
|
36
Tests/RunCMake/CMP0125/RunCMakeTest.cmake
Normal file
36
Tests/RunCMake/CMP0125/RunCMakeTest.cmake
Normal file
@@ -0,0 +1,36 @@
|
||||
include(RunCMake)
|
||||
|
||||
file(WRITE "${RunCMake_BINARY_DIR}/file.txt" "")
|
||||
file(CHMOD "${RunCMake_BINARY_DIR}/file.txt" PERMISSIONS OWNER_EXECUTE OWNER_READ OWNER_WRITE)
|
||||
|
||||
set(options -DRELATIVE_PATH=relative -DABSOLUTE_PATH=/absolute
|
||||
-DRELATIVE_PATH_WITH_TYPE:PATH=relative -DABSOLUTE_PATH_WITH_TYPE:PATH=/absolute
|
||||
-DNOTFOUND_PATH=NOTFOUND -DNOTFOUND_PATH_WITH_TYPE:PATH=NOTFOUND
|
||||
-DFILE_NAME=file2.txt -DFILE_NAME_WITH_TYPE:PATH=file2.txt
|
||||
-DSEARCH_NAME=file.txt "-DSEARCH_PATH=${RunCMake_BINARY_DIR}"
|
||||
-DRELATIVE_PATH_AND_LOCAL=relative -DABSOLUTE_PATH_AND_LOCAL=/absolute
|
||||
-DRELATIVE_PATH_WITH_TYPE_AND_LOCAL:PATH=relative -DABSOLUTE_PATH_WITH_TYPE_AND_LOCAL:PATH=/absolute
|
||||
-DNOTFOUND_PATH_AND_LOCAL=NOTFOUND -DNOTFOUND_PATH_WITH_TYPE_AND_LOCAL:PATH=NOTFOUND
|
||||
-DFILE_NAME=file2.txt -DFILE_NAME_WITH_TYPE:PATH=file2.txt
|
||||
-DSEARCH_NAME=file.txt "-DSEARCH_PATH=${RunCMake_BINARY_DIR}")
|
||||
|
||||
run_cmake_with_options(CMP0125-find_file-OLD ${options})
|
||||
run_cmake_with_options(CMP0125-find_file-NEW ${options})
|
||||
run_cmake_with_options(CMP0125-find_path-OLD ${options})
|
||||
run_cmake_with_options(CMP0125-find_path-NEW ${options})
|
||||
run_cmake_with_options(CMP0125-find_program-OLD ${options})
|
||||
run_cmake_with_options(CMP0125-find_program-NEW ${options})
|
||||
|
||||
|
||||
file(WRITE "${RunCMake_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}file${CMAKE_SHARED_LIBRARY_SUFFIX}" "")
|
||||
file(CHMOD "${RunCMake_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}file${CMAKE_SHARED_LIBRARY_SUFFIX}" PERMISSIONS OWNER_EXECUTE OWNER_READ OWNER_WRITE)
|
||||
|
||||
set(options -DRELATIVE_PATH=relative -DABSOLUTE_PATH=/absolute
|
||||
-DRELATIVE_PATH_WITH_TYPE:PATH=relative -DABSOLUTE_PATH_WITH_TYPE:PATH=/absolute
|
||||
-DNOTFOUND_PATH=NOTFOUND -DNOTFOUND_PATH_WITH_TYPE:PATH=NOTFOUND
|
||||
-DFILE_NAME=${CMAKE_SHARED_LIBRARY_PREFIX}file2${CMAKE_SHARED_LIBRARY_SUFFIX}
|
||||
-DFILE_NAME_WITH_TYPE:PATH=${CMAKE_SHARED_LIBRARY_PREFIX}file2${CMAKE_SHARED_LIBRARY_SUFFIX}
|
||||
-DSEARCH_NAME=file "-DSEARCH_PATH=${RunCMake_BINARY_DIR}")
|
||||
|
||||
run_cmake_with_options(CMP0125-find_library-OLD ${options})
|
||||
run_cmake_with_options(CMP0125-find_library-NEW ${options})
|
@@ -136,6 +136,10 @@ endif()
|
||||
add_RunCMake_test(CMP0118)
|
||||
add_RunCMake_test(CMP0119 -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID})
|
||||
add_RunCMake_test(CMP0121)
|
||||
if (CMAKE_SYSTEM_NAME MATCHES "(Linux|Darwin)")
|
||||
add_RunCMake_test(CMP0125 -DCMAKE_SHARED_LIBRARY_PREFIX=${CMAKE_SHARED_LIBRARY_PREFIX}
|
||||
-DCMAKE_SHARED_LIBRARY_SUFFIX=${CMAKE_SHARED_LIBRARY_SUFFIX})
|
||||
endif()
|
||||
|
||||
# The test for Policy 65 requires the use of the
|
||||
# CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS variable, which both the VS and Xcode
|
||||
|
Reference in New Issue
Block a user