Merge topic 'extract-cmMessenger'

1462576b Parser: Port away from cmMakefile
421012a3 cmMessenger: Extract from cmake class
14a8d61f cmMakefile: Port nested error logic away from cmExecutionStatus
2af853de cmMakefile: Simplify IssueMessage implementation
33bb9cfa Parser: Issue messages through cmake, not cmSystemTools
db7de303 Parser: Store the Backtrace for use in issuing messages
This commit is contained in:
Brad King 2016-08-25 09:50:39 -04:00 committed by CMake Topic Stage
commit a79abb82fe
33 changed files with 435 additions and 348 deletions

View File

@ -319,6 +319,8 @@ set(SRCS
cmMakefileExecutableTargetGenerator.cxx cmMakefileExecutableTargetGenerator.cxx
cmMakefileLibraryTargetGenerator.cxx cmMakefileLibraryTargetGenerator.cxx
cmMakefileUtilityTargetGenerator.cxx cmMakefileUtilityTargetGenerator.cxx
cmMessenger.cxx
cmMessenger.h
cmOSXBundleGenerator.cxx cmOSXBundleGenerator.cxx
cmOSXBundleGenerator.h cmOSXBundleGenerator.h
cmOutputConverter.cxx cmOutputConverter.cxx

View File

@ -38,16 +38,12 @@ public:
this->ReturnInvoked = false; this->ReturnInvoked = false;
this->BreakInvoked = false; this->BreakInvoked = false;
this->ContinueInvoked = false; this->ContinueInvoked = false;
this->NestedError = false;
} }
void SetNestedError(bool val) { this->NestedError = val; }
bool GetNestedError() { return this->NestedError; }
private: private:
bool ReturnInvoked; bool ReturnInvoked;
bool BreakInvoked; bool BreakInvoked;
bool ContinueInvoked; bool ContinueInvoked;
bool NestedError;
}; };
#endif #endif

View File

