ENH: Removed unquoted version of OBJECTS make variable. Quoted seems to work everywhere. BUG: Fixed AppendAnyDepend to properly identify executable targets. BUG: Used CreateMakeVariable to fix variable name for OBJECTS list when target has a . in its name.
This commit is contained in:
parent
b94585d45f
commit
47ee00b7a5
|
@ -43,8 +43,8 @@
|
||||||
// TODO: Add "help" target.
|
// TODO: Add "help" target.
|
||||||
// TODO: Identify remaining relative path violations.
|
// TODO: Identify remaining relative path violations.
|
||||||
// TODO: Add test to drive installation through native build system.
|
// TODO: Add test to drive installation through native build system.
|
||||||
// TODO: Is there a case where quoted object list fails and unquoted works?
|
|
||||||
// TODO: External object file feature.
|
// TODO: External object file feature.
|
||||||
|
// TODO: Need test for separate executable/library output path.
|
||||||
|
|
||||||
// TODO: Fortran support:
|
// TODO: Fortran support:
|
||||||
// - This needs a "provides-requires" mode for the .o files in a target.
|
// - This needs a "provides-requires" mode for the .o files in a target.
|
||||||
|
@ -1490,13 +1490,11 @@ cmLocalUnixMakefileGenerator2
|
||||||
|
|
||||||
// Construct object file lists that may be needed to expand the
|
// Construct object file lists that may be needed to expand the
|
||||||
// rule.
|
// rule.
|
||||||
this->WriteObjectsVariable(ruleFileStream, target, objects);
|
std::string variableName;
|
||||||
|
this->WriteObjectsVariable(ruleFileStream, target, objects, variableName);
|
||||||
std::string objs = "$(";
|
std::string objs = "$(";
|
||||||
objs += target.GetName();
|
objs += variableName;
|
||||||
objs += "_OBJECTS)";
|
objs += ")";
|
||||||
std::string objsQuoted = "$(";
|
|
||||||
objsQuoted += target.GetName();
|
|
||||||
objsQuoted += "_OBJECTS_QUOTED)";
|
|
||||||
|
|
||||||
// Expand placeholders in the commands.
|
// Expand placeholders in the commands.
|
||||||
for(std::vector<std::string>::iterator i = commands.begin();
|
for(std::vector<std::string>::iterator i = commands.begin();
|
||||||
|
@ -1761,13 +1759,11 @@ cmLocalUnixMakefileGenerator2
|
||||||
|
|
||||||
// Construct object file lists that may be needed to expand the
|
// Construct object file lists that may be needed to expand the
|
||||||
// rule.
|
// rule.
|
||||||
this->WriteObjectsVariable(ruleFileStream, target, objects);
|
std::string variableName;
|
||||||
|
this->WriteObjectsVariable(ruleFileStream, target, objects, variableName);
|
||||||
std::string objs = "$(";
|
std::string objs = "$(";
|
||||||
objs += target.GetName();
|
objs += variableName;
|
||||||
objs += "_OBJECTS)";
|
objs += ")";
|
||||||
std::string objsQuoted = "$(";
|
|
||||||
objsQuoted += target.GetName();
|
|
||||||
objsQuoted += "_OBJECTS_QUOTED)";
|
|
||||||
|
|
||||||
// Expand placeholders in the commands.
|
// Expand placeholders in the commands.
|
||||||
for(std::vector<std::string>::iterator i = commands.begin();
|
for(std::vector<std::string>::iterator i = commands.begin();
|
||||||
|
@ -1783,7 +1779,7 @@ cmLocalUnixMakefileGenerator2
|
||||||
objs.c_str(),
|
objs.c_str(),
|
||||||
targetOutPathReal.c_str(),
|
targetOutPathReal.c_str(),
|
||||||
linklibs.str().c_str(),
|
linklibs.str().c_str(),
|
||||||
0, 0, 0, objsQuoted.c_str(),
|
0, 0, 0, objs.c_str(),
|
||||||
targetOutPathBase.c_str(),
|
targetOutPathBase.c_str(),
|
||||||
targetNameSO.c_str(),
|
targetNameSO.c_str(),
|
||||||
linkFlags.c_str());
|
linkFlags.c_str());
|
||||||
|
@ -1827,28 +1823,16 @@ void
|
||||||
cmLocalUnixMakefileGenerator2
|
cmLocalUnixMakefileGenerator2
|
||||||
::WriteObjectsVariable(std::ostream& ruleFileStream,
|
::WriteObjectsVariable(std::ostream& ruleFileStream,
|
||||||
const cmTarget& target,
|
const cmTarget& target,
|
||||||
std::vector<std::string>& objects)
|
const std::vector<std::string>& objects,
|
||||||
|
std::string& variableName)
|
||||||
{
|
{
|
||||||
// Write a make variable assignment that lists all objects for the
|
// Write a make variable assignment that lists all objects for the
|
||||||
// target.
|
// target.
|
||||||
|
variableName = this->CreateMakeVariable(target.GetName(), "_OBJECTS");
|
||||||
ruleFileStream
|
ruleFileStream
|
||||||
<< "# Object files for target " << target.GetName() << "\n"
|
<< "# Object files for target " << target.GetName() << "\n"
|
||||||
<< target.GetName() << "_OBJECTS =";
|
<< variableName.c_str() << " =";
|
||||||
for(std::vector<std::string>::iterator i = objects.begin();
|
for(std::vector<std::string>::const_iterator i = objects.begin();
|
||||||
i != objects.end(); ++i)
|
|
||||||
{
|
|
||||||
ruleFileStream
|
|
||||||
<< " \\\n"
|
|
||||||
<< this->ConvertToRelativeOutputPath(i->c_str());
|
|
||||||
}
|
|
||||||
ruleFileStream
|
|
||||||
<< "\n"
|
|
||||||
<< "\n";
|
|
||||||
|
|
||||||
ruleFileStream
|
|
||||||
<< "# Object files for target " << target.GetName() << "\n"
|
|
||||||
<< target.GetName() << "_OBJECTS_QUOTED =";
|
|
||||||
for(std::vector<std::string>::iterator i = objects.begin();
|
|
||||||
i != objects.end(); ++i)
|
i != objects.end(); ++i)
|
||||||
{
|
{
|
||||||
ruleFileStream
|
ruleFileStream
|
||||||
|
@ -2424,7 +2408,7 @@ cmLocalUnixMakefileGenerator2
|
||||||
// it is an executable.
|
// it is an executable.
|
||||||
std::string typeVar = name;
|
std::string typeVar = name;
|
||||||
typeVar += "_LIBRARY_TYPE";
|
typeVar += "_LIBRARY_TYPE";
|
||||||
const char* libType = m_Makefile->GetSafeDefinition(typeVar.c_str());
|
const char* libType = m_Makefile->GetDefinition(typeVar.c_str());
|
||||||
|
|
||||||
// Get the output path for this target type.
|
// Get the output path for this target type.
|
||||||
std::string tgtOutputPath;
|
std::string tgtOutputPath;
|
||||||
|
|
|
@ -128,7 +128,8 @@ protected:
|
||||||
const char* extraLinkFlags);
|
const char* extraLinkFlags);
|
||||||
void WriteObjectsVariable(std::ostream& ruleFileStream,
|
void WriteObjectsVariable(std::ostream& ruleFileStream,
|
||||||
const cmTarget& target,
|
const cmTarget& target,
|
||||||
std::vector<std::string>& objects);
|
const std::vector<std::string>& objects,
|
||||||
|
std::string& variableName);
|
||||||
void WriteTargetDependsRule(std::ostream& ruleFileStream,
|
void WriteTargetDependsRule(std::ostream& ruleFileStream,
|
||||||
const char* ruleFileName,
|
const char* ruleFileName,
|
||||||
const cmTarget& target,
|
const cmTarget& target,
|
||||||
|
|
Loading…
Reference in New Issue