CMP0024: Store the fact of included export in global generator.

Storing it in the makefile means that the policy does not trigger
when include and export are in differing directories.
This commit is contained in:
Stephen Kelly 2013-10-10 11:46:06 +02:00
parent 7e4910fe47
commit af1f698757
10 changed files with 31 additions and 28 deletions

View File

@ -172,7 +172,9 @@ bool cmExportCommand
ebfg.SetCommand(this);
ebfg.SetExportOld(this->ExportOld.IsEnabled());
this->Makefile->AddExportedTargetsFile(fname);
cmGlobalGenerator *gg = this->Makefile->GetLocalGenerator()
->GetGlobalGenerator();
gg->AddExportedTargetsFile(fname);
// Compute the set of configurations exported.
std::vector<std::string> configurationTypes;

View File

@ -293,6 +293,18 @@ public:
void ProcessEvaluationFiles();
void AddExportedTargetsFile(const std::string &filename)
{
this->ExportedTargetsFiles.insert(filename);
}
bool IsExportedTargetsFile(const std::string &filename) const
{
const std::set<std::string>::const_iterator it
= this->ExportedTargetsFiles.find(filename);
return it != this->ExportedTargetsFiles.end();
}
protected:
typedef std::vector<cmLocalGenerator*> GeneratorVector;
// for a project collect all its targets by following depend
@ -372,6 +384,7 @@ private:
std::map<cmStdString, cmStdString> ExtensionToLanguage;
std::map<cmStdString, int> LanguageToLinkerPreference;
std::map<cmStdString, cmStdString> LanguageToOriginalSharedLibFlags;
std::set<std::string> ExportedTargetsFiles;
// Record hashes for rules and outputs.
struct RuleHash { char Data[32]; };

View File

@ -93,7 +93,9 @@ bool cmIncludeCommand
cmSystemTools::CollapseFullPath(fname.c_str(),
this->Makefile->GetStartDirectory());
if (this->Makefile->IsExportedTargetsFile(fname_abs))
cmGlobalGenerator *gg = this->Makefile->GetLocalGenerator()
->GetGlobalGenerator();
if (gg->IsExportedTargetsFile(fname_abs))
{
const char *modal = 0;
cmake::MessageType messageType = cmake::AUTHOR_WARNING;

View File

@ -489,18 +489,6 @@ public:
return this->cmCurrentListFile.c_str();
}
void AddExportedTargetsFile(const std::string &filename)
{
this->ExportedTargetsFiles.insert(filename);
}
bool IsExportedTargetsFile(const std::string &filename) const
{
const std::set<std::string>::const_iterator it
= this->ExportedTargetsFiles.find(filename);
return it != this->ExportedTargetsFiles.end();
}
//@}
/**
@ -1053,7 +1041,6 @@ private:
void EnforceDirectoryLevelRules();
bool GeneratingBuildSystem;
std::set<std::string> ExportedTargetsFiles;
/**
* Old version of GetSourceFileWithOutput(const char*) kept for
* backward-compatibility. It implements a linear search and support

View File

@ -1,15 +1,12 @@
CMake Error at CMP0024-NEW.cmake:9 \(include\):
CMake Error at subdir2/CMakeLists.txt:2 \(include\):
Policy CMP0024 is not set: Disallow include export result. Run "cmake
--help-policy CMP0024" for policy details. Use the cmake_policy command to
set the policy and suppress this warning.
The file
.*/Tests/RunCMake/include/CMP0024-NEW-build/theTargets.cmake
.*/Tests/RunCMake/include/CMP0024-NEW-build/subdir1/theTargets.cmake
was generated by the export\(\) command. It may not be used as the argument
to the include\(\) command. Use ALIAS targets instead to refer to targets by
alternative names.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)

View File

@ -5,5 +5,5 @@ cmake_policy(SET CMP0024 NEW)
add_library(foo SHARED empty.cpp)
export(TARGETS foo FILE "${CMAKE_CURRENT_BINARY_DIR}/theTargets.cmake")
include("${CMAKE_CURRENT_BINARY_DIR}/theTargets.cmake")
add_subdirectory(subdir1)
add_subdirectory(subdir2)

View File

@ -1,16 +1,14 @@
CMake Warning \(dev\) at CMP0024-WARN.cmake:7 \(include\):
CMake Warning \(dev\) at subdir2/CMakeLists.txt:2 \(include\):
Policy CMP0024 is not set: Disallow include export result. Run "cmake
--help-policy CMP0024" for policy details. Use the cmake_policy command to
set the policy and suppress this warning.
The file
.*/Tests/RunCMake/include/CMP0024-WARN-build/theTargets.cmake
.*/Tests/RunCMake/include/CMP0024-WARN-build/subdir1/theTargets.cmake
was generated by the export\(\) command. It should not be used as the
argument to the include\(\) command. Use ALIAS targets instead to refer to
targets by alternative names.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)
This warning is for project developers. Use -Wno-dev to suppress it.

View File

@ -3,5 +3,5 @@ enable_language(CXX)
add_library(foo SHARED empty.cpp)
export(TARGETS foo FILE "${CMAKE_CURRENT_BINARY_DIR}/theTargets.cmake")
include("${CMAKE_CURRENT_BINARY_DIR}/theTargets.cmake")
add_subdirectory(subdir1)
add_subdirectory(subdir2)

View File

@ -0,0 +1,2 @@
export(TARGETS foo FILE "${CMAKE_CURRENT_BINARY_DIR}/theTargets.cmake")

View File

@ -0,0 +1,2 @@
include("${CMAKE_CURRENT_BINARY_DIR}/../subdir1/theTargets.cmake")