Merge topic 'fileapi-install-generators'

d70a0f8681 fileapi: Fix codemodel target install destination for cross-dir rules

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !3639
This commit is contained in:
Brad King 2019-08-05 14:20:13 +00:00 committed by Kitware Robot
commit 7eb2fd6ca6
6 changed files with 58 additions and 8 deletions

View File

@ -1144,12 +1144,9 @@ Json::Value Target::DumpInstallPrefix()
Json::Value Target::DumpInstallDestinations()
{
Json::Value destinations = Json::arrayValue;
auto installGens = this->GT->Makefile->GetInstallGenerators();
for (auto iGen : installGens) {
auto itGen = dynamic_cast<cmInstallTargetGenerator*>(iGen);
if (itGen != nullptr && itGen->GetTarget() == this->GT) {
destinations.append(this->DumpInstallDestination(itGen));
}
auto installGens = this->GT->Target->GetInstallGenerators();
for (auto itGen : installGens) {
destinations.append(this->DumpInstallDestination(itGen));
}
return destinations;
}

View File

@ -43,11 +43,13 @@ static cmInstallTargetGenerator* CreateInstallTargetGenerator(
target.SetHaveInstallRule(true);
const char* component = namelink ? args.GetNamelinkComponent().c_str()
: args.GetComponent().c_str();
return new cmInstallTargetGenerator(
auto g = new cmInstallTargetGenerator(
target.GetName(), destination.c_str(), impLib,
args.GetPermissions().c_str(), args.GetConfigurations(), component,
message, args.GetExcludeFromAll(), args.GetOptional() || forceOpt,
backtrace);
target.AddInstallGenerator(g);
return g;
}
static cmInstallTargetGenerator* CreateInstallTargetGenerator(

View File

@ -180,6 +180,7 @@ public:
std::vector<cmCustomCommand> PreBuildCommands;
std::vector<cmCustomCommand> PreLinkCommands;
std::vector<cmCustomCommand> PostBuildCommands;
std::vector<cmInstallTargetGenerator*> InstallGenerators;
std::set<std::string> SystemIncludeDirectories;
cmTarget::LinkLibraryVectorType OriginalLinkLibraries;
std::vector<std::string> IncludeDirectoriesEntries;
@ -873,6 +874,17 @@ void cmTarget::SetHaveInstallRule(bool hir)
impl->HaveInstallRule = hir;
}
void cmTarget::AddInstallGenerator(cmInstallTargetGenerator* g)
{
impl->InstallGenerators.emplace_back(g);
}
std::vector<cmInstallTargetGenerator*> const& cmTarget::GetInstallGenerators()
const
{
return impl->InstallGenerators;
}
bool cmTarget::GetIsGeneratorProvided() const
{
return impl->IsGeneratorProvided;

View File

@ -21,6 +21,7 @@
class cmCustomCommand;
class cmGlobalGenerator;
class cmInstallTargetGenerator;
class cmMakefile;
class cmMessenger;
class cmPropertyMap;
@ -147,6 +148,9 @@ public:
bool GetHaveInstallRule() const;
void SetHaveInstallRule(bool hir);
void AddInstallGenerator(cmInstallTargetGenerator* g);
std::vector<cmInstallTargetGenerator*> const& GetInstallGenerators() const;
/**
* Get/Set whether this target was auto-created by a generator.
*/

View File

@ -2092,7 +2092,40 @@ def gen_check_targets(c, g, inSource):
],
"build": "^cxx$",
"source": "^cxx$",
"install": None,
"install": {
"prefix": "^(/usr/local|[A-Za-z]:.*/codemodel-v2)$",
"destinations": [
{
"path": "bin",
"backtrace": [
{
"file": "^codemodel-v2\\.cmake$",
"line": 37,
"command": "install",
"hasParent": True,
},
{
"file": "^codemodel-v2\\.cmake$",
"line": None,
"command": None,
"hasParent": True,
},
{
"file": "^CMakeLists\\.txt$",
"line": 3,
"command": "include",
"hasParent": True,
},
{
"file": "^CMakeLists\\.txt$",
"line": None,
"command": None,
"hasParent": False,
},
],
},
],
},
"link": {
"language": "CXX",
"lto": None,

View File

@ -33,3 +33,5 @@ if(_ipo)
set_property(TARGET c_static_lib PROPERTY INTERPROCEDURAL_OPTIMIZATION ON)
file(WRITE "${CMAKE_BINARY_DIR}/ipo_enabled.txt" "")
endif()
install(TARGETS cxx_exe)