@ -76,7 +76,7 @@ public:
}; };
bool cmFunctionHelperCommand::InvokeInitialPass( bool cmFunctionHelperCommand::InvokeInitialPass(
const std::vector<cmListFileArgument>& args, cmExecutionStatus& inStatus) const std::vector<cmListFileArgument>& args, cmExecutionStatus&)
{ {
// Expand the argument list to the function. // Expand the argument list to the function.
std::vector<std::string> expandedArgs; std::vector<std::string> expandedArgs;
@ -129,11 +129,11 @@ bool cmFunctionHelperCommand::InvokeInitialPass(
for (unsigned int c = 0; c < this->Functions.size(); ++c) { for (unsigned int c = 0; c < this->Functions.size(); ++c) {
cmExecutionStatus status; cmExecutionStatus status;
if (!this->Makefile->ExecuteCommand(this->Functions[c], status) || if (!this->Makefile->ExecuteCommand(this->Functions[c], status) ||
status.GetNestedError()) { (cmSystemTools::GetErrorOccuredFlag() &&
!cmSystemTools::GetFatalErrorOccured())) {
// The error message should have already included the call stack // The error message should have already included the call stack
// so we do not need to report an error here. // so we do not need to report an error here.
functionScope.Quiet(); functionScope.Quiet();
inStatus.SetNestedError(true);
return false; return false;
} }
if (status.GetReturnInvoked()) { if (status.GetReturnInvoked()) {

View File

@ -12,7 +12,7 @@
#include "cmListFileCache.h" #include "cmListFileCache.h"
#include "cmListFileLexer.h" #include "cmListFileLexer.h"
#include "cmMakefile.h" #include "cmMessenger.h"
#include "cmOutputConverter.h" #include "cmOutputConverter.h"
#include "cmSystemTools.h" #include "cmSystemTools.h"
#include "cmVersion.h" #include "cmVersion.h"
@ -21,15 +21,18 @@
struct cmListFileParser struct cmListFileParser
{ {
cmListFileParser(cmListFile* lf, cmMakefile* mf, const char* filename); cmListFileParser(cmListFile* lf, cmListFileBacktrace lfbt,
cmMessenger* messenger, const char* filename);
~cmListFileParser(); ~cmListFileParser();
void IssueFileOpenError(std::string const& text) const; void IssueFileOpenError(std::string const& text) const;
void IssueError(std::string const& text) const;
bool ParseFile(); bool ParseFile();
bool ParseFunction(const char* name, long line); bool ParseFunction(const char* name, long line);
bool AddArgument(cmListFileLexer_Token* token, bool AddArgument(cmListFileLexer_Token* token,
cmListFileArgument::Delimiter delim); cmListFileArgument::Delimiter delim);
cmListFile* ListFile; cmListFile* ListFile;
cmMakefile* Makefile; cmListFileBacktrace Backtrace;
cmMessenger* Messenger;
const char* FileName; const char* FileName;
cmListFileLexer* Lexer; cmListFileLexer* Lexer;
cmListFileFunction Function; cmListFileFunction Function;
@ -41,10 +44,12 @@ struct cmListFileParser
} Separation; } Separation;
}; };
cmListFileParser::cmListFileParser(cmListFile* lf, cmMakefile* mf, cmListFileParser::cmListFileParser(cmListFile* lf, cmListFileBacktrace lfbt,
cmMessenger* messenger,
const char* filename) const char* filename)
: ListFile(lf) : ListFile(lf)
, Makefile(mf) , Backtrace(lfbt)
, Messenger(messenger)
, FileName(filename) , FileName(filename)
, Lexer(cmListFileLexer_New()) , Lexer(cmListFileLexer_New())
{ {
@ -57,7 +62,18 @@ cmListFileParser::~cmListFileParser()
void cmListFileParser::IssueFileOpenError(const std::string& text) const void cmListFileParser::IssueFileOpenError(const std::string& text) const
{ {
this->Makefile->IssueMessage(cmake::FATAL_ERROR, text); this->Messenger->IssueMessage(cmake::FATAL_ERROR, text, this->Backtrace);
}
void cmListFileParser::IssueError(const std::string& text) const
{
cmListFileContext lfc;
lfc.FilePath = this->FileName;
lfc.Line = cmListFileLexer_GetCurrentLine(this->Lexer);
cmListFileBacktrace lfbt = this->Backtrace;
lfbt = lfbt.Push(lfc);
this->Messenger->IssueMessage(cmake::FATAL_ERROR, text, lfbt);
cmSystemTools::SetFatalErrorOccured();
} }
bool cmListFileParser::ParseFile() bool cmListFileParser::ParseFile()
@ -96,29 +112,26 @@ bool cmListFileParser::ParseFile()
} }
} else { } else {
std::ostringstream error; std::ostringstream error;
error << "Error in cmake code at\n" error << "Parse error. Expected a newline, got "
<< this->FileName << ":" << token->line << ":\n"
<< "Parse error. Expected a newline, got "
<< cmListFileLexer_GetTypeAsString(this->Lexer, token->type) << cmListFileLexer_GetTypeAsString(this->Lexer, token->type)
<< " with text \"" << token->text << "\"."; << " with text \"" << token->text << "\".";
cmSystemTools::Error(error.str().c_str()); this->IssueError(error.str());
return false; return false;
} }
} else { } else {
std::ostringstream error; std::ostringstream error;
error << "Error in cmake code at\n" error << "Parse error. Expected a command name, got "
<< this->FileName << ":" << token->line << ":\n"
<< "Parse error. Expected a command name, got "
<< cmListFileLexer_GetTypeAsString(this->Lexer, token->type) << cmListFileLexer_GetTypeAsString(this->Lexer, token->type)
<< " with text \"" << token->text << "\"."; << " with text \"" << token->text << "\".";
cmSystemTools::Error(error.str().c_str()); this->IssueError(error.str());
return false; return false;
} }
} }
return true; return true;
} }
bool cmListFile::ParseFile(const char* filename, cmMakefile* mf) bool cmListFile::ParseFile(const char* filename, cmMessenger* messenger,
cmListFileBacktrace const& lfbt)
{ {
if (!cmSystemTools::FileExists(filename) || if (!cmSystemTools::FileExists(filename) ||
cmSystemTools::FileIsDirectory(filename)) { cmSystemTools::FileIsDirectory(filename)) {
@ -128,7 +141,7 @@ bool cmListFile::ParseFile(const char* filename, cmMakefile* mf)
bool parseError = false; bool parseError = false;
{ {
cmListFileParser parser(this, mf, filename); cmListFileParser parser(this, lfbt, messenger, filename);
parseError = !parser.ParseFile(); parseError = !parser.ParseFile();
} }
@ -154,18 +167,15 @@ bool cmListFileParser::ParseFunction(const char* name, long line)
<< cmListFileLexer_GetCurrentLine(this->Lexer) << ":\n" << cmListFileLexer_GetCurrentLine(this->Lexer) << ":\n"
<< "Parse error. Function missing opening \"(\"."; << "Parse error. Function missing opening \"(\".";
/* clang-format on */ /* clang-format on */
cmSystemTools::Error(error.str().c_str()); this->IssueError(error.str());
return false; return false;
} }
if (token->type != cmListFileLexer_Token_ParenLeft) { if (token->type != cmListFileLexer_Token_ParenLeft) {
std::ostringstream error; std::ostringstream error;
error << "Error in cmake code at\n" error << "Parse error. Expected \"(\", got "
<< this->FileName << ":"
<< cmListFileLexer_GetCurrentLine(this->Lexer) << ":\n"
<< "Parse error. Expected \"(\", got "
<< cmListFileLexer_GetTypeAsString(this->Lexer, token->type) << cmListFileLexer_GetTypeAsString(this->Lexer, token->type)
<< " with text \"" << token->text << "\"."; << " with text \"" << token->text << "\".";
cmSystemTools::Error(error.str().c_str()); this->IssueError(error.str());
return false; return false;
} }
@ -217,25 +227,24 @@ bool cmListFileParser::ParseFunction(const char* name, long line)
} else { } else {
// Error. // Error.
std::ostringstream error; std::ostringstream error;
error << "Error in cmake code at\n" error << "Parse error. Function missing ending \")\". "
<< this->FileName << ":"
<< cmListFileLexer_GetCurrentLine(this->Lexer) << ":\n"
<< "Parse error. Function missing ending \")\". "
<< "Instead found " << "Instead found "
<< cmListFileLexer_GetTypeAsString(this->Lexer, token->type) << cmListFileLexer_GetTypeAsString(this->Lexer, token->type)
<< " with text \"" << token->text << "\"."; << " with text \"" << token->text << "\".";
cmSystemTools::Error(error.str().c_str()); this->IssueError(error.str());
return false; return false;
} }
} }
std::ostringstream error; std::ostringstream error;
error << "Error in cmake code at\n" cmListFileContext lfc;
<< this->FileName << ":" << lastLine << ":\n" lfc.FilePath = this->FileName;
<< "Parse error. Function missing ending \")\". " lfc.Line = lastLine;
cmListFileBacktrace lfbt = this->Backtrace;
lfbt = lfbt.Push(lfc);
error << "Parse error. Function missing ending \")\". "
<< "End of file reached."; << "End of file reached.";
cmSystemTools::Error(error.str().c_str()); this->Messenger->IssueMessage(cmake::FATAL_ERROR, error.str(), lfbt);
return false; return false;
} }
@ -250,17 +259,21 @@ bool cmListFileParser::AddArgument(cmListFileLexer_Token* token,
bool isError = (this->Separation == SeparationError || bool isError = (this->Separation == SeparationError ||
delim == cmListFileArgument::Bracket); delim == cmListFileArgument::Bracket);
std::ostringstream m; std::ostringstream m;
/* clang-format off */ cmListFileContext lfc;
m << "Syntax " << (isError? "Error":"Warning") << " in cmake code at\n" lfc.FilePath = this->FileName;
<< " " << this->FileName << ":" << token->line << ":" lfc.Line = token->line;
<< token->column << "\n" cmListFileBacktrace lfbt = this->Backtrace;
lfbt = lfbt.Push(lfc);
m << "Syntax " << (isError ? "Error" : "Warning") << " in cmake code at "
<< "column " << token->column << "\n"
<< "Argument not separated from preceding token by whitespace."; << "Argument not separated from preceding token by whitespace.";
/* clang-format on */ /* clang-format on */
if (isError) { if (isError) {
this->Makefile->IssueMessage(cmake::FATAL_ERROR, m.str()); this->Messenger->IssueMessage(cmake::FATAL_ERROR, m.str(), lfbt);
return false; return false;
} }
this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, m.str()); this->Messenger->IssueMessage(cmake::AUTHOR_WARNING, m.str(), lfbt);
return true; return true;
} }

View File

