xref: /openbsd-src/gnu/llvm/lldb/source/Version/Version.cpp (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1*f6aab3d8Srobert //===-- Version.cpp -------------------------------------------------------===//
2*f6aab3d8Srobert //
3*f6aab3d8Srobert // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*f6aab3d8Srobert // See https://llvm.org/LICENSE.txt for license information.
5*f6aab3d8Srobert // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*f6aab3d8Srobert //
7*f6aab3d8Srobert //===----------------------------------------------------------------------===//
8*f6aab3d8Srobert 
9*f6aab3d8Srobert #include "lldb/Version/Version.h"
10*f6aab3d8Srobert #include "VCSVersion.inc"
11*f6aab3d8Srobert #include "lldb/Version/Version.inc"
12*f6aab3d8Srobert #include "clang/Basic/Version.h"
13*f6aab3d8Srobert 
GetLLDBVersion()14*f6aab3d8Srobert static const char *GetLLDBVersion() {
15*f6aab3d8Srobert #ifdef LLDB_FULL_VERSION_STRING
16*f6aab3d8Srobert   return LLDB_FULL_VERSION_STRING;
17*f6aab3d8Srobert #else
18*f6aab3d8Srobert   return "lldb version " LLDB_VERSION_STRING;
19*f6aab3d8Srobert #endif
20*f6aab3d8Srobert }
21*f6aab3d8Srobert 
GetLLDBRevision()22*f6aab3d8Srobert static const char *GetLLDBRevision() {
23*f6aab3d8Srobert #ifdef LLDB_REVISION
24*f6aab3d8Srobert   return LLDB_REVISION;
25*f6aab3d8Srobert #else
26*f6aab3d8Srobert   return nullptr;
27*f6aab3d8Srobert #endif
28*f6aab3d8Srobert }
29*f6aab3d8Srobert 
GetLLDBRepository()30*f6aab3d8Srobert static const char *GetLLDBRepository() {
31*f6aab3d8Srobert #ifdef LLDB_REPOSITORY
32*f6aab3d8Srobert   return LLDB_REPOSITORY;
33*f6aab3d8Srobert #else
34*f6aab3d8Srobert   return nullptr;
35*f6aab3d8Srobert #endif
36*f6aab3d8Srobert }
37*f6aab3d8Srobert 
GetVersion()38*f6aab3d8Srobert const char *lldb_private::GetVersion() {
39*f6aab3d8Srobert   static std::string g_version_str;
40*f6aab3d8Srobert 
41*f6aab3d8Srobert   if (g_version_str.empty()) {
42*f6aab3d8Srobert     const char *lldb_version = GetLLDBVersion();
43*f6aab3d8Srobert     const char *lldb_repo = GetLLDBRepository();
44*f6aab3d8Srobert     const char *lldb_rev = GetLLDBRevision();
45*f6aab3d8Srobert     g_version_str += lldb_version;
46*f6aab3d8Srobert     if (lldb_repo || lldb_rev) {
47*f6aab3d8Srobert       g_version_str += " (";
48*f6aab3d8Srobert       if (lldb_repo)
49*f6aab3d8Srobert         g_version_str += lldb_repo;
50*f6aab3d8Srobert       if (lldb_repo && lldb_rev)
51*f6aab3d8Srobert         g_version_str += " ";
52*f6aab3d8Srobert       if (lldb_rev) {
53*f6aab3d8Srobert         g_version_str += "revision ";
54*f6aab3d8Srobert         g_version_str += lldb_rev;
55*f6aab3d8Srobert       }
56*f6aab3d8Srobert       g_version_str += ")";
57*f6aab3d8Srobert     }
58*f6aab3d8Srobert 
59*f6aab3d8Srobert     std::string clang_rev(clang::getClangRevision());
60*f6aab3d8Srobert     if (clang_rev.length() > 0) {
61*f6aab3d8Srobert       g_version_str += "\n  clang revision ";
62*f6aab3d8Srobert       g_version_str += clang_rev;
63*f6aab3d8Srobert     }
64*f6aab3d8Srobert 
65*f6aab3d8Srobert     std::string llvm_rev(clang::getLLVMRevision());
66*f6aab3d8Srobert     if (llvm_rev.length() > 0) {
67*f6aab3d8Srobert       g_version_str += "\n  llvm revision ";
68*f6aab3d8Srobert       g_version_str += llvm_rev;
69*f6aab3d8Srobert     }
70*f6aab3d8Srobert   }
71*f6aab3d8Srobert 
72*f6aab3d8Srobert   return g_version_str.c_str();
73*f6aab3d8Srobert }
74