summaryrefslogtreecommitdiff
path: root/Source/cmLocalUnixMakefileGenerator3.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmLocalUnixMakefileGenerator3.cxx')
-rw-r--r--Source/cmLocalUnixMakefileGenerator3.cxx1740
1 files changed, 712 insertions, 1028 deletions
diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx
index 82220be639..88c6d61af5 100644
--- a/Source/cmLocalUnixMakefileGenerator3.cxx
+++ b/Source/cmLocalUnixMakefileGenerator3.cxx
@@ -26,8 +26,8 @@
// C/C++ scanner is needed for bootstrapping CMake.
#include "cmDependsC.h"
#ifdef CMAKE_BUILD_WITH_CMAKE
-# include "cmDependsFortran.h"
-# include "cmDependsJava.h"
+#include "cmDependsFortran.h"
+#include "cmDependsJava.h"
#endif
#include <cmsys/Terminal.h>
@@ -40,23 +40,31 @@
class cmMakeSafe
{
public:
- cmMakeSafe(const char* s): Data(s) {}
- cmMakeSafe(std::string const& s): Data(s.c_str()) {}
+ cmMakeSafe(const char* s)
+ : Data(s)
+ {
+ }
+ cmMakeSafe(std::string const& s)
+ : Data(s.c_str())
+ {
+ }
+
private:
const char* Data;
- friend std::ostream& operator<<(std::ostream& os,
- cmMakeSafe const& self)
- {
- for(const char* c = self.Data; *c; ++c)
- {
- switch (*c)
- {
- case '=': os << "$(EQUALS)"; break;
- default: os << *c; break;
- }
+ friend std::ostream& operator<<(std::ostream& os, cmMakeSafe const& self)
+ {
+ for (const char* c = self.Data; *c; ++c) {
+ switch (*c) {
+ case '=':
+ os << "$(EQUALS)";
+ break;
+ default:
+ os << *c;
+ break;
}
- return os;
}
+ return os;
+ }
};
// Helper function used below.
@@ -64,21 +72,18 @@ static std::string cmSplitExtension(std::string const& in, std::string& base)
{
std::string ext;
std::string::size_type dot_pos = in.rfind(".");
- if(dot_pos != std::string::npos)
- {
+ if (dot_pos != std::string::npos) {
// Remove the extension first in case &base == &in.
ext = in.substr(dot_pos, std::string::npos);
base = in.substr(0, dot_pos);
- }
- else
- {
+ } else {
base = in;
- }
+ }
return ext;
}
-cmLocalUnixMakefileGenerator3::
-cmLocalUnixMakefileGenerator3(cmGlobalGenerator* gg, cmMakefile* mf)
+cmLocalUnixMakefileGenerator3::cmLocalUnixMakefileGenerator3(
+ cmGlobalGenerator* gg, cmMakefile* mf)
: cmLocalCommonGenerator(gg, mf)
{
this->MakefileVariableSize = 0;
@@ -99,10 +104,9 @@ void cmLocalUnixMakefileGenerator3::Generate()
// Record whether some options are enabled to avoid checking many
// times later.
- if(!this->GetGlobalGenerator()->GetCMakeInstance()->GetIsInTryCompile())
- {
+ if (!this->GetGlobalGenerator()->GetCMakeInstance()->GetIsInTryCompile()) {
this->ColorMakefile = this->Makefile->IsOn("CMAKE_COLOR_MAKEFILE");
- }
+ }
this->SkipPreprocessedSourceRules =
this->Makefile->IsOn("CMAKE_SKIP_PREPROCESSED_SOURCE_RULES");
this->SkipAssemblySourceRules =
@@ -112,21 +116,18 @@ void cmLocalUnixMakefileGenerator3::Generate()
std::vector<cmGeneratorTarget*> targets = this->GetGeneratorTargets();
cmGlobalUnixMakefileGenerator3* gg =
static_cast<cmGlobalUnixMakefileGenerator3*>(this->GlobalGenerator);
- for(std::vector<cmGeneratorTarget*>::iterator t = targets.begin();
- t != targets.end(); ++t)
- {
- if ((*t)->GetType() == cmState::INTERFACE_LIBRARY)
- {
+ for (std::vector<cmGeneratorTarget*>::iterator t = targets.begin();
+ t != targets.end(); ++t) {
+ if ((*t)->GetType() == cmState::INTERFACE_LIBRARY) {
continue;
- }
+ }
cmsys::auto_ptr<cmMakefileTargetGenerator> tg(
cmMakefileTargetGenerator::New(*t));
- if (tg.get())
- {
+ if (tg.get()) {
tg->WriteRuleFiles();
gg->RecordTargetProgress(tg.get());
- }
}
+ }
// write the local Makefile
this->WriteLocalMakefile();
@@ -141,44 +142,40 @@ void cmLocalUnixMakefileGenerator3::ComputeHomeRelativeOutputPath()
// directory from the top output directory.
this->HomeRelativeOutputPath =
this->Convert(this->GetCurrentBinaryDirectory(), HOME_OUTPUT);
- if(this->HomeRelativeOutputPath == ".")
- {
+ if (this->HomeRelativeOutputPath == ".") {
this->HomeRelativeOutputPath = "";
- }
- if(!this->HomeRelativeOutputPath.empty())
- {
+ }
+ if (!this->HomeRelativeOutputPath.empty()) {
this->HomeRelativeOutputPath += "/";
- }
+ }
}
void cmLocalUnixMakefileGenerator3::ComputeObjectFilenames(
- std::map<cmSourceFile const*, std::string>& mapping,
- cmGeneratorTarget const* gt)
+ std::map<cmSourceFile const*, std::string>& mapping,
+ cmGeneratorTarget const* gt)
{
- for(std::map<cmSourceFile const*, std::string>::iterator
- si = mapping.begin(); si != mapping.end(); ++si)
- {
+ for (std::map<cmSourceFile const*, std::string>::iterator si =
+ mapping.begin();
+ si != mapping.end(); ++si) {
cmSourceFile const* sf = si->first;
- si->second = this->GetObjectFileNameWithoutTarget(*sf,
- gt->ObjectDirectory);
- }
+ si->second =
+ this->GetObjectFileNameWithoutTarget(*sf, gt->ObjectDirectory);
+ }
}
-void cmLocalUnixMakefileGenerator3::
-GetLocalObjectFiles(std::map<std::string, LocalObjectInfo> &localObjectFiles)
+void cmLocalUnixMakefileGenerator3::GetLocalObjectFiles(
+ std::map<std::string, LocalObjectInfo>& localObjectFiles)
{
std::vector<cmGeneratorTarget*> targets = this->GetGeneratorTargets();
- for(std::vector<cmGeneratorTarget*>::iterator ti = targets.begin();
- ti != targets.end(); ++ti)
- {
+ for (std::vector<cmGeneratorTarget*>::iterator ti = targets.begin();
+ ti != targets.end(); ++ti) {
cmGeneratorTarget* gt = *ti;
- if (gt->GetType() == cmState::INTERFACE_LIBRARY)
- {
+ if (gt->GetType() == cmState::INTERFACE_LIBRARY) {
continue;
- }
+ }
std::vector<cmSourceFile const*> objectSources;
- gt->GetObjectSources(objectSources, this->Makefile
- ->GetSafeDefinition("CMAKE_BUILD_TYPE"));
+ gt->GetObjectSources(
+ objectSources, this->Makefile->GetSafeDefinition("CMAKE_BUILD_TYPE"));
// Compute full path to object file directory for this target.
std::string dir;
dir += gt->LocalGenerator->GetCurrentBinaryDirectory();
@@ -186,49 +183,42 @@ GetLocalObjectFiles(std::map<std::string, LocalObjectInfo> &localObjectFiles)
dir += this->GetTargetDirectory(gt);
dir += "/";
// Compute the name of each object file.
- for(std::vector<cmSourceFile const*>::iterator
- si = objectSources.begin();
- si != objectSources.end(); ++si)
- {
+ for (std::vector<cmSourceFile const*>::iterator si = objectSources.begin();
+ si != objectSources.end(); ++si) {
cmSourceFile const* sf = *si;
bool hasSourceExtension = true;
- std::string objectName = this->GetObjectFileNameWithoutTarget(*sf,
- dir,
- &hasSourceExtension);
- if(cmSystemTools::FileIsFullPath(objectName.c_str()))
- {
+ std::string objectName =
+ this->GetObjectFileNameWithoutTarget(*sf, dir, &hasSourceExtension);
+ if (cmSystemTools::FileIsFullPath(objectName.c_str())) {
objectName = cmSystemTools::GetFilenameName(objectName);
- }
+ }
LocalObjectInfo& info = localObjectFiles[objectName];
info.HasSourceExtension = hasSourceExtension;
info.push_back(LocalObjectEntry(gt, sf->GetLanguage()));
- }
}
+ }
}
-void cmLocalUnixMakefileGenerator3::GetIndividualFileTargets
- (std::vector<std::string>& targets)
+void cmLocalUnixMakefileGenerator3::GetIndividualFileTargets(
+ std::vector<std::string>& targets)
{
std::map<std::string, LocalObjectInfo> localObjectFiles;
this->GetLocalObjectFiles(localObjectFiles);
for (std::map<std::string, LocalObjectInfo>::iterator lo =
localObjectFiles.begin();
- lo != localObjectFiles.end(); ++lo)
- {
+ lo != localObjectFiles.end(); ++lo) {
targets.push_back(lo->first);
std::string::size_type dot_pos = lo->first.rfind(".");
std::string base = lo->first.substr(0, dot_pos);
- if(lo->second.HasPreprocessRule)
- {
+ if (lo->second.HasPreprocessRule) {
targets.push_back(base + ".i");
- }
+ }
- if(lo->second.HasAssembleRule)
- {
+ if (lo->second.HasAssembleRule) {
targets.push_back(base + ".s");
- }
}
+ }
}
void cmLocalUnixMakefileGenerator3::WriteLocalMakefile()
@@ -240,15 +230,13 @@ void cmLocalUnixMakefileGenerator3::WriteLocalMakefile()
// rules may depend on this file itself.
std::string ruleFileNameFull = this->ConvertToFullPath(ruleFileName);
cmGeneratedFileStream ruleFileStream(ruleFileNameFull.c_str());
- if(!ruleFileStream)
- {
+ if (!ruleFileStream) {
return;
- }
+ }
// always write the top makefile
- if (!this->IsRootMakefile())
- {
+ if (!this->IsRootMakefile()) {
ruleFileStream.SetCopyIfDifferent(true);
- }
+ }
// write the all rules
this->WriteLocalAllRules(ruleFileStream);
@@ -256,23 +244,18 @@ void cmLocalUnixMakefileGenerator3::WriteLocalMakefile()
// only write local targets unless at the top Keep track of targets already
// listed.
std::set<std::string> emittedTargets;
- if (!this->IsRootMakefile())
- {
+ if (!this->IsRootMakefile()) {
// write our targets, and while doing it collect up the object
// file rules
- this->WriteLocalMakefileTargets(ruleFileStream,emittedTargets);
- }
- else
- {
- cmGlobalUnixMakefileGenerator3 *gg =
+ this->WriteLocalMakefileTargets(ruleFileStream, emittedTargets);
+ } else {
+ cmGlobalUnixMakefileGenerator3* gg =
static_cast<cmGlobalUnixMakefileGenerator3*>(this->GlobalGenerator);
- gg->WriteConvenienceRules(ruleFileStream,emittedTargets);
- }
+ gg->WriteConvenienceRules(ruleFileStream, emittedTargets);
+ }
- bool do_preprocess_rules =
- this->GetCreatePreprocessedSourceRules();
- bool do_assembly_rules =
- this->GetCreateAssemblySourceRules();
+ bool do_preprocess_rules = this->GetCreatePreprocessedSourceRules();
+ bool do_assembly_rules = this->GetCreateAssemblySourceRules();
std::map<std::string, LocalObjectInfo> localObjectFiles;
this->GetLocalObjectFiles(localObjectFiles);
@@ -281,8 +264,7 @@ void cmLocalUnixMakefileGenerator3::WriteLocalMakefile()
// for each object file name
for (std::map<std::string, LocalObjectInfo>::iterator lo =
localObjectFiles.begin();
- lo != localObjectFiles.end(); ++lo)
- {
+ lo != localObjectFiles.end(); ++lo) {
// Add a convenience rule for building the object file.
this->WriteObjectConvenienceRule(ruleFileStream,
"target to build an object file",
@@ -293,66 +275,57 @@ void cmLocalUnixMakefileGenerator3::WriteLocalMakefile()
bool lang_has_preprocessor = false;
bool lang_has_assembly = false;
- for(std::vector<LocalObjectEntry>::const_iterator ei =
- lo->second.begin(); ei != lo->second.end(); ++ei)
- {
- if(ei->Language == "C" ||
- ei->Language == "CXX" ||
- ei->Language == "Fortran")
- {
+ for (std::vector<LocalObjectEntry>::const_iterator ei = lo->second.begin();
+ ei != lo->second.end(); ++ei) {
+ if (ei->Language == "C" || ei->Language == "CXX" ||
+ ei->Language == "Fortran") {
// Right now, C, C++ and Fortran have both a preprocessor and the
// ability to generate assembly code
lang_has_preprocessor = true;
lang_has_assembly = true;
break;
- }
}
+ }
// Add convenience rules for preprocessed and assembly files.
- if(lang_has_preprocessor && do_preprocess_rules)
- {
+ if (lang_has_preprocessor && do_preprocess_rules) {
std::string::size_type dot_pos = lo->first.rfind(".");
std::string base = lo->first.substr(0, dot_pos);
- this->WriteObjectConvenienceRule(
- ruleFileStream, "target to preprocess a source file",
- (base + ".i").c_str(), lo->second);
+ this->WriteObjectConvenienceRule(ruleFileStream,
+ "target to preprocess a source file",
+ (base + ".i").c_str(), lo->second);
lo->second.HasPreprocessRule = true;
- }
+ }
- if(lang_has_assembly && do_assembly_rules)
- {
+ if (lang_has_assembly && do_assembly_rules) {
std::string::size_type dot_pos = lo->first.rfind(".");
std::string base = lo->first.substr(0, dot_pos);
this->WriteObjectConvenienceRule(
- ruleFileStream, "target to generate assembly for a file",
- (base + ".s").c_str(), lo->second);
+ ruleFileStream, "target to generate assembly for a file",
+ (base + ".s").c_str(), lo->second);
lo->second.HasAssembleRule = true;
- }
}
+ }
// add a help target as long as there isn;t a real target named help
- if(emittedTargets.insert("help").second)
- {
- cmGlobalUnixMakefileGenerator3 *gg =
+ if (emittedTargets.insert("help").second) {
+ cmGlobalUnixMakefileGenerator3* gg =
static_cast<cmGlobalUnixMakefileGenerator3*>(this->GlobalGenerator);
- gg->WriteHelpRule(ruleFileStream,this);
- }
+ gg->WriteHelpRule(ruleFileStream, this);
+ }
this->WriteSpecialTargetsBottom(ruleFileStream);
}
-void
-cmLocalUnixMakefileGenerator3
-::WriteObjectConvenienceRule(std::ostream& ruleFileStream,
- const char* comment, const char* output,
- LocalObjectInfo const& info)
+void cmLocalUnixMakefileGenerator3::WriteObjectConvenienceRule(
+ std::ostream& ruleFileStream, const char* comment, const char* output,
+ LocalObjectInfo const& info)
{
// If the rule includes the source file extension then create a
// version that has the extension removed. The help should include
// only the version without source extension.
bool inHelp = true;
- if(info.HasSourceExtension)
- {
+ if (info.HasSourceExtension) {
// Remove the last extension. This should be kept.
std::string outBase1 = output;
std::string outExt1 = cmSplitExtension(outBase1, outBase1);
@@ -367,39 +340,34 @@ cmLocalUnixMakefileGenerator3
std::vector<std::string> depends;
depends.push_back(output);
std::vector<std::string> no_commands;
- this->WriteMakeRule(ruleFileStream, 0,
- outNoExt, depends, no_commands, true, true);
+ this->WriteMakeRule(ruleFileStream, 0, outNoExt, depends, no_commands,
+ true, true);
inHelp = false;
- }
+ }
// Recursively make the rule for each target using the object file.
std::vector<std::string> commands;
- for(std::vector<LocalObjectEntry>::const_iterator t = info.begin();
- t != info.end(); ++t)
- {
- std::string tgtMakefileName =
- this->GetRelativeTargetDirectory(t->Target);
+ for (std::vector<LocalObjectEntry>::const_iterator t = info.begin();
+ t != info.end(); ++t) {
+ std::string tgtMakefileName = this->GetRelativeTargetDirectory(t->Target);
std::string targetName = tgtMakefileName;
tgtMakefileName += "/build.make";
targetName += "/";
targetName += output;
commands.push_back(
- this->GetRecursiveMakeCall(tgtMakefileName.c_str(), targetName)
- );
- }
- this->CreateCDCommand(commands,
- this->GetBinaryDirectory(),
+ this->GetRecursiveMakeCall(tgtMakefileName.c_str(), targetName));
+ }
+ this->CreateCDCommand(commands, this->GetBinaryDirectory(),
cmLocalGenerator::START_OUTPUT);
// Write the rule to the makefile.
std::vector<std::string> no_depends;
- this->WriteMakeRule(ruleFileStream, comment,
- output, no_depends, commands, true, inHelp);
+ this->WriteMakeRule(ruleFileStream, comment, output, no_depends, commands,
+ true, inHelp);
}
-void cmLocalUnixMakefileGenerator3
-::WriteLocalMakefileTargets(std::ostream& ruleFileStream,
- std::set<std::string> &emitted)
+void cmLocalUnixMakefileGenerator3::WriteLocalMakefileTargets(
+ std::ostream& ruleFileStream, std::set<std::string>& emitted)
{
std::vector<std::string> depends;
std::vector<std::string> commands;
@@ -408,16 +376,14 @@ void cmLocalUnixMakefileGenerator3
// on the target
std::vector<cmGeneratorTarget*> targets = this->GetGeneratorTargets();
std::string localName;
- for(std::vector<cmGeneratorTarget*>::iterator t = targets.begin();
- t != targets.end(); ++t)
- {
- if(((*t)->GetType() == cmState::EXECUTABLE) ||
- ((*t)->GetType() == cmState::STATIC_LIBRARY) ||
- ((*t)->GetType() == cmState::SHARED_LIBRARY) ||
- ((*t)->GetType() == cmState::MODULE_LIBRARY) ||
- ((*t)->GetType() == cmState::OBJECT_LIBRARY) ||
- ((*t)->GetType() == cmState::UTILITY))
- {
+ for (std::vector<cmGeneratorTarget*>::iterator t = targets.begin();
+ t != targets.end(); ++t) {
+ if (((*t)->GetType() == cmState::EXECUTABLE) ||
+ ((*t)->GetType() == cmState::STATIC_LIBRARY) ||
+ ((*t)->GetType() == cmState::SHARED_LIBRARY) ||
+ ((*t)->GetType() == cmState::MODULE_LIBRARY) ||
+ ((*t)->GetType() == cmState::OBJECT_LIBRARY) ||
+ ((*t)->GetType() == cmState::UTILITY)) {
emitted.insert((*t)->GetName());
// for subdirs add a rule to build this specific target by name.
@@ -429,64 +395,57 @@ void cmLocalUnixMakefileGenerator3
// Build the target for this pass.
std::string makefile2 = cmake::GetCMakeFilesDirectoryPostSlash();
makefile2 += "Makefile2";
- commands.push_back(this->GetRecursiveMakeCall
- (makefile2.c_str(),localName));
- this->CreateCDCommand(commands,
- this->GetBinaryDirectory(),
+ commands.push_back(
+ this->GetRecursiveMakeCall(makefile2.c_str(), localName));
+ this->CreateCDCommand(commands, this->GetBinaryDirectory(),
cmLocalGenerator::START_OUTPUT);
this->WriteMakeRule(ruleFileStream, "Convenience name for target.",
localName, depends, commands, true);
// Add a target with the canonical name (no prefix, suffix or path).
- if(localName != (*t)->GetName())
- {
+ if (localName != (*t)->GetName()) {
commands.clear();
depends.push_back(localName);
this->WriteMakeRule(ruleFileStream, "Convenience name for target.",
(*t)->GetName(), depends, commands, true);
- }
+ }
// Add a fast rule to build the target
- std::string makefileName =
- this->GetRelativeTargetDirectory(*t);
+ std::string makefileName = this->GetRelativeTargetDirectory(*t);
makefileName += "/build.make";
// make sure the makefile name is suitable for a makefile
- std::string makeTargetName =
- this->GetRelativeTargetDirectory(*t);
+ std::string makeTargetName = this->GetRelativeTargetDirectory(*t);
makeTargetName += "/build";
localName = (*t)->GetName();
localName += "/fast";
depends.clear();
commands.clear();
- commands.push_back(this->GetRecursiveMakeCall
- (makefileName.c_str(), makeTargetName));
- this->CreateCDCommand(commands,
- this->GetBinaryDirectory(),
+ commands.push_back(
+ this->GetRecursiveMakeCall(makefileName.c_str(), makeTargetName));
+ this->CreateCDCommand(commands, this->GetBinaryDirectory(),
cmLocalGenerator::START_OUTPUT);
this->WriteMakeRule(ruleFileStream, "fast build rule for target.",
localName, depends, commands, true);
// Add a local name for the rule to relink the target before
// installation.
- if((*t)->NeedRelinkBeforeInstall(this->ConfigName))
- {
+ if ((*t)->NeedRelinkBeforeInstall(this->ConfigName)) {
makeTargetName = this->GetRelativeTargetDirectory(*t);
makeTargetName += "/preinstall";
localName = (*t)->GetName();
localName += "/preinstall";
depends.clear();
commands.clear();
- commands.push_back(this->GetRecursiveMakeCall
- (makefile2.c_str(), makeTargetName));
- this->CreateCDCommand(commands,
- this->GetBinaryDirectory(),
+ commands.push_back(
+ this->GetRecursiveMakeCall(makefile2.c_str(), makeTargetName));
+ this->CreateCDCommand(commands, this->GetBinaryDirectory(),
cmLocalGenerator::START_OUTPUT);
this->WriteMakeRule(ruleFileStream,
"Manual pre-install relink rule for target.",
localName, depends, commands, true);
- }
}
}
+ }
}
void cmLocalUnixMakefileGenerator3::WriteDirectoryInformationFile()
@@ -497,10 +456,9 @@ void cmLocalUnixMakefileGenerator3::WriteDirectoryInformationFile()
// Open the output file.
cmGeneratedFileStream infoFileStream(infoFileName.c_str());
- if(!infoFileStream)
- {
+ if (!infoFileStream) {
return;
- }
+ }
infoFileStream.SetCopyIfDifferent(true);
// Write the do not edit header.
@@ -520,43 +478,35 @@ void cmLocalUnixMakefileGenerator3::WriteDirectoryInformationFile()
/* clang-format on */
// Tell the dependency scanner to use unix paths if necessary.
- if(cmSystemTools::GetForceUnixPaths())
- {
+ if (cmSystemTools::GetForceUnixPaths()) {
/* clang-format off */
infoFileStream
<< "# Force unix paths in dependencies.\n"
<< "set(CMAKE_FORCE_UNIX_PATHS 1)\n"
<< "\n";
/* clang-format on */
- }
+ }
// Store the include regular expressions for this directory.
- infoFileStream
- << "\n"
- << "# The C and CXX include file regular expressions for "
- << "this directory.\n";
- infoFileStream
- << "set(CMAKE_C_INCLUDE_REGEX_SCAN ";
+ infoFileStream << "\n"
+ << "# The C and CXX include file regular expressions for "
+ << "this directory.\n";
+ infoFileStream << "set(CMAKE_C_INCLUDE_REGEX_SCAN ";
this->WriteCMakeArgument(infoFileStream,
this->Makefile->GetIncludeRegularExpression());
- infoFileStream
- << ")\n";
- infoFileStream
- << "set(CMAKE_C_INCLUDE_REGEX_COMPLAIN ";
+ infoFileStream << ")\n";
+ infoFileStream << "set(CMAKE_C_INCLUDE_REGEX_COMPLAIN ";
this->WriteCMakeArgument(infoFileStream,
this->Makefile->GetComplainRegularExpression());
- infoFileStream
- << ")\n";
+ infoFileStream << ")\n";
infoFileStream
<< "set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})\n";
- infoFileStream
- << "set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN "
- "${CMAKE_C_INCLUDE_REGEX_COMPLAIN})\n";
+ infoFileStream << "set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN "
+ "${CMAKE_C_INCLUDE_REGEX_COMPLAIN})\n";
}
-std::string
-cmLocalUnixMakefileGenerator3
-::ConvertToFullPath(const std::string& localPath)
+std::string cmLocalUnixMakefileGenerator3::ConvertToFullPath(
+ const std::string& localPath)
{
std::string dir = this->GetCurrentBinaryDirectory();
dir += "/";
@@ -564,156 +514,126 @@ cmLocalUnixMakefileGenerator3
return dir;
}
-
-const std::string &cmLocalUnixMakefileGenerator3::GetHomeRelativeOutputPath()
+const std::string& cmLocalUnixMakefileGenerator3::GetHomeRelativeOutputPath()
{
return this->HomeRelativeOutputPath;
}
-void
-cmLocalUnixMakefileGenerator3
-::WriteMakeRule(std::ostream& os,
- const char* comment,
- const std::string& target,
- const std::vector<std::string>& depends,
- const std::vector<std::string>& commands,
- bool symbolic,
- bool in_help)
+void cmLocalUnixMakefileGenerator3::WriteMakeRule(
+ std::ostream& os, const char* comment, const std::string& target,
+ const std::vector<std::string>& depends,
+ const std::vector<std::string>& commands, bool symbolic, bool in_help)
{
// Make sure there is a target.
- if(target.empty())
- {
+ if (target.empty()) {
cmSystemTools::Error("No target for WriteMakeRule! called with comment: ",
comment);
return;
- }
+ }
std::string replace;
// Write the comment describing the rule in the makefile.
- if(comment)
- {
+ if (comment) {
replace = comment;
std::string::size_type lpos = 0;
std::string::size_type rpos;
- while((rpos = replace.find('\n', lpos)) != std::string::npos)
- {
- os << "# " << replace.substr(lpos, rpos-lpos) << "\n";
- lpos = rpos+1;
- }
- os << "# " << replace.substr(lpos) << "\n";
+ while ((rpos = replace.find('\n', lpos)) != std::string::npos) {
+ os << "# " << replace.substr(lpos, rpos - lpos) << "\n";
+ lpos = rpos + 1;
}
+ os << "# " << replace.substr(lpos) << "\n";
+ }
// Construct the left hand side of the rule.
std::string tgt = this->Convert(target, HOME_OUTPUT, MAKERULE);
const char* space = "";
- if(tgt.size() == 1)
- {
+ if (tgt.size() == 1) {
// Add a space before the ":" to avoid drive letter confusion on
// Windows.
space = " ";
- }
+ }
// Mark the rule as symbolic if requested.
- if(symbolic)
- {
- if(const char* sym =
- this->Makefile->GetDefinition("CMAKE_MAKE_SYMBOLIC_RULE"))
- {
+ if (symbolic) {
+ if (const char* sym =
+ this->Makefile->GetDefinition("CMAKE_MAKE_SYMBOLIC_RULE")) {
os << cmMakeSafe(tgt) << space << ": " << sym << "\n";
- }
}
+ }
// Write the rule.
- if(depends.empty())
- {
+ if (depends.empty()) {
// No dependencies. The commands will always run.
os << cmMakeSafe(tgt) << space << ":\n";
- }
- else
- {
+ } else {
// Split dependencies into multiple rule lines. This allows for
// very long dependency lists even on older make implementations.
- for(std::vector<std::string>::const_iterator dep = depends.begin();
- dep != depends.end(); ++dep)
- {
+ for (std::vector<std::string>::const_iterator dep = depends.begin();
+ dep != depends.end(); ++dep) {
replace = *dep;
- replace = this->Convert(replace,HOME_OUTPUT,MAKERULE);
+ replace = this->Convert(replace, HOME_OUTPUT, MAKERULE);
os << cmMakeSafe(tgt) << space << ": " << cmMakeSafe(replace) << "\n";
- }
}
+ }
// Write the list of commands.
os << cmWrap("\t", commands, "", "\n") << "\n";
- if(symbolic && !this->IsWatcomWMake())
- {
+ if (symbolic && !this->IsWatcomWMake()) {
os << ".PHONY : " << cmMakeSafe(tgt) << "\n";
- }
+ }
os << "\n";
// Add the output to the local help if requested.
- if(in_help)
- {
+ if (in_help) {
this->LocalHelp.push_back(target);
- }
+ }
}
-std::string
-cmLocalUnixMakefileGenerator3
-::ConvertShellCommand(std::string const& cmd, RelativeRoot root)
+std::string cmLocalUnixMakefileGenerator3::ConvertShellCommand(
+ std::string const& cmd, RelativeRoot root)
{
- if(this->IsWatcomWMake() &&
- cmSystemTools::FileIsFullPath(cmd.c_str()) &&
- cmd.find_first_of("( )") != cmd.npos)
- {
+ if (this->IsWatcomWMake() && cmSystemTools::FileIsFullPath(cmd.c_str()) &&
+ cmd.find_first_of("( )") != cmd.npos) {
// On Watcom WMake use the windows short path for the command
// name. This is needed to avoid funny quoting problems on
// lines with shell redirection operators.
std::string scmd;
- if(cmSystemTools::GetShortPath(cmd, scmd))
- {
+ if (cmSystemTools::GetShortPath(cmd, scmd)) {
return this->Convert(scmd, NONE, SHELL);
- }
}
+ }
return this->Convert(cmd, root, SHELL);
}
-void
-cmLocalUnixMakefileGenerator3
-::WriteMakeVariables(std::ostream& makefileStream)
+void cmLocalUnixMakefileGenerator3::WriteMakeVariables(
+ std::ostream& makefileStream)
{
this->WriteDivider(makefileStream);
- makefileStream
- << "# Set environment variables for the build.\n"
- << "\n";
+ makefileStream << "# Set environment variables for the build.\n"
+ << "\n";
cmGlobalUnixMakefileGenerator3* gg =
static_cast<cmGlobalUnixMakefileGenerator3*>(this->GlobalGenerator);
- if(gg->DefineWindowsNULL)
- {
- makefileStream
- << "!IF \"$(OS)\" == \"Windows_NT\"\n"
- << "NULL=\n"
- << "!ELSE\n"
- << "NULL=nul\n"
- << "!ENDIF\n";
- }
- if(this->IsWindowsShell())
- {
- makefileStream
- << "SHELL = cmd.exe\n"
- << "\n";
- }
- else
- {
+ if (gg->DefineWindowsNULL) {
+ makefileStream << "!IF \"$(OS)\" == \"Windows_NT\"\n"
+ << "NULL=\n"
+ << "!ELSE\n"
+ << "NULL=nul\n"
+ << "!ENDIF\n";
+ }
+ if (this->IsWindowsShell()) {
+ makefileStream << "SHELL = cmd.exe\n"
+ << "\n";
+ } else {
#if !defined(__VMS)
/* clang-format off */
makefileStream
<< "# The shell in which to execute make rules.\n"
<< "SHELL = /bin/sh\n"
<< "\n";
- /* clang-format on */
+/* clang-format on */
#endif
- }
+ }
/* clang-format off */
makefileStream
@@ -747,14 +667,12 @@ cmLocalUnixMakefileGenerator3
/* clang-format on */
}
-void
-cmLocalUnixMakefileGenerator3
-::WriteSpecialTargetsTop(std::ostream& makefileStream)
+void cmLocalUnixMakefileGenerator3::WriteSpecialTargetsTop(
+ std::ostream& makefileStream)
{
this->WriteDivider(makefileStream);
- makefileStream
- << "# Special targets provided by cmake.\n"
- << "\n";
+ makefileStream << "# Special targets provided by cmake.\n"
+ << "\n";
std::vector<std::string> no_commands;
std::vector<std::string> no_depends;
@@ -762,25 +680,23 @@ cmLocalUnixMakefileGenerator3
// Special target to cleanup operation of make tool.
// This should be the first target except for the default_target in
// the interface Makefile.
- this->WriteMakeRule(
- makefileStream, "Disable implicit rules so canonical targets will work.",
- ".SUFFIXES", no_depends, no_commands, false);
+ this->WriteMakeRule(makefileStream,
+ "Disable implicit rules so canonical targets will work.",
+ ".SUFFIXES", no_depends, no_commands, false);
- if(!this->IsNMake()
- && !this->IsWatcomWMake() && !this->BorlandMakeCurlyHack)
- {
+ if (!this->IsNMake() && !this->IsWatcomWMake() &&
+ !this->BorlandMakeCurlyHack) {
// turn off RCS and SCCS automatic stuff from gmake
makefileStream
<< "# Remove some rules from gmake that .SUFFIXES does not remove.\n"
<< "SUFFIXES =\n\n";
- }
+ }
// Add a fake suffix to keep HP happy. Must be max 32 chars for SGI make.
std::vector<std::string> depends;
depends.push_back(".hpux_make_needs_suffix_list");
- this->WriteMakeRule(makefileStream, 0,
- ".SUFFIXES", depends, no_commands, false);
- if(this->IsWatcomWMake())
- {
+ this->WriteMakeRule(makefileStream, 0, ".SUFFIXES", depends, no_commands,
+ false);
+ if (this->IsWatcomWMake()) {
// Switch on WMake feature, if an error or interrupt occurs during
// makefile processing, the current target being made may be deleted
// without prompting (the same as command line -e option).
@@ -791,18 +707,16 @@ cmLocalUnixMakefileGenerator3
"\n"
;
/* clang-format on */
- }
- if(this->Makefile->IsOn("CMAKE_VERBOSE_MAKEFILE"))
- {
+ }
+ if (this->Makefile->IsOn("CMAKE_VERBOSE_MAKEFILE")) {
/* clang-format off */
makefileStream
<< "# Produce verbose output by default.\n"
<< "VERBOSE = 1\n"
<< "\n";
/* clang-format on */
- }
- if(this->IsWatcomWMake())
- {
+ }
+ if (this->IsWatcomWMake()) {
/* clang-format off */
makefileStream <<
"!ifndef VERBOSE\n"
@@ -811,9 +725,7 @@ cmLocalUnixMakefileGenerator3
"\n"
;
/* clang-format on */
- }
- else
- {
+ } else {
// Write special target to silence make output. This must be after
// the default target in case VERBOSE is set (which changes the
// name). The setting of CMAKE_VERBOSE_MAKEFILE to ON will cause a
@@ -822,89 +734,73 @@ cmLocalUnixMakefileGenerator3
// the user.
this->WriteMakeRule(makefileStream,
"Suppress display of executed commands.",
- "$(VERBOSE).SILENT",
- no_depends,
- no_commands, false);
- }
+ "$(VERBOSE).SILENT", no_depends, no_commands, false);
+ }
// Work-around for makes that drop rules that have no dependencies
// or commands.
cmGlobalUnixMakefileGenerator3* gg =
static_cast<cmGlobalUnixMakefileGenerator3*>(this->GlobalGenerator);
std::string hack = gg->GetEmptyRuleHackDepends();
- if(!hack.empty())
- {
+ if (!hack.empty()) {
no_depends.push_back(hack);
- }
+ }
std::string hack_cmd = gg->GetEmptyRuleHackCommand();
- if(!hack_cmd.empty())
- {
+ if (!hack_cmd.empty()) {
no_commands.push_back(hack_cmd);
- }
+ }
// Special symbolic target that never exists to force dependers to
// run their rules.
- this->WriteMakeRule
- (makefileStream,
- "A target that is always out of date.",
- "cmake_force", no_depends, no_commands, true);
+ this->WriteMakeRule(makefileStream, "A target that is always out of date.",
+ "cmake_force", no_depends, no_commands, true);
// Variables for reference by other rules.
this->WriteMakeVariables(makefileStream);
}
-void cmLocalUnixMakefileGenerator3
-::WriteSpecialTargetsBottom(std::ostream& makefileStream)
+void cmLocalUnixMakefileGenerator3::WriteSpecialTargetsBottom(
+ std::ostream& makefileStream)
{
this->WriteDivider(makefileStream);
- makefileStream
- << "# Special targets to cleanup operation of make.\n"
- << "\n";
+ makefileStream << "# Special targets to cleanup operation of make.\n"
+ << "\n";
// Write special "cmake_check_build_system" target to run cmake with
// the --check-build-system flag.
{
- // Build command to run CMake to check if anything needs regenerating.
- std::string cmakefileName = cmake::GetCMakeFilesDirectoryPostSlash();
- cmakefileName += "Makefile.cmake";
- std::string runRule =
- "$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)";
- runRule += " --check-build-system ";
- runRule += this->Convert(cmakefileName,NONE,SHELL);
- runRule += " 0";
+ // Build command to run CMake to check if anything needs regenerating.
+ std::string cmakefileName = cmake::GetCMakeFilesDirectoryPostSlash();
+ cmakefileName += "Makefile.cmake";
+ std::string runRule =
+ "$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)";
+ runRule += " --check-build-system ";
+ runRule += this->Convert(cmakefileName, NONE, SHELL);
+ runRule += " 0";
- std::vector<std::string> no_depends;
- std::vector<std::string> commands;
- commands.push_back(runRule);
- if(!this->IsRootMakefile())
- {
- this->CreateCDCommand(commands,
- this->GetBinaryDirectory(),
- cmLocalGenerator::START_OUTPUT);
+ std::vector<std::string> no_depends;
+ std::vector<std::string> commands;
+ commands.push_back(runRule);
+ if (!this->IsRootMakefile()) {
+ this->CreateCDCommand(commands, this->GetBinaryDirectory(),
+ cmLocalGenerator::START_OUTPUT);
}
- this->WriteMakeRule(makefileStream,
- "Special rule to run CMake to check the build system "
+ this->WriteMakeRule(
+ makefileStream, "Special rule to run CMake to check the build system "
"integrity.\n"
"No rule that depends on this can have "
"commands that come from listfiles\n"
"because they might be regenerated.",
- "cmake_check_build_system",
- no_depends,
- commands, true);
+ "cmake_check_build_system", no_depends, commands, true);
}
}
-
-
-void
-cmLocalUnixMakefileGenerator3
-::WriteConvenienceRule(std::ostream& ruleFileStream,
- const std::string& realTarget,
- const std::string& helpTarget)
+void cmLocalUnixMakefileGenerator3::WriteConvenienceRule(
+ std::ostream& ruleFileStream, const std::string& realTarget,
+ const std::string& helpTarget)
{
// A rule is only needed if the names are different.
- if(realTarget != helpTarget)
- {
+ if (realTarget != helpTarget) {
// The helper target depends on the real target.
std::vector<std::string> depends;
depends.push_back(realTarget);
@@ -915,34 +811,28 @@ cmLocalUnixMakefileGenerator3
// Write the rule.
this->WriteMakeRule(ruleFileStream, "Convenience name for target.",
helpTarget, depends, no_commands, true);
- }
+ }
}
-
-std::string
-cmLocalUnixMakefileGenerator3
-::GetRelativeTargetDirectory(cmGeneratorTarget* target)
+std::string cmLocalUnixMakefileGenerator3::GetRelativeTargetDirectory(
+ cmGeneratorTarget* target)
{
std::string dir = this->HomeRelativeOutputPath;
dir += this->GetTargetDirectory(target);
- return this->Convert(dir,NONE,UNCHANGED);
+ return this->Convert(dir, NONE, UNCHANGED);
}
-
-
void cmLocalUnixMakefileGenerator3::AppendFlags(std::string& flags,
const std::string& newFlags)
{
- if(this->IsWatcomWMake() && !newFlags.empty())
- {
+ if (this->IsWatcomWMake() && !newFlags.empty()) {
std::string newf = newFlags;
- if(newf.find("\\\"") != newf.npos)
- {
+ if (newf.find("\\\"") != newf.npos) {
cmSystemTools::ReplaceString(newf, "\\\"", "\"");
this->cmLocalGenerator::AppendFlags(flags, newf);
return;
- }
}
+ }
this->cmLocalGenerator::AppendFlags(flags, newFlags);
}
@@ -952,203 +842,161 @@ void cmLocalUnixMakefileGenerator3::AppendFlags(std::string& flags,
this->cmLocalGenerator::AppendFlags(flags, newFlags);
}
-void
-cmLocalUnixMakefileGenerator3
-::AppendRuleDepend(std::vector<std::string>& depends,
- const char* ruleFileName)
+void cmLocalUnixMakefileGenerator3::AppendRuleDepend(
+ std::vector<std::string>& depends, const char* ruleFileName)
{
// Add a dependency on the rule file itself unless an option to skip
// it is specifically enabled by the user or project.
const char* nodep =
this->Makefile->GetDefinition("CMAKE_SKIP_RULE_DEPENDENCY");
- if(!nodep || cmSystemTools::IsOff(nodep))
- {
+ if (!nodep || cmSystemTools::IsOff(nodep)) {
depends.push_back(ruleFileName);
- }
+ }
}
-void
-cmLocalUnixMakefileGenerator3
-::AppendRuleDepends(std::vector<std::string>& depends,
- std::vector<std::string> const& ruleFiles)
+void cmLocalUnixMakefileGenerator3::AppendRuleDepends(
+ std::vector<std::string>& depends, std::vector<std::string> const& ruleFiles)
{
// Add a dependency on the rule file itself unless an option to skip
// it is specifically enabled by the user or project.
- if(!this->Makefile->IsOn("CMAKE_SKIP_RULE_DEPENDENCY"))
- {
+ if (!this->Makefile->IsOn("CMAKE_SKIP_RULE_DEPENDENCY")) {
depends.insert(depends.end(), ruleFiles.begin(), ruleFiles.end());
- }
+ }
}
-void
-cmLocalUnixMakefileGenerator3
-::AppendCustomDepends(std::vector<std::string>& depends,
- const std::vector<cmCustomCommand>& ccs)
+void cmLocalUnixMakefileGenerator3::AppendCustomDepends(
+ std::vector<std::string>& depends, const std::vector<cmCustomCommand>& ccs)
{
- for(std::vector<cmCustomCommand>::const_iterator i = ccs.begin();
- i != ccs.end(); ++i)
- {
+ for (std::vector<cmCustomCommand>::const_iterator i = ccs.begin();
+ i != ccs.end(); ++i) {
cmCustomCommandGenerator ccg(*i, this->ConfigName, this);
this->AppendCustomDepend(depends, ccg);
- }
+ }
}
-void
-cmLocalUnixMakefileGenerator3
-::AppendCustomDepend(std::vector<std::string>& depends,
- cmCustomCommandGenerator const& ccg)
+void cmLocalUnixMakefileGenerator3::AppendCustomDepend(
+ std::vector<std::string>& depends, cmCustomCommandGenerator const& ccg)
{
- for(std::vector<std::string>::const_iterator d = ccg.GetDepends().begin();
- d != ccg.GetDepends().end(); ++d)
- {
+ for (std::vector<std::string>::const_iterator d = ccg.GetDepends().begin();
+ d != ccg.GetDepends().end(); ++d) {
// Lookup the real name of the dependency in case it is a CMake target.
std::string dep;
- if(this->GetRealDependency(*d, this->ConfigName,
- dep))
- {
+ if (this->GetRealDependency(*d, this->ConfigName, dep)) {
depends.push_back(dep);
- }
}
+ }
}
-void
-cmLocalUnixMakefileGenerator3
-::AppendCustomCommands(std::vector<std::string>& commands,
- const std::vector<cmCustomCommand>& ccs,
- cmGeneratorTarget* target,
- cmLocalGenerator::RelativeRoot relative)
+void cmLocalUnixMakefileGenerator3::AppendCustomCommands(
+ std::vector<std::string>& commands, const std::vector<cmCustomCommand>& ccs,
+ cmGeneratorTarget* target, cmLocalGenerator::RelativeRoot relative)
{
- for(std::vector<cmCustomCommand>::const_iterator i = ccs.begin();
- i != ccs.end(); ++i)
- {
+ for (std::vector<cmCustomCommand>::const_iterator i = ccs.begin();
+ i != ccs.end(); ++i) {
cmCustomCommandGenerator ccg(*i, this->ConfigName, this);
this->AppendCustomCommand(commands, ccg, target, true, relative);
- }
+ }
}
-void
-cmLocalUnixMakefileGenerator3
-::AppendCustomCommand(std::vector<std::string>& commands,
- cmCustomCommandGenerator const& ccg,
- cmGeneratorTarget* target,
- bool echo_comment,
- cmLocalGenerator::RelativeRoot relative,
- std::ostream* content)
+void cmLocalUnixMakefileGenerator3::AppendCustomCommand(
+ std::vector<std::string>& commands, cmCustomCommandGenerator const& ccg,
+ cmGeneratorTarget* target, bool echo_comment,
+ cmLocalGenerator::RelativeRoot relative, std::ostream* content)
{
// Optionally create a command to display the custom command's
// comment text. This is used for pre-build, pre-link, and
// post-build command comments. Custom build step commands have
// their comments generated elsewhere.
- if(echo_comment)
- {
+ if (echo_comment) {
const char* comment = ccg.GetComment();
- if(comment && *comment)
- {
+ if (comment && *comment) {
this->AppendEcho(commands, comment,
cmLocalUnixMakefileGenerator3::EchoGenerate);
- }
}
+ }
// if the command specified a working directory use it.
- std::string dir = this->GetCurrentBinaryDirectory();
+ std::string dir = this->GetCurrentBinaryDirectory();
std::string workingDir = ccg.GetWorkingDirectory();
- if(!workingDir.empty())
- {
+ if (!workingDir.empty()) {
dir = workingDir;
- }
- if(content)
- {
+ }
+ if (content) {
*content << dir;
- }
+ }
// Add each command line to the set of commands.
std::vector<std::string> commands1;
- for(unsigned int c = 0; c < ccg.GetNumberOfCommands(); ++c)
- {
+ for (unsigned int c = 0; c < ccg.GetNumberOfCommands(); ++c) {
// Build the command line in a single string.
std::string cmd = ccg.GetCommand(c);
- if (!cmd.empty())
- {
+ if (!cmd.empty()) {
// Use "call " before any invocations of .bat or .cmd files
// invoked as custom commands in the WindowsShell.
//
bool useCall = false;
- if (this->IsWindowsShell())
- {
+ if (this->IsWindowsShell()) {
std::string suffix;
- if (cmd.size() > 4)
- {
- suffix = cmSystemTools::LowerCase(cmd.substr(cmd.size()-4));
- if (suffix == ".bat" || suffix == ".cmd")
- {
+ if (cmd.size() > 4) {
+ suffix = cmSystemTools::LowerCase(cmd.substr(cmd.size() - 4));
+ if (suffix == ".bat" || suffix == ".cmd") {
useCall = true;
- }
}
}
+ }
cmSystemTools::ReplaceString(cmd, "/./", "/");
// Convert the command to a relative path only if the current
// working directory will be the start-output directory.
bool had_slash = cmd.find("/") != cmd.npos;
- if(workingDir.empty())
- {
- cmd = this->Convert(cmd,START_OUTPUT);
- }
+ if (workingDir.empty()) {
+ cmd = this->Convert(cmd, START_OUTPUT);
+ }
bool has_slash = cmd.find("/") != cmd.npos;
- if(had_slash && !has_slash)
- {
+ if (had_slash && !has_slash) {
// This command was specified as a path to a file in the
// current directory. Add a leading "./" so it can run
// without the current directory being in the search path.
cmd = "./" + cmd;
- }
- std::string launcher =
- this->MakeLauncher(ccg, target,
- workingDir.empty()? START_OUTPUT : NONE);
+ }
+ std::string launcher = this->MakeLauncher(
+ ccg, target, workingDir.empty() ? START_OUTPUT : NONE);
cmd = launcher + this->ConvertShellCommand(cmd, NONE);
ccg.AppendArguments(c, cmd);
- if(content)
- {
+ if (content) {
// Rule content does not include the launcher.
- *content << (cmd.c_str()+launcher.size());
- }
- if(this->BorlandMakeCurlyHack)
- {
+ *content << (cmd.c_str() + launcher.size());
+ }
+ if (this->BorlandMakeCurlyHack) {
// Borland Make has a very strange bug. If the first curly
// brace anywhere in the command string is a left curly, it
// must be written {{} instead of just {. Otherwise some
// curly braces are removed. The hack can be skipped if the
// first curly brace is the last character.
std::string::size_type lcurly = cmd.find("{");
- if(lcurly != cmd.npos && lcurly < (cmd.size()-1))
- {
+ if (lcurly != cmd.npos && lcurly < (cmd.size() - 1)) {
std::string::size_type rcurly = cmd.find("}");
- if(rcurly == cmd.npos || rcurly > lcurly)
- {
+ if (rcurly == cmd.npos || rcurly > lcurly) {
// The first curly is a left curly. Use the hack.
std::string hack_cmd = cmd.substr(0, lcurly);
hack_cmd += "{{}";
- hack_cmd += cmd.substr(lcurly+1);
+ hack_cmd += cmd.substr(lcurly + 1);
cmd = hack_cmd;
- }
}
}
- if (launcher.empty())
- {
- if (useCall)
- {
+ }
+ if (launcher.empty()) {
+ if (useCall) {
cmd = "call " + cmd;
- }
- else if (this->IsNMake() && cmd[0]=='"')
- {
+ } else if (this->IsNMake() && cmd[0] == '"') {
cmd = "echo >nul && " + cmd;
- }
}
- commands1.push_back(cmd);
}
+ commands1.push_back(cmd);
}
+ }
// Setup the proper working directory for the commands.
this->CreateCDCommand(commands1, dir.c_str(), relative);
@@ -1157,18 +1005,16 @@ cmLocalUnixMakefileGenerator3
commands.insert(commands.end(), commands1.begin(), commands1.end());
}
-std::string
-cmLocalUnixMakefileGenerator3::MakeLauncher(
- cmCustomCommandGenerator const& ccg,
- cmGeneratorTarget* target, RelativeRoot relative)
+std::string cmLocalUnixMakefileGenerator3::MakeLauncher(
+ cmCustomCommandGenerator const& ccg, cmGeneratorTarget* target,
+ RelativeRoot relative)
{
// Short-circuit if there is no launcher.
const char* prop = "RULE_LAUNCH_CUSTOM";
const char* val = this->GetRuleLauncher(target, prop);
- if(!(val && *val))
- {
+ if (!(val && *val)) {
return "";
- }
+ }
// Expand rules in the empty string. It may insert the launcher and
// perform replacements.
@@ -1177,65 +1023,56 @@ cmLocalUnixMakefileGenerator3::MakeLauncher(
vars.CMTarget = target;
std::string output;
const std::vector<std::string>& outputs = ccg.GetOutputs();
- if(!outputs.empty())
- {
+ if (!outputs.empty()) {
output = this->Convert(outputs[0], relative, SHELL);
- }
+ }
vars.Output = output.c_str();
std::string launcher;
this->ExpandRuleVariables(launcher, vars);
- if(!launcher.empty())
- {
+ if (!launcher.empty()) {
launcher += " ";
- }
+ }
return launcher;
}
-void
-cmLocalUnixMakefileGenerator3
-::AppendCleanCommand(std::vector<std::string>& commands,
- const std::vector<std::string>& files,
- cmGeneratorTarget* target, const char* filename)
+void cmLocalUnixMakefileGenerator3::AppendCleanCommand(
+ std::vector<std::string>& commands, const std::vector<std::string>& files,
+ cmGeneratorTarget* target, const char* filename)
{
std::string cleanfile = this->GetCurrentBinaryDirectory();
cleanfile += "/";
cleanfile += this->GetTargetDirectory(target);
cleanfile += "/cmake_clean";
- if(filename)
- {
+ if (filename) {
cleanfile += "_";
cleanfile += filename;
- }
+ }
cleanfile += ".cmake";
std::string cleanfilePath = this->Convert(cleanfile, FULL);
cmsys::ofstream fout(cleanfilePath.c_str());
- if(!fout)
- {
+ if (!fout) {
cmSystemTools::Error("Could not create ", cleanfilePath.c_str());
- }
- if(!files.empty())
- {
+ }
+ if (!files.empty()) {
fout << "file(REMOVE_RECURSE\n";
- for(std::vector<std::string>::const_iterator f = files.begin();
- f != files.end(); ++f)
- {
- std::string fc = this->Convert(*f,START_OUTPUT,UNCHANGED);
+ for (std::vector<std::string>::const_iterator f = files.begin();
+ f != files.end(); ++f) {
+ std::string fc = this->Convert(*f, START_OUTPUT, UNCHANGED);
fout << " " << cmOutputConverter::EscapeForCMake(fc) << "\n";
- }
- fout << ")\n";
}
+ fout << ")\n";
+ }
std::string remove = "$(CMAKE_COMMAND) -P ";
remove += this->Convert(cleanfile, START_OUTPUT, SHELL);
commands.push_back(remove);
// For the main clean rule add per-language cleaning.
- if(!filename)
- {
+ if (!filename) {
// Get the set of source languages in the target.
std::set<std::string> languages;
- target->GetLanguages(languages,
- this->Makefile->GetSafeDefinition("CMAKE_BUILD_TYPE"));
+ target->GetLanguages(
+ languages, this->Makefile->GetSafeDefinition("CMAKE_BUILD_TYPE"));
/* clang-format off */
fout << "\n"
<< "# Per-language clean rules from dependency scanning.\n"
@@ -1244,23 +1081,19 @@ cmLocalUnixMakefileGenerator3
<< "/cmake_clean_${lang}.cmake OPTIONAL)\n"
<< "endforeach()\n";
/* clang-format on */
- }
+ }
}
-void
-cmLocalUnixMakefileGenerator3::AppendEcho(std::vector<std::string>& commands,
- std::string const& text,
- EchoColor color,
- EchoProgress const* progress)
+void cmLocalUnixMakefileGenerator3::AppendEcho(
+ std::vector<std::string>& commands, std::string const& text, EchoColor color,
+ EchoProgress const* progress)
{
// Choose the color for the text.
std::string color_name;
- if(this->GlobalGenerator->GetToolSupportsColor() && this->ColorMakefile)
- {
+ if (this->GlobalGenerator->GetToolSupportsColor() && this->ColorMakefile) {
// See cmake::ExecuteEchoColor in cmake.cxx for these options.
// This color set is readable on both black and white backgrounds.
- switch(color)
- {
+ switch (color) {
case EchoNormal:
break;
case EchoDepend:
@@ -1278,47 +1111,39 @@ cmLocalUnixMakefileGenerator3::AppendEcho(std::vector<std::string>& commands,
case EchoGlobal:
color_name = "--cyan ";
break;
- }
}
+ }
// Echo one line at a time.
std::string line;
line.reserve(200);
- for(const char* c = text.c_str();; ++c)
- {
- if(*c == '\n' || *c == '\0')
- {
+ for (const char* c = text.c_str();; ++c) {
+ if (*c == '\n' || *c == '\0') {
// Avoid writing a blank last line on end-of-string.
- if(*c != '\0' || !line.empty())
- {
+ if (*c != '\0' || !line.empty()) {
// Add a command to echo this line.
std::string cmd;
- if(color_name.empty() && !progress)
- {
+ if (color_name.empty() && !progress) {
// Use the native echo command.
cmd = "@echo ";
cmd += this->EscapeForShell(line, false, true);
- }
- else
- {
+ } else {
// Use cmake to echo the text in color.
cmd = "@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) ";
cmd += color_name;
- if (progress)
- {
+ if (progress) {
cmd += "--progress-dir=";
- cmd += this->Convert(progress->Dir,
- cmLocalGenerator::FULL,
+ cmd += this->Convert(progress->Dir, cmLocalGenerator::FULL,
cmLocalGenerator::SHELL);
cmd += " ";
cmd += "--progress-num=";
cmd += progress->Arg;
cmd += " ";
- }
- cmd += this->EscapeForShell(line);
}
- commands.push_back(cmd);
+ cmd += this->EscapeForShell(line);
}
+ commands.push_back(cmd);
+ }
// Reset the line to emtpy.
line = "";
@@ -1327,22 +1152,18 @@ cmLocalUnixMakefileGenerator3::AppendEcho(std::vector<std::string>& commands,
progress = 0;
// Terminate on end-of-string.
- if(*c == '\0')
- {
+ if (*c == '\0') {
return;
- }
}
- else if(*c != '\r')
- {
+ } else if (*c != '\r') {
// Append this character to the current line.
line += *c;
- }
}
+ }
}
-std::string
-cmLocalUnixMakefileGenerator3
-::CreateMakeVariable(const std::string& sin, const std::string& s2in)
+std::string cmLocalUnixMakefileGenerator3::CreateMakeVariable(
+ const std::string& sin, const std::string& s2in)
{
std::string s = sin;
std::string s2 = s2in;
@@ -1351,27 +1172,24 @@ cmLocalUnixMakefileGenerator3
// if there is no restriction on the length of make variables
// and there are no "." characters in the string, then return the
// unmodified combination.
- if((!this->MakefileVariableSize && unmodified.find('.') == s.npos)
- && (!this->MakefileVariableSize && unmodified.find('+') == s.npos)
- && (!this->MakefileVariableSize && unmodified.find('-') == s.npos))
- {
+ if ((!this->MakefileVariableSize && unmodified.find('.') == s.npos) &&
+ (!this->MakefileVariableSize && unmodified.find('+') == s.npos) &&
+ (!this->MakefileVariableSize && unmodified.find('-') == s.npos)) {
return unmodified;
- }
+ }
// see if the variable has been defined before and return
// the modified version of the variable
std::map<std::string, std::string>::iterator i =
this->MakeVariableMap.find(unmodified);
- if(i != this->MakeVariableMap.end())
- {
+ if (i != this->MakeVariableMap.end()) {
return i->second;
- }
+ }
// start with the unmodified variable
std::string ret = unmodified;
// if this there is no value for this->MakefileVariableSize then
// the string must have bad characters in it
- if(!this->MakefileVariableSize)
- {
+ if (!this->MakefileVariableSize) {
cmSystemTools::ReplaceString(ret, ".", "_");
cmSystemTools::ReplaceString(ret, "-", "__");
cmSystemTools::ReplaceString(ret, "+", "___");
@@ -1379,53 +1197,47 @@ cmLocalUnixMakefileGenerator3
char buffer[5];
// make sure the _ version is not already used, if
// it is used then add number to the end of the variable
- while(this->ShortMakeVariableMap.count(ret) && ni < 1000)
- {
+ while (this->ShortMakeVariableMap.count(ret) && ni < 1000) {
++ni;
sprintf(buffer, "%04d", ni);
ret = unmodified + buffer;
- }
+ }
this->ShortMakeVariableMap[ret] = "1";
this->MakeVariableMap[unmodified] = ret;
return ret;
- }
+ }
// if the string is greater than 32 chars it is an invalid variable name
// for borland make
- if(static_cast<int>(ret.size()) > this->MakefileVariableSize)
- {
+ if (static_cast<int>(ret.size()) > this->MakefileVariableSize) {
int keep = this->MakefileVariableSize - 8;
int size = keep + 3;
std::string str1 = s;
std::string str2 = s2;
// we must shorten the combined string by 4 characters
// keep no more than 24 characters from the second string
- if(static_cast<int>(str2.size()) > keep)
- {
+ if (static_cast<int>(str2.size()) > keep) {
str2 = str2.substr(0, keep);
- }
- if(static_cast<int>(str1.size()) + static_cast<int>(str2.size()) > size)
- {
+ }
+ if (static_cast<int>(str1.size()) + static_cast<int>(str2.size()) > size) {
str1 = str1.substr(0, size - str2.size());
- }
+ }
char buffer[5];
int ni = 0;
sprintf(buffer, "%04d", ni);
ret = str1 + str2 + buffer;
- while(this->ShortMakeVariableMap.count(ret) && ni < 1000)
- {
+ while (this->ShortMakeVariableMap.count(ret) && ni < 1000) {
++ni;
sprintf(buffer, "%04d", ni);
ret = str1 + str2 + buffer;
- }
- if(ni == 1000)
- {
+ }
+ if (ni == 1000) {
cmSystemTools::Error("Borland makefile variable length too long");
return unmodified;
- }
+ }
// once an unused variable is found
this->ShortMakeVariableMap[ret] = "1";
- }
+ }
// always make an entry into the unmodified to variable map
this->MakeVariableMap[unmodified] = ret;
return ret;
@@ -1436,11 +1248,10 @@ bool cmLocalUnixMakefileGenerator3::UpdateDependencies(const char* tgtInfo,
bool color)
{
// read in the target info file
- if(!this->Makefile->ReadListFile(tgtInfo) ||
- cmSystemTools::GetErrorOccuredFlag())
- {
+ if (!this->Makefile->ReadListFile(tgtInfo) ||
+ cmSystemTools::GetErrorOccuredFlag()) {
cmSystemTools::Error("Target DependInfo.cmake file not found");
- }
+ }
// Check if any multiple output pairs have a missing file.
this->CheckMultipleOutputs(verbose);
@@ -1457,19 +1268,16 @@ bool cmLocalUnixMakefileGenerator3::UpdateDependencies(const char* tgtInfo,
cmFileTimeComparison* ftc =
this->GlobalGenerator->GetCMakeInstance()->GetFileComparison();
{
- int result;
- if(!ftc->FileTimeCompare(internalDependFile.c_str(), tgtInfo, &result) ||
- result < 0)
- {
- if(verbose)
- {
- std::ostringstream msg;
- msg << "Dependee \"" << tgtInfo
- << "\" is newer than depender \""
- << internalDependFile << "\"." << std::endl;
- cmSystemTools::Stdout(msg.str().c_str());
+ int result;
+ if (!ftc->FileTimeCompare(internalDependFile.c_str(), tgtInfo, &result) ||
+ result < 0) {
+ if (verbose) {
+ std::ostringstream msg;
+ msg << "Dependee \"" << tgtInfo << "\" is newer than depender \""
+ << internalDependFile << "\"." << std::endl;
+ cmSystemTools::Stdout(msg.str().c_str());
}
- needRescanDependInfo = true;
+ needRescanDependInfo = true;
}
}
@@ -1480,19 +1288,17 @@ bool cmLocalUnixMakefileGenerator3::UpdateDependencies(const char* tgtInfo,
dirInfoFile += cmake::GetCMakeFilesDirectory();
dirInfoFile += "/CMakeDirectoryInformation.cmake";
{
- int result;
- if(!ftc->FileTimeCompare(internalDependFile.c_str(),
- dirInfoFile.c_str(), &result) || result < 0)
- {
- if(verbose)
- {
- std::ostringstream msg;
- msg << "Dependee \"" << dirInfoFile
- << "\" is newer than depender \""
- << internalDependFile << "\"." << std::endl;
- cmSystemTools::Stdout(msg.str().c_str());
+ int result;
+ if (!ftc->FileTimeCompare(internalDependFile.c_str(), dirInfoFile.c_str(),
+ &result) ||
+ result < 0) {
+ if (verbose) {
+ std::ostringstream msg;
+ msg << "Dependee \"" << dirInfoFile << "\" is newer than depender \""
+ << internalDependFile << "\"." << std::endl;
+ cmSystemTools::Stdout(msg.str().c_str());
}
- needRescanDirInfo = true;
+ needRescanDirInfo = true;
}
}
@@ -1502,8 +1308,7 @@ bool cmLocalUnixMakefileGenerator3::UpdateDependencies(const char* tgtInfo,
// not be considered.
std::map<std::string, cmDepends::DependencyVector> validDependencies;
bool needRescanDependencies = false;
- if (needRescanDirInfo == false)
- {
+ if (needRescanDirInfo == false) {
cmDependsC checker;
checker.SetVerbose(verbose);
checker.SetFileComparison(ftc);
@@ -1517,34 +1322,30 @@ bool cmLocalUnixMakefileGenerator3::UpdateDependencies(const char* tgtInfo,
// dependency vector. This means that in the normal case, when only
// few or one file have been edited, then also only this one file is
// actually scanned again, instead of all files for this target.
- needRescanDependencies = !checker.Check(dependFile.c_str(),
- internalDependFile.c_str(),
- validDependencies);
- }
+ needRescanDependencies = !checker.Check(
+ dependFile.c_str(), internalDependFile.c_str(), validDependencies);
+ }
- if(needRescanDependInfo || needRescanDirInfo || needRescanDependencies)
- {
+ if (needRescanDependInfo || needRescanDirInfo || needRescanDependencies) {
// The dependencies must be regenerated.
std::string targetName = cmSystemTools::GetFilenameName(dir);
- targetName = targetName.substr(0, targetName.length()-4);
+ targetName = targetName.substr(0, targetName.length() - 4);
std::string message = "Scanning dependencies of target ";
message += targetName;
- cmSystemTools::MakefileColorEcho(
- cmsysTerminal_Color_ForegroundMagenta |
- cmsysTerminal_Color_ForegroundBold,
- message.c_str(), true, color);
+ cmSystemTools::MakefileColorEcho(cmsysTerminal_Color_ForegroundMagenta |
+ cmsysTerminal_Color_ForegroundBold,
+ message.c_str(), true, color);
return this->ScanDependencies(dir.c_str(), validDependencies);
- }
+ }
// The dependencies are already up-to-date.
return true;
}
-bool
-cmLocalUnixMakefileGenerator3
-::ScanDependencies(const char* targetDir,
- std::map<std::string, cmDepends::DependencyVector>& validDeps)
+bool cmLocalUnixMakefileGenerator3::ScanDependencies(
+ const char* targetDir,
+ std::map<std::string, cmDepends::DependencyVector>& validDeps)
{
// Read the directory information file.
cmMakefile* mf = this->Makefile;
@@ -1552,42 +1353,34 @@ cmLocalUnixMakefileGenerator3
std::string dirInfoFile = this->GetCurrentBinaryDirectory();
dirInfoFile += cmake::GetCMakeFilesDirectory();
dirInfoFile += "/CMakeDirectoryInformation.cmake";
- if(mf->ReadListFile(dirInfoFile.c_str()) &&
- !cmSystemTools::GetErrorOccuredFlag())
- {
+ if (mf->ReadListFile(dirInfoFile.c_str()) &&
+ !cmSystemTools::GetErrorOccuredFlag()) {
haveDirectoryInfo = true;
- }
+ }
// Lookup useful directory information.
- if(haveDirectoryInfo)
- {
+ if (haveDirectoryInfo) {
// Test whether we need to force Unix paths.
- if(const char* force = mf->GetDefinition("CMAKE_FORCE_UNIX_PATHS"))
- {
- if(!cmSystemTools::IsOff(force))
- {
+ if (const char* force = mf->GetDefinition("CMAKE_FORCE_UNIX_PATHS")) {
+ if (!cmSystemTools::IsOff(force)) {
cmSystemTools::SetForceUnixPaths(true);
- }
}
+ }
// Setup relative path top directories.
- if(const char* relativePathTopSource =
- mf->GetDefinition("CMAKE_RELATIVE_PATH_TOP_SOURCE"))
- {
- this->StateSnapshot.GetDirectory()
- .SetRelativePathTopSource(relativePathTopSource);
- }
- if(const char* relativePathTopBinary =
- mf->GetDefinition("CMAKE_RELATIVE_PATH_TOP_BINARY"))
- {
- this->StateSnapshot.GetDirectory()
- .SetRelativePathTopBinary(relativePathTopBinary);
- }
+ if (const char* relativePathTopSource =
+ mf->GetDefinition("CMAKE_RELATIVE_PATH_TOP_SOURCE")) {
+ this->StateSnapshot.GetDirectory().SetRelativePathTopSource(
+ relativePathTopSource);
}
- else
- {
- cmSystemTools::Error("Directory Information file not found");
+ if (const char* relativePathTopBinary =
+ mf->GetDefinition("CMAKE_RELATIVE_PATH_TOP_BINARY")) {
+ this->StateSnapshot.GetDirectory().SetRelativePathTopBinary(
+ relativePathTopBinary);
}
+ } else {
+ cmSystemTools::Error("Directory Information file not found");
+ }
// create the file stream for the depends file
std::string dir = targetDir;
@@ -1598,67 +1391,59 @@ cmLocalUnixMakefileGenerator3
ruleFileNameFull += "/depend.make";
cmGeneratedFileStream ruleFileStream(ruleFileNameFull.c_str());
ruleFileStream.SetCopyIfDifferent(true);
- if(!ruleFileStream)
- {
+ if (!ruleFileStream) {
return false;
- }
+ }
// Open the cmake dependency tracking file. This should not be
// copy-if-different because dependencies are re-scanned when it is
// older than the DependInfo.cmake.
std::string internalRuleFileNameFull = dir;
internalRuleFileNameFull += "/depend.internal";
- cmGeneratedFileStream
- internalRuleFileStream(internalRuleFileNameFull.c_str());
- if(!internalRuleFileStream)
- {
+ cmGeneratedFileStream internalRuleFileStream(
+ internalRuleFileNameFull.c_str());
+ if (!internalRuleFileStream) {
return false;
- }
+ }
this->WriteDisclaimer(ruleFileStream);
this->WriteDisclaimer(internalRuleFileStream);
// for each language we need to scan, scan it
- const char *langStr = mf->GetSafeDefinition("CMAKE_DEPENDS_LANGUAGES");
+ const char* langStr = mf->GetSafeDefinition("CMAKE_DEPENDS_LANGUAGES");
std::vector<std::string> langs;
cmSystemTools::ExpandListArgument(langStr, langs);
- for (std::vector<std::string>::iterator li =
- langs.begin(); li != langs.end(); ++li)
- {
+ for (std::vector<std::string>::iterator li = langs.begin();
+ li != langs.end(); ++li) {
// construct the checker
std::string lang = *li;
// Create the scanner for this language
- cmDepends *scanner = 0;
- if(lang == "C" || lang == "CXX" || lang == "RC" || lang == "ASM")
- {
+ cmDepends* scanner = 0;
+ if (lang == "C" || lang == "CXX" || lang == "RC" || lang == "ASM") {
// TODO: Handle RC (resource files) dependencies correctly.
scanner = new cmDependsC(this, targetDir, lang, &validDeps);
- }
+ }
#ifdef CMAKE_BUILD_WITH_CMAKE
- else if(lang == "Fortran")
- {
+ else if (lang == "Fortran") {
scanner = new cmDependsFortran(this);
- }
- else if(lang == "Java")
- {
+ } else if (lang == "Java") {
scanner = new cmDependsJava();
- }
+ }
#endif
- if (scanner)
- {
+ if (scanner) {
scanner->SetLocalGenerator(this);
- scanner->SetFileComparison
- (this->GlobalGenerator->GetCMakeInstance()->GetFileComparison());
+ scanner->SetFileComparison(
+ this->GlobalGenerator->GetCMakeInstance()->GetFileComparison());
scanner->SetLanguage(lang);
scanner->SetTargetDirectory(dir.c_str());
scanner->Write(ruleFileStream, internalRuleFileStream);
// free the scanner for this language
delete scanner;
- }
}
+ }
return true;
}
@@ -1669,68 +1454,62 @@ void cmLocalUnixMakefileGenerator3::CheckMultipleOutputs(bool verbose)
// Get the string listing the multiple output pairs.
const char* pairs_string = mf->GetDefinition("CMAKE_MULTIPLE_OUTPUT_PAIRS");
- if(!pairs_string)
- {
+ if (!pairs_string) {
return;
- }
+ }
// Convert the string to a list and preserve empty entries.
std::vector<std::string> pairs;
cmSystemTools::ExpandListArgument(pairs_string, pairs, true);
- for(std::vector<std::string>::const_iterator i = pairs.begin();
- i != pairs.end() && (i+1) != pairs.end();)
- {
+ for (std::vector<std::string>::const_iterator i = pairs.begin();
+ i != pairs.end() && (i + 1) != pairs.end();) {
const std::string& depender = *i++;
const std::string& dependee = *i++;
// If the depender is missing then delete the dependee to make
// sure both will be regenerated.
- if(cmSystemTools::FileExists(dependee.c_str()) &&
- !cmSystemTools::FileExists(depender.c_str()))
- {
- if(verbose)
- {
+ if (cmSystemTools::FileExists(dependee.c_str()) &&
+ !cmSystemTools::FileExists(depender.c_str())) {
+ if (verbose) {
std::ostringstream msg;
msg << "Deleting primary custom command output \"" << dependee
- << "\" because another output \""
- << depender << "\" does not exist." << std::endl;
+ << "\" because another output \"" << depender
+ << "\" does not exist." << std::endl;
cmSystemTools::Stdout(msg.str().c_str());
- }
- cmSystemTools::RemoveFile(dependee);
}
+ cmSystemTools::RemoveFile(dependee);
}
+ }
}
-void cmLocalUnixMakefileGenerator3
-::WriteLocalAllRules(std::ostream& ruleFileStream)
+void cmLocalUnixMakefileGenerator3::WriteLocalAllRules(
+ std::ostream& ruleFileStream)
{
this->WriteDisclaimer(ruleFileStream);
// Write the main entry point target. This must be the VERY first
// target so that make with no arguments will run it.
{
- // Just depend on the all target to drive the build.
- std::vector<std::string> depends;
- std::vector<std::string> no_commands;
- depends.push_back("all");
+ // Just depend on the all target to drive the build.
+ std::vector<std::string> depends;
+ std::vector<std::string> no_commands;
+ depends.push_back("all");
- // Write the rule.
- this->WriteMakeRule(ruleFileStream,
- "Default target executed when no arguments are "
- "given to make.",
- "default_target",
- depends,
- no_commands, true);
-
- // Help out users that try "gmake target1 target2 -j".
- cmGlobalUnixMakefileGenerator3* gg =
- static_cast<cmGlobalUnixMakefileGenerator3*>(this->GlobalGenerator);
- if(gg->AllowNotParallel())
- {
- std::vector<std::string> no_depends;
+ // Write the rule.
this->WriteMakeRule(ruleFileStream,
- "Allow only one \"make -f Makefile2\" at a time, but pass parallelism.",
- ".NOTPARALLEL", no_depends, no_commands, false);
+ "Default target executed when no arguments are "
+ "given to make.",
+ "default_target", depends, no_commands, true);
+
+ // Help out users that try "gmake target1 target2 -j".
+ cmGlobalUnixMakefileGenerator3* gg =
+ static_cast<cmGlobalUnixMakefileGenerator3*>(this->GlobalGenerator);
+ if (gg->AllowNotParallel()) {
+ std::vector<std::string> no_depends;
+ this->WriteMakeRule(ruleFileStream, "Allow only one \"make -f "
+ "Makefile2\" at a time, but pass "
+ "parallelism.",
+ ".NOTPARALLEL", no_depends, no_commands, false);
}
}
@@ -1739,25 +1518,21 @@ void cmLocalUnixMakefileGenerator3
// Include the progress variables for the target.
// Write all global targets
this->WriteDivider(ruleFileStream);
- ruleFileStream
- << "# Targets provided globally by CMake.\n"
- << "\n";
+ ruleFileStream << "# Targets provided globally by CMake.\n"
+ << "\n";
std::vector<cmGeneratorTarget*> targets = this->GetGeneratorTargets();
std::vector<cmGeneratorTarget*>::iterator glIt;
- for ( glIt = targets.begin(); glIt != targets.end(); ++ glIt )
- {
- if ( (*glIt)->GetType() == cmState::GLOBAL_TARGET )
- {
- std::string targetString = "Special rule for the target " +
- (*glIt)->GetName();
+ for (glIt = targets.begin(); glIt != targets.end(); ++glIt) {
+ if ((*glIt)->GetType() == cmState::GLOBAL_TARGET) {
+ std::string targetString =
+ "Special rule for the target " + (*glIt)->GetName();
std::vector<std::string> commands;
std::vector<std::string> depends;
const char* text = (*glIt)->GetProperty("EchoString");
- if ( !text )
- {
+ if (!text) {
text = "Running external command ...";
- }
+ }
depends.insert(depends.end(), (*glIt)->GetUtilities().begin(),
(*glIt)->GetUtilities().end());
this->AppendEcho(commands, text,
@@ -1766,43 +1541,33 @@ void cmLocalUnixMakefileGenerator3
cmGeneratorTarget* gt = *glIt;
// Global targets store their rules in pre- and post-build commands.
- this->AppendCustomDepends(depends,
- gt->GetPreBuildCommands());
- this->AppendCustomDepends(depends,
- gt->GetPostBuildCommands());
- this->AppendCustomCommands(commands,
- gt->GetPreBuildCommands(),
- gt,
+ this->AppendCustomDepends(depends, gt->GetPreBuildCommands());
+ this->AppendCustomDepends(depends, gt->GetPostBuildCommands());
+ this->AppendCustomCommands(commands, gt->GetPreBuildCommands(), gt,
cmLocalGenerator::START_OUTPUT);
- this->AppendCustomCommands(commands,
- gt->GetPostBuildCommands(),
- gt,
+ this->AppendCustomCommands(commands, gt->GetPostBuildCommands(), gt,
cmLocalGenerator::START_OUTPUT);
std::string targetName = gt->GetName();
- this->WriteMakeRule(ruleFileStream, targetString.c_str(),
- targetName, depends, commands, true);
+ this->WriteMakeRule(ruleFileStream, targetString.c_str(), targetName,
+ depends, commands, true);
// Provide a "/fast" version of the target.
depends.clear();
- if((targetName == "install")
- || (targetName == "install_local")
- || (targetName == "install_strip"))
- {
+ if ((targetName == "install") || (targetName == "install_local") ||
+ (targetName == "install_strip")) {
// Provide a fast install target that does not depend on all
// but has the same command.
depends.push_back("preinstall/fast");
- }
- else
- {
+ } else {
// Just forward to the real target so at least it will work.
depends.push_back(targetName);
commands.clear();
- }
- targetName += "/fast";
- this->WriteMakeRule(ruleFileStream, targetString.c_str(),
- targetName, depends, commands, true);
}
+ targetName += "/fast";
+ this->WriteMakeRule(ruleFileStream, targetString.c_str(), targetName,
+ depends, commands, true);
}
+ }
std::vector<std::string> depends;
std::vector<std::string> commands;
@@ -1815,52 +1580,46 @@ void cmLocalUnixMakefileGenerator3
std::string progressDir = this->GetBinaryDirectory();
progressDir += cmake::GetCMakeFilesDirectory();
- {
+ {
std::ostringstream progCmd;
- progCmd <<
- "$(CMAKE_COMMAND) -E cmake_progress_start ";
- progCmd << this->Convert(progressDir,
- cmLocalGenerator::FULL,
+ progCmd << "$(CMAKE_COMMAND) -E cmake_progress_start ";
+ progCmd << this->Convert(progressDir, cmLocalGenerator::FULL,
cmLocalGenerator::SHELL);
std::string progressFile = cmake::GetCMakeFilesDirectory();
progressFile += "/progress.marks";
- std::string progressFileNameFull =
- this->ConvertToFullPath(progressFile);
- progCmd << " " << this->Convert(progressFileNameFull,
- cmLocalGenerator::FULL,
- cmLocalGenerator::SHELL);
+ std::string progressFileNameFull = this->ConvertToFullPath(progressFile);
+ progCmd << " "
+ << this->Convert(progressFileNameFull, cmLocalGenerator::FULL,
+ cmLocalGenerator::SHELL);
commands.push_back(progCmd.str());
- }
+ }
std::string mf2Dir = cmake::GetCMakeFilesDirectoryPostSlash();
mf2Dir += "Makefile2";
- commands.push_back(this->GetRecursiveMakeCall(mf2Dir.c_str(),
- recursiveTarget));
- this->CreateCDCommand(commands,
- this->GetBinaryDirectory(),
+ commands.push_back(
+ this->GetRecursiveMakeCall(mf2Dir.c_str(), recursiveTarget));
+ this->CreateCDCommand(commands, this->GetBinaryDirectory(),
cmLocalGenerator::START_OUTPUT);
- {
+ {
std::ostringstream progCmd;
progCmd << "$(CMAKE_COMMAND) -E cmake_progress_start "; // # 0
- progCmd << this->Convert(progressDir,
- cmLocalGenerator::FULL,
+ progCmd << this->Convert(progressDir, cmLocalGenerator::FULL,
cmLocalGenerator::SHELL);
progCmd << " 0";
commands.push_back(progCmd.str());
- }
- this->WriteMakeRule(ruleFileStream, "The main all target", "all",
- depends, commands, true);
+ }
+ this->WriteMakeRule(ruleFileStream, "The main all target", "all", depends,
+ commands, true);
// Write the clean rule.
recursiveTarget = this->GetCurrentBinaryDirectory();
recursiveTarget += "/clean";
commands.clear();
depends.clear();
- commands.push_back(this->GetRecursiveMakeCall(mf2Dir.c_str(),
- recursiveTarget));
- this->CreateCDCommand(commands,
- this->GetBinaryDirectory(),
- cmLocalGenerator::START_OUTPUT);
+ commands.push_back(
+ this->GetRecursiveMakeCall(mf2Dir.c_str(), recursiveTarget));
+ this->CreateCDCommand(commands, this->GetBinaryDirectory(),
+ cmLocalGenerator::START_OUTPUT);
this->WriteMakeRule(ruleFileStream, "The main clean target", "clean",
depends, commands, true);
commands.clear();
@@ -1876,20 +1635,16 @@ void cmLocalUnixMakefileGenerator3
depends.clear();
const char* noall =
this->Makefile->GetDefinition("CMAKE_SKIP_INSTALL_ALL_DEPENDENCY");
- if(!noall || cmSystemTools::IsOff(noall))
- {
+ if (!noall || cmSystemTools::IsOff(noall)) {
// Drive the build before installing.
depends.push_back("all");
- }
- else
- {
+ } else {
// At least make sure the build system is up to date.
depends.push_back("cmake_check_build_system");
- }
- commands.push_back
- (this->GetRecursiveMakeCall(mf2Dir.c_str(), recursiveTarget));
- this->CreateCDCommand(commands,
- this->GetBinaryDirectory(),
+ }
+ commands.push_back(
+ this->GetRecursiveMakeCall(mf2Dir.c_str(), recursiveTarget));
+ this->CreateCDCommand(commands, this->GetBinaryDirectory(),
cmLocalGenerator::START_OUTPUT);
this->WriteMakeRule(ruleFileStream, "Prepare targets for installation.",
"preinstall", depends, commands, true);
@@ -1905,28 +1660,24 @@ void cmLocalUnixMakefileGenerator3
std::string runRule =
"$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)";
runRule += " --check-build-system ";
- runRule += this->Convert(cmakefileName,cmLocalGenerator::NONE,
+ runRule += this->Convert(cmakefileName, cmLocalGenerator::NONE,
cmLocalGenerator::SHELL);
runRule += " 1";
commands.push_back(runRule);
- this->CreateCDCommand(commands,
- this->GetBinaryDirectory(),
+ this->CreateCDCommand(commands, this->GetBinaryDirectory(),
cmLocalGenerator::START_OUTPUT);
- this->WriteMakeRule(ruleFileStream, "clear depends",
- "depend",
- depends, commands, true);
+ this->WriteMakeRule(ruleFileStream, "clear depends", "depend", depends,
+ commands, true);
}
-
void cmLocalUnixMakefileGenerator3::ClearDependencies(cmMakefile* mf,
bool verbose)
{
// Get the list of target files to check
const char* infoDef = mf->GetDefinition("CMAKE_DEPEND_INFO_FILES");
- if(!infoDef)
- {
+ if (!infoDef) {
return;
- }
+ }
std::vector<std::string> files;
cmSystemTools::ExpandListArgument(infoDef, files);
@@ -1934,9 +1685,8 @@ void cmLocalUnixMakefileGenerator3::ClearDependencies(cmMakefile* mf,
// dependencies for that target.
cmDepends clearer;
clearer.SetVerbose(verbose);
- for(std::vector<std::string>::iterator l = files.begin();
- l != files.end(); ++l)
- {
+ for (std::vector<std::string>::iterator l = files.begin(); l != files.end();
+ ++l) {
std::string dir = cmSystemTools::GetFilenamePath(*l);
// Clear the implicit dependency makefile.
@@ -1947,64 +1697,60 @@ void cmLocalUnixMakefileGenerator3::ClearDependencies(cmMakefile* mf,
// regeneration.
std::string internalDependFile = dir + "/depend.internal";
cmSystemTools::RemoveFile(internalDependFile);
- }
+ }
}
-
-namespace
+namespace {
+// Helper predicate for removing absolute paths that don't point to the
+// source or binary directory. It is used when CMAKE_DEPENDS_IN_PROJECT_ONLY
+// is set ON, to only consider in-project dependencies during the build.
+class NotInProjectDir
{
- // Helper predicate for removing absolute paths that don't point to the
- // source or binary directory. It is used when CMAKE_DEPENDS_IN_PROJECT_ONLY
- // is set ON, to only consider in-project dependencies during the build.
- class NotInProjectDir
+public:
+ // Constructor with the source and binary directory's path
+ NotInProjectDir(const std::string& sourceDir, const std::string& binaryDir)
+ : SourceDir(sourceDir)
+ , BinaryDir(binaryDir)
{
- public:
- // Constructor with the source and binary directory's path
- NotInProjectDir(const std::string& sourceDir,
- const std::string& binaryDir)
- : SourceDir(sourceDir), BinaryDir(binaryDir) {}
-
- // Operator evaluating the predicate
- bool operator()(const std::string& path) const
- {
- // Keep all relative paths:
- if(!cmSystemTools::FileIsFullPath(path))
- {
- return false;
- }
- // If it's an absolute path, check if it starts with the source
- // direcotory:
- return (!(IsInDirectory(SourceDir, path)||
- IsInDirectory(BinaryDir, path)));
- }
+ }
- private:
- // Helper function used by the predicate
- static bool IsInDirectory(const std::string& baseDir,
- const std::string& testDir)
- {
- // First check if the test directory "starts with" the base directory:
- if (testDir.find(baseDir) != 0)
- {
- return false;
- }
- // If it does, then check that it's either the same string, or that the
- // next character is a slash:
- return ((testDir.size() == baseDir.size())||
- (testDir[baseDir.size()] == '/'));
- }
+ // Operator evaluating the predicate
+ bool operator()(const std::string& path) const
+ {
+ // Keep all relative paths:
+ if (!cmSystemTools::FileIsFullPath(path)) {
+ return false;
+ }
+ // If it's an absolute path, check if it starts with the source
+ // direcotory:
+ return (
+ !(IsInDirectory(SourceDir, path) || IsInDirectory(BinaryDir, path)));
+ }
- // The path to the source directory
- std::string SourceDir;
- // The path to the binary directory
- std::string BinaryDir;
- };
-}
+private:
+ // Helper function used by the predicate
+ static bool IsInDirectory(const std::string& baseDir,
+ const std::string& testDir)
+ {
+ // First check if the test directory "starts with" the base directory:
+ if (testDir.find(baseDir) != 0) {
+ return false;
+ }
+ // If it does, then check that it's either the same string, or that the
+ // next character is a slash:
+ return ((testDir.size() == baseDir.size()) ||
+ (testDir[baseDir.size()] == '/'));
+ }
+ // The path to the source directory
+ std::string SourceDir;
+ // The path to the binary directory
+ std::string BinaryDir;
+};
+}
-void cmLocalUnixMakefileGenerator3
-::WriteDependLanguageInfo(std::ostream& cmakefileStream,
- cmGeneratorTarget* target)
+void cmLocalUnixMakefileGenerator3::WriteDependLanguageInfo(
+ std::ostream& cmakefileStream, cmGeneratorTarget* target)
{
ImplicitDependLanguageMap const& implicitLangs =
this->GetImplicitDepends(target);
@@ -2012,36 +1758,30 @@ void cmLocalUnixMakefileGenerator3
// list the languages
cmakefileStream
<< "# The set of languages for which implicit dependencies are needed:\n";
- cmakefileStream
- << "set(CMAKE_DEPENDS_LANGUAGES\n";
- for(ImplicitDependLanguageMap::const_iterator
- l = implicitLangs.begin(); l != implicitLangs.end(); ++l)
- {
+ cmakefileStream << "set(CMAKE_DEPENDS_LANGUAGES\n";
+ for (ImplicitDependLanguageMap::const_iterator l = implicitLangs.begin();
+ l != implicitLangs.end(); ++l) {
cmakefileStream << " \"" << l->first << "\"\n";
- }
+ }
cmakefileStream << " )\n";
// now list the files for each language
cmakefileStream
<< "# The set of files for implicit dependencies of each language:\n";
- for(ImplicitDependLanguageMap::const_iterator
- l = implicitLangs.begin(); l != implicitLangs.end(); ++l)
- {
- cmakefileStream
- << "set(CMAKE_DEPENDS_CHECK_" << l->first << "\n";
+ for (ImplicitDependLanguageMap::const_iterator l = implicitLangs.begin();
+ l != implicitLangs.end(); ++l) {
+ cmakefileStream << "set(CMAKE_DEPENDS_CHECK_" << l->first << "\n";
ImplicitDependFileMap const& implicitPairs = l->second;
// for each file pair
- for(ImplicitDependFileMap::const_iterator pi = implicitPairs.begin();
- pi != implicitPairs.end(); ++pi)
- {
- for(cmDepends::DependencyVector::const_iterator di = pi->second.begin();
- di != pi->second.end(); ++ di)
- {
+ for (ImplicitDependFileMap::const_iterator pi = implicitPairs.begin();
+ pi != implicitPairs.end(); ++pi) {
+ for (cmDepends::DependencyVector::const_iterator di = pi->second.begin();
+ di != pi->second.end(); ++di) {
cmakefileStream << " \"" << *di << "\" ";
cmakefileStream << "\"" << pi->first << "\"\n";
- }
}
+ }
cmakefileStream << " )\n";
// Tell the dependency scanner what compiler is used.
@@ -2049,138 +1789,112 @@ void cmLocalUnixMakefileGenerator3
cidVar += l->first;
cidVar += "_COMPILER_ID";
const char* cid = this->Makefile->GetDefinition(cidVar);
- if(cid && *cid)
- {
- cmakefileStream
- << "set(CMAKE_" << l->first << "_COMPILER_ID \""
- << cid << "\")\n";
- }
+ if (cid && *cid) {
+ cmakefileStream << "set(CMAKE_" << l->first << "_COMPILER_ID \"" << cid
+ << "\")\n";
+ }
// Build a list of preprocessor definitions for the target.
std::set<std::string> defines;
- this->AddCompileDefinitions(defines, target,
- this->ConfigName, l->first);
- if(!defines.empty())
- {
+ this->AddCompileDefinitions(defines, target, this->ConfigName, l->first);
+ if (!defines.empty()) {
/* clang-format off */
cmakefileStream
<< "\n"
<< "# Preprocessor definitions for this target.\n"
<< "set(CMAKE_TARGET_DEFINITIONS_" << l->first << "\n";
/* clang-format on */
- for(std::set<std::string>::const_iterator di = defines.begin();
- di != defines.end(); ++di)
- {
- cmakefileStream
- << " " << cmOutputConverter::EscapeForCMake(*di) << "\n";
- }
- cmakefileStream
- << " )\n";
+ for (std::set<std::string>::const_iterator di = defines.begin();
+ di != defines.end(); ++di) {
+ cmakefileStream << " " << cmOutputConverter::EscapeForCMake(*di)
+ << "\n";
}
+ cmakefileStream << " )\n";
+ }
// Target-specific include directories:
- cmakefileStream
- << "\n"
- << "# The include file search paths:\n";
- cmakefileStream
- << "set(CMAKE_" << l->first << "_TARGET_INCLUDE_PATH\n";
+ cmakefileStream << "\n"
+ << "# The include file search paths:\n";
+ cmakefileStream << "set(CMAKE_" << l->first << "_TARGET_INCLUDE_PATH\n";
std::vector<std::string> includes;
-
const std::string& config =
this->Makefile->GetSafeDefinition("CMAKE_BUILD_TYPE");
- this->GetIncludeDirectories(includes, target,
- l->first, config);
- if(this->Makefile->IsOn("CMAKE_DEPENDS_IN_PROJECT_ONLY"))
- {
+ this->GetIncludeDirectories(includes, target, l->first, config);
+ if (this->Makefile->IsOn("CMAKE_DEPENDS_IN_PROJECT_ONLY")) {
const char* sourceDir = this->GetState()->GetSourceDirectory();
const char* binaryDir = this->GetState()->GetBinaryDirectory();
std::vector<std::string>::iterator itr =
std::remove_if(includes.begin(), includes.end(),
::NotInProjectDir(sourceDir, binaryDir));
includes.erase(itr, includes.end());
- }
- for(std::vector<std::string>::iterator i = includes.begin();
- i != includes.end(); ++i)
- {
- cmakefileStream
- << " \""
- << this->Convert(*i, cmLocalGenerator::HOME_OUTPUT)
- << "\"\n";
- }
- cmakefileStream
- << " )\n";
}
+ for (std::vector<std::string>::iterator i = includes.begin();
+ i != includes.end(); ++i) {
+ cmakefileStream << " \""
+ << this->Convert(*i, cmLocalGenerator::HOME_OUTPUT)
+ << "\"\n";
+ }
+ cmakefileStream << " )\n";
+ }
// Store include transform rule properties. Write the directory
// rules first because they may be overridden by later target rules.
std::vector<std::string> transformRules;
- if(const char* xform =
- this->Makefile->GetProperty("IMPLICIT_DEPENDS_INCLUDE_TRANSFORM"))
- {
+ if (const char* xform =
+ this->Makefile->GetProperty("IMPLICIT_DEPENDS_INCLUDE_TRANSFORM")) {
cmSystemTools::ExpandListArgument(xform, transformRules);
- }
- if(const char* xform =
- target->GetProperty("IMPLICIT_DEPENDS_INCLUDE_TRANSFORM"))
- {
+ }
+ if (const char* xform =
+ target->GetProperty("IMPLICIT_DEPENDS_INCLUDE_TRANSFORM")) {
cmSystemTools::ExpandListArgument(xform, transformRules);
+ }
+ if (!transformRules.empty()) {
+ cmakefileStream << "set(CMAKE_INCLUDE_TRANSFORMS\n";
+ for (std::vector<std::string>::const_iterator tri = transformRules.begin();
+ tri != transformRules.end(); ++tri) {
+ cmakefileStream << " " << cmOutputConverter::EscapeForCMake(*tri)
+ << "\n";
}
- if(!transformRules.empty())
- {
- cmakefileStream
- << "set(CMAKE_INCLUDE_TRANSFORMS\n";
- for(std::vector<std::string>::const_iterator tri = transformRules.begin();
- tri != transformRules.end(); ++tri)
- {
- cmakefileStream << " "
- << cmOutputConverter::EscapeForCMake(*tri) << "\n";
- }
- cmakefileStream
- << " )\n";
- }
+ cmakefileStream << " )\n";
+ }
}
void cmLocalUnixMakefileGenerator3::WriteDisclaimer(std::ostream& os)
{
- os
- << "# CMAKE generated file: DO NOT EDIT!\n"
- << "# Generated by \"" << this->GlobalGenerator->GetName() << "\""
- << " Generator, CMake Version "
- << cmVersion::GetMajorVersion() << "."
- << cmVersion::GetMinorVersion() << "\n\n";
+ os << "# CMAKE generated file: DO NOT EDIT!\n"
+ << "# Generated by \"" << this->GlobalGenerator->GetName() << "\""
+ << " Generator, CMake Version " << cmVersion::GetMajorVersion() << "."
+ << cmVersion::GetMinorVersion() << "\n\n";
}
-std::string
-cmLocalUnixMakefileGenerator3
-::GetRecursiveMakeCall(const char *makefile, const std::string& tgt)
+std::string cmLocalUnixMakefileGenerator3::GetRecursiveMakeCall(
+ const char* makefile, const std::string& tgt)
{
// Call make on the given file.
std::string cmd;
cmd += "$(MAKE) -f ";
- cmd += this->Convert(makefile,NONE,SHELL);
+ cmd += this->Convert(makefile, NONE, SHELL);
cmd += " ";
cmGlobalUnixMakefileGenerator3* gg =
static_cast<cmGlobalUnixMakefileGenerator3*>(this->GlobalGenerator);
// Pass down verbosity level.
- if(!gg->MakeSilentFlag.empty())
- {
+ if (!gg->MakeSilentFlag.empty()) {
cmd += gg->MakeSilentFlag;
cmd += " ";
- }
+ }
// Most unix makes will pass the command line flags to make down to
// sub-invoked makes via an environment variable. However, some
// makes do not support that, so you have to pass the flags
// explicitly.
- if(gg->PassMakeflags)
- {
+ if (gg->PassMakeflags) {
cmd += "-$(MAKEFLAGS) ";
- }
+ }
// Add the target.
- if (!tgt.empty())
- {
+ if (!tgt.empty()) {
// The make target is always relative to the top of the build tree.
std::string tgt2 = this->Convert(tgt, HOME_OUTPUT);
@@ -2188,53 +1902,43 @@ cmLocalUnixMakefileGenerator3
cmSystemTools::ConvertToOutputSlashes(tgt2);
// Escape one extra time if the make tool requires it.
- if(this->MakeCommandEscapeTargetTwice)
- {
+ if (this->MakeCommandEscapeTargetTwice) {
tgt2 = this->EscapeForShell(tgt2, true, false);
- }
+ }
// The target name is now a string that should be passed verbatim
// on the command line.
cmd += this->EscapeForShell(tgt2, true, false);
- }
+ }
return cmd;
}
void cmLocalUnixMakefileGenerator3::WriteDivider(std::ostream& os)
{
- os
- << "#======================================"
- << "=======================================\n";
+ os << "#======================================"
+ << "=======================================\n";
}
-void
-cmLocalUnixMakefileGenerator3
-::WriteCMakeArgument(std::ostream& os, const char* s)
+void cmLocalUnixMakefileGenerator3::WriteCMakeArgument(std::ostream& os,
+ const char* s)
{
// Write the given string to the stream with escaping to get it back
// into CMake through the lexical scanner.
os << "\"";
- for(const char* c = s; *c; ++c)
- {
- if(*c == '\\')
- {
+ for (const char* c = s; *c; ++c) {
+ if (*c == '\\') {
os << "\\\\";
- }
- else if(*c == '"')
- {
+ } else if (*c == '"') {
os << "\\\"";
- }
- else
- {
+ } else {
os << *c;
- }
}
+ }
os << "\"";
}
-std::string
-cmLocalUnixMakefileGenerator3::ConvertToQuotedOutputPath(const char* p,
- bool useWatcomQuote)
+std::string cmLocalUnixMakefileGenerator3::ConvertToQuotedOutputPath(
+ const char* p, bool useWatcomQuote)
{
// Split the path into its components.
std::vector<std::string> components;
@@ -2242,78 +1946,65 @@ cmLocalUnixMakefileGenerator3::ConvertToQuotedOutputPath(const char* p,
// Open the quoted result.
std::string result;
- if(useWatcomQuote)
- {
+ if (useWatcomQuote) {
#if defined(_WIN32) && !defined(__CYGWIN__)
result = "'";
#else
result = "\"'";
#endif
- }
- else
- {
+ } else {
result = "\"";
- }
+ }
// Return an empty path if there are no components.
- if(!components.empty())
- {
+ if (!components.empty()) {
// Choose a slash direction and fix root component.
const char* slash = "/";
#if defined(_WIN32) && !defined(__CYGWIN__)
- if(!cmSystemTools::GetForceUnixPaths())
- {
+ if (!cmSystemTools::GetForceUnixPaths()) {
slash = "\\";
- for(std::string::iterator i = components[0].begin();
- i != components[0].end(); ++i)
- {
- if(*i == '/')
- {
+ for (std::string::iterator i = components[0].begin();
+ i != components[0].end(); ++i) {
+ if (*i == '/') {
*i = '\\';
- }
}
}
+ }
#endif
// Begin the quoted result with the root component.
result += components[0];
- if (components.size() > 1)
- {
+ if (components.size() > 1) {
// Now add the rest of the components separated by the proper slash
// direction for this platform.
- std::vector<std::string>::const_iterator compEnd
- = std::remove(components.begin() + 1, components.end() - 1,
- std::string());
- std::vector<std::string>::const_iterator compStart
- = components.begin() + 1;
+ std::vector<std::string>::const_iterator compEnd = std::remove(
+ components.begin() + 1, components.end() - 1, std::string());
+ std::vector<std::string>::const_iterator compStart =
+ components.begin() + 1;
result += cmJoin(cmMakeRange(compStart, compEnd), slash);
// Only the last component can be empty to avoid double slashes.
result += slash;
result += components.back();
- }
}
+ }
// Close the quoted result.
- if(useWatcomQuote)
- {
+ if (useWatcomQuote) {
#if defined(_WIN32) && !defined(__CYGWIN__)
result += "'";
#else
result += "'\"";
#endif
- }
- else
- {
+ } else {
result += "\"";
- }
+ }
return result;
}
-std::string
-cmLocalUnixMakefileGenerator3
-::GetTargetDirectory(cmGeneratorTarget const* target) const
+std::string cmLocalUnixMakefileGenerator3::GetTargetDirectory(
+ cmGeneratorTarget const* target) const
{
std::string dir = cmake::GetCMakeFilesDirectoryPostSlash();
dir += target->GetName();
@@ -2326,32 +2017,28 @@ cmLocalUnixMakefileGenerator3
}
cmLocalUnixMakefileGenerator3::ImplicitDependLanguageMap const&
-cmLocalUnixMakefileGenerator3::GetImplicitDepends(
- const cmGeneratorTarget* tgt)
+cmLocalUnixMakefileGenerator3::GetImplicitDepends(const cmGeneratorTarget* tgt)
{
return this->ImplicitDepends[tgt->GetName()];
}
-void
-cmLocalUnixMakefileGenerator3::AddImplicitDepends(const cmGeneratorTarget* tgt,
- const std::string& lang,
- const char* obj,
- const char* src)
+void cmLocalUnixMakefileGenerator3::AddImplicitDepends(
+ const cmGeneratorTarget* tgt, const std::string& lang, const char* obj,
+ const char* src)
{
this->ImplicitDepends[tgt->GetName()][lang][obj].push_back(src);
}
-void cmLocalUnixMakefileGenerator3
-::CreateCDCommand(std::vector<std::string>& commands, const char *tgtDir,
- cmLocalGenerator::RelativeRoot relRetDir)
+void cmLocalUnixMakefileGenerator3::CreateCDCommand(
+ std::vector<std::string>& commands, const char* tgtDir,
+ cmLocalGenerator::RelativeRoot relRetDir)
{
const char* retDir = this->GetRelativeRootPath(relRetDir);
// do we need to cd?
- if (!strcmp(tgtDir,retDir))
- {
+ if (!strcmp(tgtDir, retDir)) {
return;
- }
+ }
// In a Windows shell we must change drive letter too. The shell
// used by NMake and Borland make does not support "cd /d" so this
@@ -2361,29 +2048,26 @@ void cmLocalUnixMakefileGenerator3
cmGlobalUnixMakefileGenerator3* gg =
static_cast<cmGlobalUnixMakefileGenerator3*>(this->GlobalGenerator);
- if(!gg->UnixCD)
- {
+ if (!gg->UnixCD) {
// On Windows we must perform each step separately and then change
// back because the shell keeps the working directory between
// commands.
std::string cmd = cd_cmd;
cmd += this->ConvertToOutputForExisting(tgtDir, relRetDir);
- commands.insert(commands.begin(),cmd);
+ commands.insert(commands.begin(), cmd);
// Change back to the starting directory.
cmd = cd_cmd;
cmd += this->ConvertToOutputForExisting(relRetDir, tgtDir);
commands.push_back(cmd);
- }
- else
- {
+ } else {
// On UNIX we must construct a single shell command to change
// directory and build because make resets the directory between
// each command.
std::string outputForExisting =
- this->ConvertToOutputForExisting(tgtDir, relRetDir);
+ this->ConvertToOutputForExisting(tgtDir, relRetDir);
std::string prefix = cd_cmd + outputForExisting + " && ";
std::transform(commands.begin(), commands.end(), commands.begin(),
std::bind1st(std::plus<std::string>(), prefix));
- }
+ }
}