Skip to content
Permalink
Browse files

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.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@128599 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information...
ddunbar committed Mar 31, 2011
1 parent 3ecfa2d commit ad1a4c6e89594e704775ddb6b036ac982fd68cad
Showing with 25 additions and 2 deletions.
  1. +5 −0 include/clang/Basic/Version.h
  2. +13 −0 lib/Basic/Version.cpp
  3. +6 −1 lib/Frontend/InitPreprocessor.cpp
  4. +1 −1 test/Preprocessor/init.c
@@ -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
@@ -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
@@ -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.

@@ -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

0 comments on commit ad1a4c6

Please sign in to comment.
You can’t perform that action at this time.