mirror of
https://github.com/reactos/CMake.git
synced 2024-11-24 20:19:53 +00:00
ENH: Added warning when an install rule is created from an EXCLUDE_FROM_ALL target. Added a foo/preinstall version of targets that need relinking so that exclude-from-all targets can be manually relinked for installation.
This commit is contained in:
parent
d7118006de
commit
bffcff4530
@ -539,7 +539,7 @@ cmGlobalUnixMakefileGenerator3
|
|||||||
this->WriteDirectoryRule2(ruleFileStream, lg, "clean", false, false);
|
this->WriteDirectoryRule2(ruleFileStream, lg, "clean", false, false);
|
||||||
|
|
||||||
// Write directory-level rules for "preinstall".
|
// Write directory-level rules for "preinstall".
|
||||||
this->WriteDirectoryRule2(ruleFileStream, lg, "preinstall", false, true);
|
this->WriteDirectoryRule2(ruleFileStream, lg, "preinstall", true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -677,6 +677,23 @@ cmGlobalUnixMakefileGenerator3
|
|||||||
(makefileName.c_str(), makeTargetName.c_str()));
|
(makefileName.c_str(), makeTargetName.c_str()));
|
||||||
lg->WriteMakeRule(ruleFileStream, "fast build rule for target.",
|
lg->WriteMakeRule(ruleFileStream, "fast build rule for target.",
|
||||||
localName.c_str(), depends, commands, true);
|
localName.c_str(), depends, commands, true);
|
||||||
|
|
||||||
|
// Add a local name for the rule to relink the target before
|
||||||
|
// installation.
|
||||||
|
if(t->second.NeedRelinkBeforeInstall())
|
||||||
|
{
|
||||||
|
makeTargetName = lg->GetRelativeTargetDirectory(t->second);
|
||||||
|
makeTargetName += "/preinstall";
|
||||||
|
localName = t->second.GetName();
|
||||||
|
localName += "/preinstall";
|
||||||
|
depends.clear();
|
||||||
|
commands.clear();
|
||||||
|
commands.push_back(lg->GetRecursiveMakeCall
|
||||||
|
(makefileName.c_str(), makeTargetName.c_str()));
|
||||||
|
lg->WriteMakeRule(ruleFileStream,
|
||||||
|
"Manual pre-install relink rule for target.",
|
||||||
|
localName.c_str(), depends, commands, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -144,6 +144,9 @@ public:
|
|||||||
"On non-DLL platforms mySharedLib will be installed to <prefix>/lib "
|
"On non-DLL platforms mySharedLib will be installed to <prefix>/lib "
|
||||||
"and /some/full/path."
|
"and /some/full/path."
|
||||||
"\n"
|
"\n"
|
||||||
|
"Installing a target with EXCLUDE_FROM_ALL set to true has "
|
||||||
|
"undefined behavior."
|
||||||
|
"\n"
|
||||||
"The FILES signature:\n"
|
"The FILES signature:\n"
|
||||||
" INSTALL(FILES files... DESTINATION <dir>\n"
|
" INSTALL(FILES files... DESTINATION <dir>\n"
|
||||||
" [PERMISSIONS permissions...]\n"
|
" [PERMISSIONS permissions...]\n"
|
||||||
|
@ -45,6 +45,17 @@ cmInstallTargetGenerator
|
|||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void cmInstallTargetGenerator::GenerateScript(std::ostream& os)
|
void cmInstallTargetGenerator::GenerateScript(std::ostream& os)
|
||||||
{
|
{
|
||||||
|
// Warn if installing an exclude-from-all target.
|
||||||
|
if(this->Target->GetPropertyAsBool("EXCLUDE_FROM_ALL"))
|
||||||
|
{
|
||||||
|
cmOStringStream msg;
|
||||||
|
msg << "WARNING: Target \"" << this->Target->GetName()
|
||||||
|
<< "\" has EXCLUDE_FROM_ALL set and will not be built by default "
|
||||||
|
<< "but an install rule has been provided for it. CMake does "
|
||||||
|
<< "not define behavior for this case.";
|
||||||
|
cmSystemTools::Message(msg.str().c_str(), "Warning");
|
||||||
|
}
|
||||||
|
|
||||||
// Track indentation.
|
// Track indentation.
|
||||||
Indent indent;
|
Indent indent;
|
||||||
|
|
||||||
|
@ -353,10 +353,10 @@ void cmLocalUnixMakefileGenerator3
|
|||||||
depends.clear();
|
depends.clear();
|
||||||
|
|
||||||
// Build the target for this pass.
|
// Build the target for this pass.
|
||||||
std::string tmp = cmake::GetCMakeFilesDirectoryPostSlash();
|
std::string makefile2 = cmake::GetCMakeFilesDirectoryPostSlash();
|
||||||
tmp += "Makefile2";
|
makefile2 += "Makefile2";
|
||||||
commands.push_back(this->GetRecursiveMakeCall
|
commands.push_back(this->GetRecursiveMakeCall
|
||||||
(tmp.c_str(),localName.c_str()));
|
(makefile2.c_str(),localName.c_str()));
|
||||||
this->CreateCDCommand(commands,
|
this->CreateCDCommand(commands,
|
||||||
this->Makefile->GetHomeOutputDirectory(),
|
this->Makefile->GetHomeOutputDirectory(),
|
||||||
this->Makefile->GetStartOutputDirectory());
|
this->Makefile->GetStartOutputDirectory());
|
||||||
@ -390,6 +390,26 @@ void cmLocalUnixMakefileGenerator3
|
|||||||
this->Makefile->GetStartOutputDirectory());
|
this->Makefile->GetStartOutputDirectory());
|
||||||
this->WriteMakeRule(ruleFileStream, "fast build rule for target.",
|
this->WriteMakeRule(ruleFileStream, "fast build rule for target.",
|
||||||
localName.c_str(), depends, commands, true);
|
localName.c_str(), depends, commands, true);
|
||||||
|
|
||||||
|
// Add a local name for the rule to relink the target before
|
||||||
|
// installation.
|
||||||
|
if(t->second.NeedRelinkBeforeInstall())
|
||||||
|
{
|
||||||
|
makeTargetName = this->GetRelativeTargetDirectory(t->second);
|
||||||
|
makeTargetName += "/preinstall";
|
||||||
|
localName = t->second.GetName();
|
||||||
|
localName += "/preinstall";
|
||||||
|
depends.clear();
|
||||||
|
commands.clear();
|
||||||
|
commands.push_back(this->GetRecursiveMakeCall
|
||||||
|
(makefile2.c_str(), makeTargetName.c_str()));
|
||||||
|
this->CreateCDCommand(commands,
|
||||||
|
this->Makefile->GetHomeOutputDirectory(),
|
||||||
|
this->Makefile->GetStartOutputDirectory());
|
||||||
|
this->WriteMakeRule(ruleFileStream,
|
||||||
|
"Manual pre-install relink rule for target.",
|
||||||
|
localName.c_str(), depends, commands, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -123,8 +123,9 @@ void cmTarget::DefineProperties(cmake *cm)
|
|||||||
"A property on a target that indicates if the target is excluded "
|
"A property on a target that indicates if the target is excluded "
|
||||||
"from the default build target. If it is not, then with a Makefile "
|
"from the default build target. If it is not, then with a Makefile "
|
||||||
"for example typing make will cause this target to be built. "
|
"for example typing make will cause this target to be built. "
|
||||||
"The same concept applies to the default build of other generators.",
|
"The same concept applies to the default build of other generators. "
|
||||||
false);
|
"Installing a target with EXCLUDE_FROM_ALL set to true has "
|
||||||
|
"undefined behavior.");
|
||||||
|
|
||||||
cm->DefineProperty
|
cm->DefineProperty
|
||||||
("INSTALL_NAME_DIR", cmProperty::TARGET,
|
("INSTALL_NAME_DIR", cmProperty::TARGET,
|
||||||
|
Loading…
Reference in New Issue
Block a user