clang 18.0.0git
Version.cpp
Go to the documentation of this file.
1//===- Version.cpp - Clang Version Number -----------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file defines several version-related utility functions for Clang.
10//
11//===----------------------------------------------------------------------===//
12
13#include "clang/Basic/Version.h"
14#include "clang/Basic/LLVM.h"
15#include "clang/Config/config.h"
16#include "llvm/Support/raw_ostream.h"
17#include <cstdlib>
18#include <cstring>
19
20#include "VCSVersion.inc"
21
22namespace clang {
23
25#if defined(CLANG_REPOSITORY_STRING)
26 return CLANG_REPOSITORY_STRING;
27#else
28#ifdef CLANG_REPOSITORY
29 return CLANG_REPOSITORY;
30#else
31 return "";
32#endif
33#endif
34}
35
36std::string getLLVMRepositoryPath() {
37#ifdef LLVM_REPOSITORY
38 return LLVM_REPOSITORY;
39#else
40 return "";
41#endif
42}
43
44std::string getClangRevision() {
45#ifdef CLANG_REVISION
46 return CLANG_REVISION;
47#else
48 return "";
49#endif
50}
51
52std::string getLLVMRevision() {
53#ifdef LLVM_REVISION
54 return LLVM_REVISION;
55#else
56 return "";
57#endif
58}
59
61 std::string buf;
62 llvm::raw_string_ostream OS(buf);
63 std::string Path = getClangRepositoryPath();
64 std::string Revision = getClangRevision();
65 if (!Path.empty() || !Revision.empty()) {
66 OS << '(';
67 if (!Path.empty())
68 OS << Path;
69 if (!Revision.empty()) {
70 if (!Path.empty())
71 OS << ' ';
72 OS << Revision;
73 }
74 OS << ')';
75 }
76 // Support LLVM in a separate repository.
77 std::string LLVMRev = getLLVMRevision();
78 if (!LLVMRev.empty() && LLVMRev != Revision) {
79 OS << " (";
80 std::string LLVMRepo = getLLVMRepositoryPath();
81 if (!LLVMRepo.empty())
82 OS << LLVMRepo << ' ';
83 OS << LLVMRev << ')';
84 }
85 return buf;
86}
87
88std::string getClangFullVersion() {
89 return getClangToolFullVersion("clang");
90}
91
92std::string getClangToolFullVersion(StringRef ToolName) {
93 std::string buf;
94 llvm::raw_string_ostream OS(buf);
95#ifdef CLANG_VENDOR
96 OS << CLANG_VENDOR;
97#endif
98 OS << ToolName << " version " CLANG_VERSION_STRING;
99
100 std::string repo = getClangFullRepositoryVersion();
101 if (!repo.empty()) {
102 OS << " " << repo;
103 }
104
105 return buf;
106}
107
109 // The version string we report in __VERSION__ is just a compacted version of
110 // the one we report on the command line.
111 std::string buf;
112 llvm::raw_string_ostream OS(buf);
113#ifdef CLANG_VENDOR
114 OS << CLANG_VENDOR;
115#endif
116 OS << "Clang " CLANG_VERSION_STRING;
117
118 std::string repo = getClangFullRepositoryVersion();
119 if (!repo.empty()) {
120 OS << " " << repo;
121 }
122
123 return buf;
124}
125
126} // end namespace clang
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.
Defines version macros and version-related utility functions for Clang.
std::string getLLVMRevision()
Retrieves the repository revision number (or identifier) from which LLVM was built.
Definition: Version.cpp:52
std::string getClangToolFullVersion(llvm::StringRef ToolName)
Like getClangFullVersion(), but with a custom tool name.
std::string getClangRevision()
Retrieves the repository revision number (or identifier) from which this Clang was built.
Definition: Version.cpp:44
std::string getClangRepositoryPath()
Retrieves the repository path (e.g., Subversion path) that identifies the particular Clang branch,...
Definition: Version.cpp:24
std::string getLLVMRepositoryPath()
Retrieves the repository path from which LLVM was built.
Definition: Version.cpp:36
std::string getClangFullRepositoryVersion()
Retrieves the full repository version that is an amalgamation of the information in getClangRepositor...
Definition: Version.cpp:60
std::string getClangFullCPPVersion()
Retrieves a string representing the complete clang version suitable for use in the CPP VERSION macro,...
Definition: Version.cpp:108
std::string getClangFullVersion()
Retrieves a string representing the complete clang version, which includes the clang version number,...
Definition: Version.cpp:88