Change Clang's __VERSION__ to include the same basic info as in clang -v.

- Please never ever ever ever write a tool that sniffs this.

llvm-svn: 128599
This commit is contained in:
Daniel Dunbar 2011-03-31 00:53:51 +00:00
parent 1a93b3b080
commit 3b17a865bb
4 changed files with 25 additions and 2 deletions

View File

@ -58,6 +58,11 @@ namespace clang {
/// which includes the clang version number, the repository version,
/// and the vendor tag.
std::string getClangFullVersion();
/// \brief Retrieves a string representing the complete clang version suitable
/// for use in the CPP __VERSION__ macro, which includes the clang version
/// number, the repository version, and the vendor tag.
std::string getClangFullCPPVersion();
}
#endif // LLVM_CLANG_BASIC_VERSION_H

View File

@ -91,4 +91,17 @@ std::string getClangFullVersion() {
return OS.str();
}
std::string getClangFullCPPVersion() {
// The version string we report in __VERSION__ is just a compacted version of
// the one we report on the command line.
std::string buf;
llvm::raw_string_ostream OS(buf);
#ifdef CLANG_VENDOR
OS << CLANG_VENDOR;
#endif
OS << "Clang " CLANG_VERSION_STRING " ("
<< getClangFullRepositoryVersion() << ')';
return OS.str();
}
} // end namespace clang

View File

@ -247,7 +247,12 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
Builder.defineMacro("__GNUC_PATCHLEVEL__", "1");
Builder.defineMacro("__GNUC__", "4");
Builder.defineMacro("__GXX_ABI_VERSION", "1002");
Builder.defineMacro("__VERSION__", "\"4.2.1 Compatible Clang Compiler\"");
// As sad as it is, enough software depends on the __VERSION__ for version
// checks that it is necessary to report 4.2.1 (the base GCC version we claim
// compatibility with) first.
Builder.defineMacro("__VERSION__", "\"4.2.1 Compatible " +
llvm::Twine(getClangFullCPPVersion()) + "\"");
// Initialize language-specific preprocessor defines.

View File

@ -982,7 +982,7 @@
// SPARC:#define __SIZE_WIDTH__ 32
// SPARC:#define __UINTMAX_TYPE__ long long unsigned int
// SPARC:#define __USER_LABEL_PREFIX__ _
// SPARC:#define __VERSION__ "4.2.1 Compatible Clang Compiler"
// SPARC:#define __VERSION__ "4.2.1 Compatible
// SPARC:#define __WCHAR_MAX__ 2147483647
// SPARC:#define __WCHAR_TYPE__ int
// SPARC:#define __WCHAR_WIDTH__ 32