@ -23,7 +23,7 @@
* cmake list files. * cmake list files.
*/ */
class cmMakefile; class cmMessenger;
struct cmCommandContext struct cmCommandContext
{ {
@ -158,7 +158,8 @@ private:
struct cmListFile struct cmListFile
{ {
bool ParseFile(const char* path, cmMakefile* mf); bool ParseFile(const char* path, cmMessenger* messenger,
cmListFileBacktrace const& lfbt);
std::vector<cmListFileFunction> Functions; std::vector<cmListFileFunction> Functions;
}; };

View File

@ -159,11 +159,11 @@ bool cmMacroHelperCommand::InvokeInitialPass(
} }
cmExecutionStatus status; cmExecutionStatus status;
if (!this->Makefile->ExecuteCommand(newLFF, status) || if (!this->Makefile->ExecuteCommand(newLFF, status) ||
status.GetNestedError()) { (cmSystemTools::GetErrorOccuredFlag() &&
!cmSystemTools::GetFatalErrorOccured())) {
// The error message should have already included the call stack // The error message should have already included the call stack
// so we do not need to report an error here. // so we do not need to report an error here.
macroScope.Quiet(); macroScope.Quiet();
inStatus.SetNestedError(true);
return false; return false;
} }
if (status.GetReturnInvoked()) { if (status.GetReturnInvoked()) {

View File

@ -25,6 +25,7 @@
#include "cmGlobalGenerator.h" #include "cmGlobalGenerator.h"
#include "cmInstallGenerator.h" #include "cmInstallGenerator.h"
#include "cmListFileCache.h" #include "cmListFileCache.h"
#include "cmMessenger.h"
#include "cmSourceFile.h" #include "cmSourceFile.h"
#include "cmSourceFileLocation.h" #include "cmSourceFileLocation.h"
#include "cmState.h" #include "cmState.h"
@ -115,12 +116,6 @@ cmMakefile::~cmMakefile()
void cmMakefile::IssueMessage(cmake::MessageType t, void cmMakefile::IssueMessage(cmake::MessageType t,
std::string const& text) const std::string const& text) const
{ {
// Collect context information.
if (!this->ExecutionStatusStack.empty()) {
if ((t == cmake::FATAL_ERROR) || (t == cmake::INTERNAL_ERROR)) {
this->ExecutionStatusStack.back()->SetNestedError(true);
}
}
this->GetCMakeInstance()->IssueMessage(t, text, this->GetBacktrace()); this->GetCMakeInstance()->IssueMessage(t, text, this->GetBacktrace());
} }
@ -281,11 +276,19 @@ bool cmMakefile::ExecuteCommand(const cmListFileFunction& lff,
if (this->GetCMakeInstance()->GetTrace()) { if (this->GetCMakeInstance()->GetTrace()) {
this->PrintCommandTrace(lff); this->PrintCommandTrace(lff);
} }
// Try invoking the command.
bool hadPreviousNonFatalError = cmSystemTools::GetErrorOccuredFlag() &&
!cmSystemTools::GetFatalErrorOccured();
cmSystemTools::ResetErrorOccuredFlag();
bool invokeSucceeded = pcmd->InvokeInitialPass(lff.Arguments, status); bool invokeSucceeded = pcmd->InvokeInitialPass(lff.Arguments, status);
bool hadNestedError = status.GetNestedError(); bool hadNestedError = cmSystemTools::GetErrorOccuredFlag() &&
!cmSystemTools::GetFatalErrorOccured();
if (hadPreviousNonFatalError) {
cmSystemTools::SetErrorOccured();
}
if (!invokeSucceeded || hadNestedError) { if (!invokeSucceeded || hadNestedError) {
if (!hadNestedError) { if (!hadNestedError && !cmSystemTools::GetFatalErrorOccured()) {
// The command invocation requested that we report an error. // The command invocation requested that we report an error.
this->IssueMessage(cmake::FATAL_ERROR, pcmd->GetError()); this->IssueMessage(cmake::FATAL_ERROR, pcmd->GetError());
} }
@ -455,7 +458,8 @@ bool cmMakefile::ReadDependentFile(const char* filename, bool noPolicyScope)
IncludeScope incScope(this, filenametoread, noPolicyScope); IncludeScope incScope(this, filenametoread, noPolicyScope);
cmListFile listFile; cmListFile listFile;
if (!listFile.ParseFile(filenametoread.c_str(), this)) { if (!listFile.ParseFile(filenametoread.c_str(), this->GetMessenger(),
this->Backtrace)) {
return false; return false;
} }
@ -504,7 +508,8 @@ bool cmMakefile::ReadListFile(const char* filename)
ListFileScope scope(this, filenametoread); ListFileScope scope(this, filenametoread);
cmListFile listFile; cmListFile listFile;
if (!listFile.ParseFile(filenametoread.c_str(), this)) { if (!listFile.ParseFile(filenametoread.c_str(), this->GetMessenger(),
this->Backtrace)) {
return false; return false;
} }
@ -1450,7 +1455,8 @@ void cmMakefile::Configure()
this->AddDefinition("CMAKE_PARENT_LIST_FILE", currentStart.c_str()); this->AddDefinition("CMAKE_PARENT_LIST_FILE", currentStart.c_str());
cmListFile listFile; cmListFile listFile;
if (!listFile.ParseFile(currentStart.c_str(), this)) { if (!listFile.ParseFile(currentStart.c_str(), this->GetMessenger(),
this->Backtrace)) {
return; return;
} }
if (this->IsRootMakefile()) { if (this->IsRootMakefile()) {
@ -3272,6 +3278,11 @@ cmake* cmMakefile::GetCMakeInstance() const
return this->GlobalGenerator->GetCMakeInstance(); return this->GlobalGenerator->GetCMakeInstance();
} }
cmMessenger* cmMakefile::GetMessenger() const
{
return this->GetCMakeInstance()->GetMessenger();
}
cmGlobalGenerator* cmMakefile::GetGlobalGenerator() const cmGlobalGenerator* cmMakefile::GetGlobalGenerator() const
{ {
return this->GlobalGenerator; return this->GlobalGenerator;

View File

@ -607,6 +607,7 @@ public:
* Get the instance * Get the instance
*/ */
cmake* GetCMakeInstance() const; cmake* GetCMakeInstance() const;
cmMessenger* GetMessenger() const;
cmGlobalGenerator* GetGlobalGenerator() const; cmGlobalGenerator* GetGlobalGenerator() const;
/** /**

View File

@ -11,6 +11,8 @@
============================================================================*/ ============================================================================*/
#include "cmMessageCommand.h" #include "cmMessageCommand.h"
#include "cmMessenger.h"
// cmLibraryCommand // cmLibraryCommand
bool cmMessageCommand::InitialPass(std::vector<std::string> const& args, bool cmMessageCommand::InitialPass(std::vector<std::string> const& args,
cmExecutionStatus&) cmExecutionStatus&)
@ -65,8 +67,8 @@ bool cmMessageCommand::InitialPass(std::vector<std::string> const& args,
if (type != cmake::MESSAGE) { if (type != cmake::MESSAGE) {
// we've overriden the message type, above, so display it directly // we've overriden the message type, above, so display it directly
cmake* cm = this->Makefile->GetCMakeInstance(); cmMessenger* m = this->Makefile->GetMessenger();
cm->DisplayMessage(type, message, this->Makefile->GetBacktrace()); m->DisplayMessage(type, message, this->Makefile->GetBacktrace());
} else { } else {
if (status) { if (status) {
this->Makefile->DisplayStatus(message.c_str(), -1); this->Makefile->DisplayStatus(message.c_str(), -1);

209
Source/cmMessenger.cxx Normal file
View File

@ -0,0 +1,209 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
Distributed under the OSI-approved BSD License (the "License");
see accompanying file Copyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the License for more information.
============================================================================*/
#include "cmMessenger.h"
#include "cmDocumentationFormatter.h"
#include "cmMessenger.h"
#include "cmOutputConverter.h"
#if defined(CMAKE_BUILD_WITH_CMAKE)
#include <cmsys/SystemInformation.hxx>
#endif
cmake::MessageType cmMessenger::ConvertMessageType(cmake::MessageType t) const
{
bool warningsAsErrors;
if (t == cmake::AUTHOR_WARNING || t == cmake::AUTHOR_ERROR) {
warningsAsErrors = this->GetDevWarningsAsErrors();
if (warningsAsErrors && t == cmake::AUTHOR_WARNING) {
t = cmake::AUTHOR_ERROR;
} else if (!warningsAsErrors && t == cmake::AUTHOR_ERROR) {
t = cmake::AUTHOR_WARNING;
}
} else if (t == cmake::DEPRECATION_WARNING ||
t == cmake::DEPRECATION_ERROR) {
warningsAsErrors = this->GetDeprecatedWarningsAsErrors();
if (warningsAsErrors && t == cmake::DEPRECATION_WARNING) {
t = cmake::DEPRECATION_ERROR;
} else if (!warningsAsErrors && t == cmake::DEPRECATION_ERROR) {
t = cmake::DEPRECATION_WARNING;
}
}
return t;
}
bool cmMessenger::IsMessageTypeVisible(cmake::MessageType t) const
{
bool isVisible = true;
if (t == cmake::DEPRECATION_ERROR) {
if (!this->GetDeprecatedWarningsAsErrors()) {
isVisible = false;
}
} else if (t == cmake::DEPRECATION_WARNING) {
if (this->GetSuppressDeprecatedWarnings()) {
isVisible = false;
}
} else if (t == cmake::AUTHOR_ERROR) {
if (!this->GetDevWarningsAsErrors()) {
isVisible = false;
}
} else if (t == cmake::AUTHOR_WARNING) {
if (this->GetSuppressDevWarnings()) {
isVisible = false;
}
}
return isVisible;
}
static bool printMessagePreamble(cmake::MessageType t, std::ostream& msg)
{
// Construct the message header.
if (t == cmake::FATAL_ERROR) {
msg << "CMake Error";
} else if (t == cmake::INTERNAL_ERROR) {
msg << "CMake Internal Error (please report a bug)";
} else if (t == cmake::LOG) {
msg << "CMake Debug Log";
} else if (t == cmake::DEPRECATION_ERROR) {
msg << "CMake Deprecation Error";
} else if (t == cmake::DEPRECATION_WARNING) {
msg << "CMake Deprecation Warning";
} else if (t == cmake::AUTHOR_WARNING) {
msg << "CMake Warning (dev)";
} else if (t == cmake::AUTHOR_ERROR) {
msg << "CMake Error (dev)";
} else {
msg << "CMake Warning";
}
return true;
}
void printMessageText(std::ostream& msg, std::string const& text)
{
msg << ":\n";
cmDocumentationFormatter formatter;
formatter.SetIndent(" ");
formatter.PrintFormatted(msg, text.c_str());
}
void displayMessage(cmake::MessageType t, std::ostringstream& msg)
{
// Add a note about warning suppression.
if (t == cmake::AUTHOR_WARNING) {
msg << "This warning is for project developers. Use -Wno-dev to suppress "
"it.";
} else if (t == cmake::AUTHOR_ERROR) {
msg << "This error is for project developers. Use -Wno-error=dev to "
"suppress "
"it.";
}
// Add a terminating blank line.
msg << "\n";
#if defined(CMAKE_BUILD_WITH_CMAKE)
// Add a C++ stack trace to internal errors.
if (t == cmake::INTERNAL_ERROR) {
std::string stack = cmsys::SystemInformation::GetProgramStack(0, 0);
if (!stack.empty()) {
if (cmHasLiteralPrefix(stack, "WARNING:")) {
stack = "Note:" + stack.substr(8);
}
msg << stack << "\n";
}
}
#endif
// Output the message.
if (t == cmake::FATAL_ERROR || t == cmake::INTERNAL_ERROR ||
t == cmake::DEPRECATION_ERROR || t == cmake::AUTHOR_ERROR) {
cmSystemTools::SetErrorOccured();
cmSystemTools::Message(msg.str().c_str(), "Error");
} else {
cmSystemTools::Message(msg.str().c_str(), "Warning");
}
}
cmMessenger::cmMessenger(cmState* state)
: State(state)
{
}
void cmMessenger::IssueMessage(cmake::MessageType t, const std::string& text,
const cmListFileBacktrace& backtrace) const
{
bool force = false;
if (!force) {
// override the message type, if needed, for warnings and errors
cmake::MessageType override = this->ConvertMessageType(t);
if (override != t) {
t = override;
force = true;
}
}
if (!force && !this->IsMessageTypeVisible(t)) {
return;
}
this->DisplayMessage(t, text, backtrace);
}
void cmMessenger::DisplayMessage(cmake::MessageType t, const std::string& text,
const cmListFileBacktrace& backtrace) const
{
std::ostringstream msg;
if (!printMessagePreamble(t, msg)) {
return;
}
// Add the immediate context.
backtrace.PrintTitle(msg);
printMessageText(msg, text);
// Add the rest of the context.
backtrace.PrintCallStack(msg);
displayMessage(t, msg);
}
bool cmMessenger::GetSuppressDevWarnings() const
{
const char* cacheEntryValue =
this->State->GetCacheEntryValue("CMAKE_SUPPRESS_DEVELOPER_WARNINGS");
return cmSystemTools::IsOn(cacheEntryValue);
}
bool cmMessenger::GetSuppressDeprecatedWarnings() const
{
const char* cacheEntryValue =
this->State->GetCacheEntryValue("CMAKE_WARN_DEPRECATED");
return cacheEntryValue && cmSystemTools::IsOff(cacheEntryValue);
}
bool cmMessenger::GetDevWarningsAsErrors() const
{
const char* cacheEntryValue =
this->State->GetCacheEntryValue("CMAKE_SUPPRESS_DEVELOPER_ERRORS");
return cacheEntryValue && cmSystemTools::IsOff(cacheEntryValue);
}
bool cmMessenger::GetDeprecatedWarningsAsErrors() const
{
const char* cacheEntryValue =
this->State->GetCacheEntryValue("CMAKE_ERROR_DEPRECATED");
return cmSystemTools::IsOn(cacheEntryValue);
}

44
Source/cmMessenger.h Normal file
View File

@ -0,0 +1,44 @@
/*============================================================================
CMake - Cross Platform Makefile Generator
Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
Distributed under the OSI-approved BSD License (the "License");
see accompanying file Copyright.txt for details.
This software is distributed WITHOUT ANY WARRANTY; without even the
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the License for more information.
============================================================================*/
#ifndef cmMessenger_h
#define cmMessenger_h
#include "cmListFileCache.h"
#include "cmState.h"
#include "cmake.h"
class cmMessenger
{
public:
cmMessenger(cmState* state);
void IssueMessage(
cmake::MessageType t, std::string const& text,
cmListFileBacktrace const& backtrace = cmListFileBacktrace()) const;
void DisplayMessage(cmake::MessageType t, std::string const& text,
cmListFileBacktrace const& backtrace) const;
bool GetSuppressDevWarnings() const;
bool GetSuppressDeprecatedWarnings() const;
bool GetDevWarningsAsErrors() const;
bool GetDeprecatedWarningsAsErrors() const;
private:
bool IsMessageTypeVisible(cmake::MessageType t) const;
cmake::MessageType ConvertMessageType(cmake::MessageType t) const;
cmState* State;
};
#endif

View File

@ -19,6 +19,7 @@
#include "cmFileTimeComparison.h" #include "cmFileTimeComparison.h"
#include "cmLocalGenerator.h" #include "cmLocalGenerator.h"
#include "cmMakefile.h" #include "cmMakefile.h"
#include "cmMessenger.h"
#include "cmSourceFile.h" #include "cmSourceFile.h"
#include "cmState.h" #include "cmState.h"
#include "cmTest.h" #include "cmTest.h"
@ -152,6 +153,7 @@ cmake::cmake()
this->State = new cmState; this->State = new cmState;
this->CurrentSnapshot = this->State->CreateBaseSnapshot(); this->CurrentSnapshot = this->State->CreateBaseSnapshot();
this->Messenger = new cmMessenger(this->State);
#ifdef __APPLE__ #ifdef __APPLE__
struct rlimit rlp; struct rlimit rlp;
@ -207,6 +209,7 @@ cmake::cmake()
cmake::~cmake() cmake::~cmake()
{ {
delete this->State; delete this->State;
delete this->Messenger;
if (this->GlobalGenerator) { if (this->GlobalGenerator) {
delete this->GlobalGenerator; delete this->GlobalGenerator;
this->GlobalGenerator = CM_NULLPTR; this->GlobalGenerator = CM_NULLPTR;
@ -2281,160 +2284,10 @@ static bool cmakeCheckStampList(const char* stampList)
return true; return true;
} }
cmake::MessageType cmake::ConvertMessageType(cmake::MessageType t) const
{
bool warningsAsErrors;
if (t == cmake::AUTHOR_WARNING || t == cmake::AUTHOR_ERROR) {
warningsAsErrors = this->GetDevWarningsAsErrors();
if (warningsAsErrors && t == cmake::AUTHOR_WARNING) {
t = cmake::AUTHOR_ERROR;
} else if (!warningsAsErrors && t == cmake::AUTHOR_ERROR) {
t = cmake::AUTHOR_WARNING;
}
} else if (t == cmake::DEPRECATION_WARNING ||
t == cmake::DEPRECATION_ERROR) {
warningsAsErrors = this->GetDeprecatedWarningsAsErrors();
if (warningsAsErrors && t == cmake::DEPRECATION_WARNING) {
t = cmake::DEPRECATION_ERROR;
} else if (!warningsAsErrors && t == cmake::DEPRECATION_ERROR) {
t = cmake::DEPRECATION_WARNING;
}
}
return t;
}
bool cmake::IsMessageTypeVisible(cmake::MessageType t) const
{
bool isVisible = true;
if (t == cmake::DEPRECATION_ERROR) {
if (!this->GetDeprecatedWarningsAsErrors()) {
isVisible = false;
}
} else if (t == cmake::DEPRECATION_WARNING) {
if (this->GetSuppressDeprecatedWarnings()) {
isVisible = false;
}
} else if (t == cmake::AUTHOR_ERROR) {
if (!this->GetDevWarningsAsErrors()) {
isVisible = false;
}
} else if (t == cmake::AUTHOR_WARNING) {
if (this->GetSuppressDevWarnings()) {
isVisible = false;
}
}
return isVisible;
}
static bool printMessagePreamble(cmake::MessageType t, std::ostream& msg)
{
// Construct the message header.
if (t == cmake::FATAL_ERROR) {
msg << "CMake Error";
} else if (t == cmake::INTERNAL_ERROR) {
msg << "CMake Internal Error (please report a bug)";
} else if (t == cmake::LOG) {
msg << "CMake Debug Log";
} else if (t == cmake::DEPRECATION_ERROR) {
msg << "CMake Deprecation Error";
} else if (t == cmake::DEPRECATION_WARNING) {
msg << "CMake Deprecation Warning";
} else if (t == cmake::AUTHOR_WARNING) {
msg << "CMake Warning (dev)";
} else if (t == cmake::AUTHOR_ERROR) {
msg << "CMake Error (dev)";
} else {
msg << "CMake Warning";
}
return true;
}
void printMessageText(std::ostream& msg, std::string const& text)
{
msg << ":\n";
cmDocumentationFormatter formatter;
formatter.SetIndent(" ");
formatter.PrintFormatted(msg, text.c_str());
}
void displayMessage(cmake::MessageType t, std::ostringstream& msg)
{
// Add a note about warning suppression.
if (t == cmake::AUTHOR_WARNING) {
msg << "This warning is for project developers. Use -Wno-dev to suppress "
"it.";
} else if (t == cmake::AUTHOR_ERROR) {
msg << "This error is for project developers. Use -Wno-error=dev to "
"suppress "
"it.";
}
// Add a terminating blank line.
msg << "\n";
#if defined(CMAKE_BUILD_WITH_CMAKE)
// Add a C++ stack trace to internal errors.
if (t == cmake::INTERNAL_ERROR) {
std::string stack = cmsys::SystemInformation::GetProgramStack(0, 0);
if (!stack.empty()) {
if (cmHasLiteralPrefix(stack, "WARNING:")) {
stack = "Note:" + stack.substr(8);
}
msg << stack << "\n";
}
}
#endif
// Output the message.
if (t == cmake::FATAL_ERROR || t == cmake::INTERNAL_ERROR ||
t == cmake::DEPRECATION_ERROR || t == cmake::AUTHOR_ERROR) {
cmSystemTools::SetErrorOccured();
cmSystemTools::Message(msg.str().c_str(), "Error");
} else {
cmSystemTools::Message(msg.str().c_str(), "Warning");
}
}
void cmake::IssueMessage(cmake::MessageType t, std::string const& text, void cmake::IssueMessage(cmake::MessageType t, std::string const& text,
cmListFileBacktrace const& backtrace) const cmListFileBacktrace const& backtrace) const
{ {
bool force = false; this->Messenger->IssueMessage(t, text, backtrace);
// override the message type, if needed, for warnings and errors
cmake::MessageType override = this->ConvertMessageType(t);
if (override != t) {
t = override;
force = true;
}
if (!force && !this->IsMessageTypeVisible(t)) {
return;
}
this->DisplayMessage(t, text, backtrace);
}
void cmake::DisplayMessage(cmake::MessageType t, std::string const& text,
cmListFileBacktrace const& backtrace) const
{
std::ostringstream msg;
if (!printMessagePreamble(t, msg)) {
return;
}
// Add the immediate context.
backtrace.PrintTitle(msg);
printMessageText(msg, text);
// Add the rest of the context.
backtrace.PrintCallStack(msg);
displayMessage(t, msg);
} }
std::vector<std::string> cmake::GetDebugConfigs() std::vector<std::string> cmake::GetDebugConfigs()
@ -2454,6 +2307,11 @@ std::vector<std::string> cmake::GetDebugConfigs()
return configs; return configs;
} }
cmMessenger* cmake::GetMessenger() const
{
return this->Messenger;
}
int cmake::Build(const std::string& dir, const std::string& target, int cmake::Build(const std::string& dir, const std::string& target,
const std::string& config, const std::string& config,
const std::vector<std::string>& nativeOptions, bool clean) const std::vector<std::string>& nativeOptions, bool clean)
@ -2560,9 +2418,7 @@ void cmake::RunCheckForUnusedVariables()
bool cmake::GetSuppressDevWarnings() const bool cmake::GetSuppressDevWarnings() const
{ {
const char* cacheEntryValue = return this->Messenger->GetSuppressDevWarnings();
this->State->GetCacheEntryValue("CMAKE_SUPPRESS_DEVELOPER_WARNINGS");
return cmSystemTools::IsOn(cacheEntryValue);
} }
void cmake::SetSuppressDevWarnings(bool b) void cmake::SetSuppressDevWarnings(bool b)
@ -2586,9 +2442,7 @@ void cmake::SetSuppressDevWarnings(bool b)
bool cmake::GetSuppressDeprecatedWarnings() const bool cmake::GetSuppressDeprecatedWarnings() const
{ {
const char* cacheEntryValue = return this->Messenger->GetSuppressDeprecatedWarnings();
this->State->GetCacheEntryValue("CMAKE_WARN_DEPRECATED");
return cacheEntryValue && cmSystemTools::IsOff(cacheEntryValue);
} }
void cmake::SetSuppressDeprecatedWarnings(bool b) void cmake::SetSuppressDeprecatedWarnings(bool b)
@ -2612,9 +2466,7 @@ void cmake::SetSuppressDeprecatedWarnings(bool b)
bool cmake::GetDevWarningsAsErrors() const bool cmake::GetDevWarningsAsErrors() const
{ {
const char* cacheEntryValue = return this->Messenger->GetDevWarningsAsErrors();
this->State->GetCacheEntryValue("CMAKE_SUPPRESS_DEVELOPER_ERRORS");
return cacheEntryValue && cmSystemTools::IsOff(cacheEntryValue);
} }
void cmake::SetDevWarningsAsErrors(bool b) void cmake::SetDevWarningsAsErrors(bool b)
@ -2638,9 +2490,7 @@ void cmake::SetDevWarningsAsErrors(bool b)
bool cmake::GetDeprecatedWarningsAsErrors() const bool cmake::GetDeprecatedWarningsAsErrors() const
{ {
const char* cacheEntryValue = return this->Messenger->GetDeprecatedWarningsAsErrors();
this->State->GetCacheEntryValue("CMAKE_ERROR_DEPRECATED");
return cmSystemTools::IsOn(cacheEntryValue);
} }
void cmake::SetDeprecatedWarningsAsErrors(bool b) void cmake::SetDeprecatedWarningsAsErrors(bool b)

View File

@ -25,6 +25,7 @@ class cmGlobalGeneratorFactory;
class cmGlobalGenerator; class cmGlobalGenerator;
class cmLocalGenerator; class cmLocalGenerator;
class cmMakefile; class cmMakefile;
class cmMessenger;
class cmVariableWatch; class cmVariableWatch;
class cmFileTimeComparison; class cmFileTimeComparison;
class cmExternalMakefileProjectGeneratorFactory; class cmExternalMakefileProjectGeneratorFactory;
@ -346,6 +347,8 @@ public:
return this->CMakeEditCommand; return this->CMakeEditCommand;
} }
cmMessenger* GetMessenger() const;
/* /*
* Get the state of the suppression of developer (author) warnings. * Get the state of the suppression of developer (author) warnings.
* Returns false, by default, if developer warnings should be shown, true * Returns false, by default, if developer warnings should be shown, true
@ -395,9 +398,6 @@ public:
cmake::MessageType t, std::string const& text, cmake::MessageType t, std::string const& text,
cmListFileBacktrace const& backtrace = cmListFileBacktrace()) const; cmListFileBacktrace const& backtrace = cmListFileBacktrace()) const;
void DisplayMessage(cmake::MessageType t, std::string const& text,
cmListFileBacktrace const& backtrace) const;
///! run the --build option ///! run the --build option
int Build(const std::string& dir, const std::string& target, int Build(const std::string& dir, const std::string& target,
const std::string& config, const std::string& config,
@ -491,6 +491,7 @@ private:
cmState* State; cmState* State;
cmState::Snapshot CurrentSnapshot; cmState::Snapshot CurrentSnapshot;
cmMessenger* Messenger;
std::vector<std::string> TraceOnlyThisSources; std::vector<std::string> TraceOnlyThisSources;

View File

@ -1,7 +1,4 @@
CMake Error: Error in cmake code at CMake Error at BracketComment4.cmake:3:
.*/Tests/RunCMake/Syntax/BracketComment4.cmake:3: Parse error. Expected a newline, got identifier with text "message".
Parse error. Expected a newline, got identifier with text "message". Call Stack \(most recent call first\):
CMake Error at CMakeLists.txt:3 \(include\): CMakeLists.txt:3 \(include\)
include could not find load file:
BracketComment4.cmake

View File

@ -1,7 +1,5 @@
CMake Error in BracketNoSpace0.cmake: CMake Error at BracketNoSpace0.cmake:1:
Syntax Error in cmake code at Syntax Error in cmake code at column 27
.*/Tests/RunCMake/Syntax/BracketNoSpace0.cmake:1:27
Argument not separated from preceding token by whitespace. Argument not separated from preceding token by whitespace.
Call Stack \(most recent call first\): Call Stack \(most recent call first\):

View File

@ -1,7 +1,5 @@
CMake Error in BracketNoSpace1.cmake: CMake Error at BracketNoSpace1.cmake:1:
Syntax Error in cmake code at Syntax Error in cmake code at column 24
.*/Tests/RunCMake/Syntax/BracketNoSpace1.cmake:1:24
Argument not separated from preceding token by whitespace. Argument not separated from preceding token by whitespace.
Call Stack \(most recent call first\): Call Stack \(most recent call first\):

View File

@ -1,7 +1,5 @@
CMake Error in BracketNoSpace2.cmake: CMake Error at BracketNoSpace2.cmake:1:
Syntax Error in cmake code at Syntax Error in cmake code at column 44
.*/Tests/RunCMake/Syntax/BracketNoSpace2.cmake:1:44
Argument not separated from preceding token by whitespace. Argument not separated from preceding token by whitespace.
Call Stack \(most recent call first\): Call Stack \(most recent call first\):

View File

@ -1,7 +1,5 @@
CMake Error in BracketNoSpace3.cmake: CMake Error at BracketNoSpace3.cmake:1:
Syntax Error in cmake code at Syntax Error in cmake code at column 45
.*/Tests/RunCMake/Syntax/BracketNoSpace3.cmake:1:45
Argument not separated from preceding token by whitespace. Argument not separated from preceding token by whitespace.
Call Stack \(most recent call first\): Call Stack \(most recent call first\):

View File

@ -1,7 +1,5 @@
CMake Error in BracketNoSpace4.cmake: CMake Error at BracketNoSpace4.cmake:1:
Syntax Error in cmake code at Syntax Error in cmake code at column 44
.*/Tests/RunCMake/Syntax/BracketNoSpace4.cmake:1:44
Argument not separated from preceding token by whitespace. Argument not separated from preceding token by whitespace.
Call Stack \(most recent call first\): Call Stack \(most recent call first\):

View File

@ -1,7 +1,5 @@
CMake Error in BracketNoSpace5.cmake: CMake Error at BracketNoSpace5.cmake:1:
Syntax Error in cmake code at Syntax Error in cmake code at column 45
.*/Tests/RunCMake/Syntax/BracketNoSpace5.cmake:1:45
Argument not separated from preceding token by whitespace. Argument not separated from preceding token by whitespace.
Call Stack \(most recent call first\): Call Stack \(most recent call first\):

View File

@ -1,8 +1,6 @@
CMake Error: Error in cmake code at CMake Error at CommandError0.cmake:2:
.*/Tests/RunCMake/Syntax/CommandError0.cmake:2: Parse error. Expected "\(", got newline with text "
Parse error. Expected "\(", got newline with text "
".
CMake Error at CMakeLists.txt:3 \(include\):
include could not find load file:
CommandError0.cmake ".
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)

View File

@ -1,7 +1,4 @@
CMake Error: Error in cmake code at CMake Error at CommandError1.cmake:1:
.*/Tests/RunCMake/Syntax/CommandError1.cmake:1: Parse error. Expected a newline, got identifier with text "message".
Parse error. Expected a newline, got identifier with text "message". Call Stack \(most recent call first\):
CMake Error at CMakeLists.txt:3 \(include\): CMakeLists.txt:3 \(include\)
include could not find load file:
CommandError1.cmake

View File

@ -1,7 +1,5 @@
CMake Error: Error in cmake code at CMake Error at CommandError2.cmake:1:
.*/Tests/RunCMake/Syntax/CommandError2.cmake:1: Parse error. Expected a command name, got bracket argument with text
Parse error. Expected a command name, got bracket argument with text "oops-not-a-comment". "oops-not-a-comment".
CMake Error at CMakeLists.txt:3 \(include\): Call Stack \(most recent call first\):
include could not find load file: CMakeLists.txt:3 \(include\)
CommandError2.cmake

View File

@ -1,7 +1,5 @@
CMake Warning \(dev\) in ParenInENV.cmake: CMake Warning \(dev\) at ParenInENV.cmake:2:
Syntax Warning in cmake code at Syntax Warning in cmake code at column 21
.*/Tests/RunCMake/Syntax/ParenInENV.cmake:2:21
Argument not separated from preceding token by whitespace. Argument not separated from preceding token by whitespace.
Call Stack \(most recent call first\): Call Stack \(most recent call first\):
@ -11,7 +9,7 @@ This warning is for project developers. Use -Wno-dev to suppress it.
CMake Error at ParenInENV.cmake:2 \(message\): CMake Error at ParenInENV.cmake:2 \(message\):
Syntax error in cmake code at Syntax error in cmake code at
.*/Tests/RunCMake/Syntax/ParenInENV.cmake:2 .*Tests/RunCMake/Syntax/ParenInENV.cmake:2
when parsing string when parsing string

View File

@ -1,27 +1,21 @@
CMake Warning \(dev\) in ParenNoSpace1.cmake: CMake Warning \(dev\) at ParenNoSpace1.cmake:1:
Syntax Warning in cmake code at Syntax Warning in cmake code at column 26
.*/Tests/RunCMake/Syntax/ParenNoSpace1.cmake:1:26
Argument not separated from preceding token by whitespace. Argument not separated from preceding token by whitespace.
Call Stack \(most recent call first\): Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\) CMakeLists.txt:3 \(include\)
This warning is for project developers. Use -Wno-dev to suppress it. This warning is for project developers. Use -Wno-dev to suppress it.
CMake Warning \(dev\) in ParenNoSpace1.cmake: CMake Warning \(dev\) at ParenNoSpace1.cmake:2:
Syntax Warning in cmake code at Syntax Warning in cmake code at column 26
.*/Tests/RunCMake/Syntax/ParenNoSpace1.cmake:2:26
Argument not separated from preceding token by whitespace. Argument not separated from preceding token by whitespace.
Call Stack \(most recent call first\): Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\) CMakeLists.txt:3 \(include\)
This warning is for project developers. Use -Wno-dev to suppress it. This warning is for project developers. Use -Wno-dev to suppress it.
CMake Error in ParenNoSpace1.cmake: CMake Error at ParenNoSpace1.cmake:3:
Syntax Error in cmake code at Syntax Error in cmake code at column 29
.*/Tests/RunCMake/Syntax/ParenNoSpace1.cmake:3:29
Argument not separated from preceding token by whitespace. Argument not separated from preceding token by whitespace.
Call Stack \(most recent call first\): Call Stack \(most recent call first\):

View File

@ -1,17 +1,13 @@
CMake Warning \(dev\) in StringNoSpace.cmake: CMake Warning \(dev\) at StringNoSpace.cmake:2:
Syntax Warning in cmake code at Syntax Warning in cmake code at column 28
.*/Tests/RunCMake/Syntax/StringNoSpace.cmake:2:28
Argument not separated from preceding token by whitespace. Argument not separated from preceding token by whitespace.
Call Stack \(most recent call first\): Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\) CMakeLists.txt:3 \(include\)
This warning is for project developers. Use -Wno-dev to suppress it. This warning is for project developers. Use -Wno-dev to suppress it.
CMake Warning \(dev\) in StringNoSpace.cmake: CMake Warning \(dev\) at StringNoSpace.cmake:2:
Syntax Warning in cmake code at Syntax Warning in cmake code at column 31
.*/Tests/RunCMake/Syntax/StringNoSpace.cmake:2:31
Argument not separated from preceding token by whitespace. Argument not separated from preceding token by whitespace.
Call Stack \(most recent call first\): Call Stack \(most recent call first\):

View File

@ -1,8 +1,7 @@
CMake Error: Error in cmake code at CMake Error at UnterminatedBracket0.cmake:2:
.*/Syntax/UnterminatedBracket0.cmake:2: Parse error. Function missing ending "\)". Instead found unterminated
Parse error. Function missing ending "\)". Instead found unterminated bracket with text "\) bracket with text "\)
".
CMake Error at CMakeLists.txt:3 \(include\):
include could not find load file:
UnterminatedBracket0.cmake$ ".
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)

View File

@ -1,8 +1,7 @@
CMake Error: Error in cmake code at CMake Error at UnterminatedBracket1.cmake:2:
.*/Syntax/UnterminatedBracket1.cmake:2: Parse error. Function missing ending "\)". Instead found unterminated
Parse error. Function missing ending "\)". Instead found unterminated bracket with text "\]\]\) bracket with text "]]\)
".
CMake Error at CMakeLists.txt:3 \(include\):
include could not find load file:
UnterminatedBracket1.cmake$ ".
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)

View File

@ -1,8 +1,7 @@
CMake Error: Error in cmake code at CMake Error at UnterminatedBracketComment.cmake:3:
.*/Syntax/UnterminatedBracketComment.cmake:1: Parse error. Expected a command name, got unterminated bracket with text
Parse error. Expected a command name, got unterminated bracket with text "#\]\] "#]]
".
CMake Error at CMakeLists.txt:3 \(include\):
include could not find load file:
UnterminatedBracketComment.cmake ".
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)

