CMake/Source/CPack/cmCPackLog.h

156 lines
4.0 KiB
C
Raw Normal View History

Simplify CMake per-source license notices Per-source copyright/license notice headers that spell out copyright holder names and years are hard to maintain and often out-of-date or plain wrong. Precise contributor information is already maintained automatically by the version control tool. Ultimately it is the receiver of a file who is responsible for determining its licensing status, and per-source notices are merely a convenience. Therefore it is simpler and more accurate for each source to have a generic notice of the license name and references to more detailed information on copyright holders and full license terms. Our `Copyright.txt` file now contains a list of Contributors whose names appeared source-level copyright notices. It also references version control history for more precise information. Therefore we no longer need to spell out the list of Contributors in each source file notice. Replace CMake per-source copyright/license notice headers with a short description of the license and links to `Copyright.txt` and online information available from "https://cmake.org/licensing". The online URL also handles cases of modules being copied out of our source into other projects, so we can drop our notices about replacing links with full license text. Run the `Utilities/Scripts/filter-notices.bash` script to perform the majority of the replacements mechanically. Manually fix up shebang lines and trailing newlines in a few files. Manually update the notices in a few files that the script does not handle.
2016-09-27 22:01:08 +03:00
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file Copyright.txt or https://cmake.org/licensing for details. */
2006-01-03 00:14:21 +03:00
#ifndef cmCPackLog_h
#define cmCPackLog_h
2016-09-07 01:21:35 +03:00
#include <cmConfigure.h>
2006-01-03 00:14:21 +03:00
#include "cmObject.h"
2016-09-07 01:21:35 +03:00
#include "cmTypeMacro.h"
#include <ostream>
#include <string.h>
#include <string>
2006-01-03 00:14:21 +03:00
#define cmCPack_Log(ctSelf, logType, msg) \
do { \
std::ostringstream cmCPackLog_msg; \
cmCPackLog_msg << msg; \
(ctSelf)->Log(logType, __FILE__, __LINE__, cmCPackLog_msg.str().c_str()); \
} while (0)
2006-01-03 00:14:21 +03:00
#ifdef cerr
#undef cerr
2006-01-03 00:14:21 +03:00
#endif
#define cerr no_cerr_use_cmCPack_Log
#ifdef cout
#undef cout
2006-01-03 00:14:21 +03:00
#endif
#define cout no_cout_use_cmCPack_Log
/** \class cmCPackLog
* \brief A container for CPack generators
*
*/
class cmCPackLog : public cmObject
{
public:
cmTypeMacro(cmCPackLog, cmObject);
cmCPackLog();
2016-06-27 22:25:27 +03:00
~cmCPackLog() CM_OVERRIDE;
2006-01-03 00:14:21 +03:00
enum __log_tags
{
2006-01-03 00:14:21 +03:00
NOTAG = 0,
LOG_OUTPUT = 0x1,
LOG_VERBOSE = 0x2,
LOG_DEBUG = 0x4,
LOG_WARNING = 0x8,
LOG_ERROR = 0x10
};
//! Various signatures for logging.
void Log(const char* file, int line, const char* msg)
{
this->Log(LOG_OUTPUT, file, line, msg);
}
void Log(const char* file, int line, const char* msg, size_t length)
{
this->Log(LOG_OUTPUT, file, line, msg, length);
}
void Log(int tag, const char* file, int line, const char* msg)
{
this->Log(tag, file, line, msg, strlen(msg));
}
void Log(int tag, const char* file, int line, const char* msg,
size_t length);
2006-01-03 00:14:21 +03:00
//! Set Verbose
void VerboseOn() { this->SetVerbose(true); }
void VerboseOff() { this->SetVerbose(true); }
2006-03-10 21:06:26 +03:00
void SetVerbose(bool verb) { this->Verbose = verb; }
bool GetVerbose() { return this->Verbose; }
2006-01-03 00:14:21 +03:00
//! Set Debug
void DebugOn() { this->SetDebug(true); }
void DebugOff() { this->SetDebug(true); }
2006-03-10 21:06:26 +03:00
void SetDebug(bool verb) { this->Debug = verb; }
bool GetDebug() { return this->Debug; }
2006-01-03 00:14:21 +03:00
//! Set Quiet
void QuietOn() { this->SetQuiet(true); }
void QuietOff() { this->SetQuiet(true); }
2006-03-10 21:06:26 +03:00
void SetQuiet(bool verb) { this->Quiet = verb; }
bool GetQuiet() { return this->Quiet; }
2006-01-03 00:14:21 +03:00
//! Set the output stream
2006-03-10 21:06:26 +03:00
void SetOutputStream(std::ostream* os) { this->DefaultOutput = os; }
2006-01-03 00:14:21 +03:00
//! Set the error stream
2006-03-10 21:06:26 +03:00
void SetErrorStream(std::ostream* os) { this->DefaultError = os; }
2006-01-03 00:14:21 +03:00
//! Set the log output stream
2006-01-03 01:22:39 +03:00
void SetLogOutputStream(std::ostream* os);
2006-01-03 00:14:21 +03:00
//! Set the log output file. The cmCPackLog will try to create file. If it
// cannot, it will report an error.
bool SetLogOutputFile(const char* fname);
//! Set the various prefixes for the logging. SetPrefix sets the generic
// prefix that overwrittes missing ones.
2006-03-10 21:06:26 +03:00
void SetPrefix(std::string pfx) { this->Prefix = pfx; }
void SetOutputPrefix(std::string pfx) { this->OutputPrefix = pfx; }
void SetVerbosePrefix(std::string pfx) { this->VerbosePrefix = pfx; }
void SetDebugPrefix(std::string pfx) { this->DebugPrefix = pfx; }
void SetWarningPrefix(std::string pfx) { this->WarningPrefix = pfx; }
void SetErrorPrefix(std::string pfx) { this->ErrorPrefix = pfx; }
2006-01-03 00:14:21 +03:00
private:
2006-03-10 21:06:26 +03:00
bool Verbose;
bool Debug;
bool Quiet;
2006-01-03 00:14:21 +03:00
2006-03-10 21:06:26 +03:00
bool NewLine;
2006-01-03 00:14:21 +03:00
2006-03-10 21:06:26 +03:00
int LastTag;
2006-01-03 00:14:21 +03:00
2006-03-10 21:06:26 +03:00
std::string Prefix;
std::string OutputPrefix;
std::string VerbosePrefix;
std::string DebugPrefix;
std::string WarningPrefix;
std::string ErrorPrefix;
2006-01-03 00:14:21 +03:00
std::ostream* DefaultOutput;
std::ostream* DefaultError;
2006-01-03 00:14:21 +03:00
2006-03-10 21:06:26 +03:00
std::string LogOutputFileName;
std::ostream* LogOutput;
2006-01-03 00:14:21 +03:00
// Do we need to cleanup log output stream
2006-03-10 21:06:26 +03:00
bool LogOutputCleanup;
2006-01-03 00:14:21 +03:00
};
class cmCPackLogWrite
{
public:
cmCPackLogWrite(const char* data, size_t length)
: Data(data)
, Length(length)
{
}
2006-01-03 00:14:21 +03:00
const char* Data;
size_t Length;
};
inline std::ostream& operator<<(std::ostream& os, const cmCPackLogWrite& c)
2006-01-03 00:14:21 +03:00
{
os.write(c.Data, c.Length);
os.flush();
return os;
}
#endif