summaryrefslogtreecommitdiff
path: root/source/lldb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/lldb.cpp')
-rw-r--r--source/lldb.cpp126
1 files changed, 51 insertions, 75 deletions
diff --git a/source/lldb.cpp b/source/lldb.cpp
index 1e02d2ada66f..efdcef8f0527 100644
--- a/source/lldb.cpp
+++ b/source/lldb.cpp
@@ -12,96 +12,72 @@
using namespace lldb;
using namespace lldb_private;
-#if defined (__APPLE__)
-extern "C" const unsigned char liblldb_coreVersionString[];
-#else
-
#include "clang/Basic/Version.h"
-static const char *
-GetLLDBRevision()
-{
+#ifdef HAVE_SVN_VERSION_INC
+# include "SVNVersion.inc"
+#endif
+
+#ifdef HAVE_APPLE_VERSION_INC
+# include "AppleVersion.inc"
+#endif
+
+static const char *GetLLDBRevision() {
#ifdef LLDB_REVISION
- return LLDB_REVISION;
+ return LLDB_REVISION;
#else
- return NULL;
+ return NULL;
#endif
}
-static const char *
-GetLLDBRepository()
-{
+static const char *GetLLDBRepository() {
#ifdef LLDB_REPOSITORY
- return LLDB_REPOSITORY;
+ return LLDB_REPOSITORY;
#else
- return NULL;
+ return NULL;
#endif
}
-#endif
-const char *
-lldb_private::GetVersion ()
-{
-#if defined (__APPLE__)
- static char g_version_string[32];
- if (g_version_string[0] == '\0')
- {
- const char *version_string = ::strstr ((const char *)liblldb_coreVersionString, "PROJECT:");
-
- if (version_string)
- version_string += sizeof("PROJECT:") - 1;
- else
- version_string = "unknown";
-
- const char *newline_loc = strchr(version_string, '\n');
-
- size_t version_len = sizeof(g_version_string) - 1;
-
- if (newline_loc &&
- (newline_loc - version_string < static_cast<ptrdiff_t>(version_len)))
- version_len = newline_loc - version_string;
-
- ::snprintf(g_version_string, version_len + 1, "%s", version_string);
- }
+#define QUOTE(str) #str
+#define EXPAND_AND_QUOTE(str) QUOTE(str)
- return g_version_string;
-#else
- // On platforms other than Darwin, report a version number in the same style as the clang tool.
- static std::string g_version_str;
- if (g_version_str.empty())
- {
- g_version_str += "lldb version ";
- g_version_str += CLANG_VERSION_STRING;
- const char * lldb_repo = GetLLDBRepository();
- if (lldb_repo)
- {
- g_version_str += " (";
- g_version_str += lldb_repo;
- }
+const char *lldb_private::GetVersion() {
+ // On platforms other than Darwin, report a version number in the same style
+ // as the clang tool.
+ static std::string g_version_str;
+ if (g_version_str.empty()) {
- const char *lldb_rev = GetLLDBRevision();
- if (lldb_rev)
- {
- g_version_str += " revision ";
- g_version_str += lldb_rev;
- }
- std::string clang_rev (clang::getClangRevision());
- if (clang_rev.length() > 0)
- {
- g_version_str += " clang revision ";
- g_version_str += clang_rev;
- }
- std::string llvm_rev (clang::getLLVMRevision());
- if (llvm_rev.length() > 0)
- {
- g_version_str += " llvm revision ";
- g_version_str += llvm_rev;
- }
+#ifdef LLDB_VERSION_STRING
+ g_version_str += EXPAND_AND_QUOTE(LLDB_VERSION_STRING);
+#else
+ g_version_str += "lldb version ";
+ g_version_str += CLANG_VERSION_STRING;
+#endif
+ const char *lldb_repo = GetLLDBRepository();
+ const char *lldb_rev = GetLLDBRevision();
+ if (lldb_repo || lldb_rev) {
+ g_version_str += " (";
+ if (lldb_repo)
+ g_version_str += lldb_repo;
+ if (lldb_rev) {
+ g_version_str += " revision ";
+ g_version_str += lldb_rev;
+ }
+ g_version_str += ")";
+ }
- if (lldb_repo)
- g_version_str += ")";
+ std::string clang_rev(clang::getClangRevision());
+ if (clang_rev.length() > 0) {
+ g_version_str += "\n clang revision ";
+ g_version_str += clang_rev;
}
- return g_version_str.c_str();
-#endif
+ std::string llvm_rev(clang::getLLVMRevision());
+ if (llvm_rev.length() > 0) {
+ g_version_str += "\n llvm revision ";
+ g_version_str += llvm_rev;
+ }
+
+ }
+ return g_version_str.c_str();
}