View File

@ -1,7 +1,4 @@
CMake Error: Error in cmake code at CMake Error at UnterminatedCall1.cmake:2:
.*/Syntax/UnterminatedCall1.cmake:2: Parse error. Function missing ending "\)". End of file reached.
Parse error. Function missing ending "\)". End of file reached. Call Stack \(most recent call first\):
CMake Error at CMakeLists.txt:3 \(include\): CMakeLists.txt:3 \(include\)
include could not find load file:
UnterminatedCall1.cmake

View File

@ -1,7 +1,4 @@
CMake Error: Error in cmake code at CMake Error at UnterminatedCall2.cmake:4:
.*/Syntax/UnterminatedCall2.cmake:4: Parse error. Function missing ending "\)". End of file reached.
Parse error. Function missing ending "\)". End of file reached. Call Stack \(most recent call first\):
CMake Error at CMakeLists.txt:3 \(include\): CMakeLists.txt:3 \(include\)
include could not find load file:
UnterminatedCall2.cmake

View File

@ -1,8 +1,7 @@
CMake Error: Error in cmake code at CMake Error at UnterminatedString.cmake:2:
.*/Syntax/UnterminatedString.cmake:2: Parse error. Function missing ending "\)". Instead found unterminated
Parse error. Function missing ending "\)". Instead found unterminated string with text "\) string with text "\)
".
CMake Error at CMakeLists.txt:3 \(include\):
include could not find load file:
UnterminatedString.cmake$ ".
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)

View File

@ -266,6 +266,7 @@ CMAKE_CXX_SOURCES="\
cmPropertyDefinition \ cmPropertyDefinition \
cmPropertyDefinitionMap \ cmPropertyDefinitionMap \
cmMakefile \ cmMakefile \
cmMessenger \
cmExportBuildFileGenerator \ cmExportBuildFileGenerator \
cmExportFileGenerator \ cmExportFileGenerator \
cmExportInstallFileGenerator \ cmExportInstallFileGenerator \