[AMDGPU][AsmParser][NFC] Get rid of custom default operand handlers.
[llvm-project.git] / clang / lib / Basic / Version.cpp
blobe205da7adec1d8ea569335d62bb407ae1cc3893b
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.
11 //===----------------------------------------------------------------------===//
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>
20 #include "VCSVersion.inc"
22 namespace clang {
24 std::string getClangRepositoryPath() {
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
36 std::string getLLVMRepositoryPath() {
37 #ifdef LLVM_REPOSITORY
38 return LLVM_REPOSITORY;
39 #else
40 return "";
41 #endif
44 std::string getClangRevision() {
45 #ifdef CLANG_REVISION
46 return CLANG_REVISION;
47 #else
48 return "";
49 #endif
52 std::string getLLVMRevision() {
53 #ifdef LLVM_REVISION
54 return LLVM_REVISION;
55 #else
56 return "";
57 #endif
60 std::string getClangFullRepositoryVersion() {
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;
74 OS << ')';
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 << ')';
85 return buf;
88 std::string getClangFullVersion() {
89 return getClangToolFullVersion("clang");
92 std::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;
100 std::string repo = getClangFullRepositoryVersion();
101 if (!repo.empty()) {
102 OS << " " << repo;
105 return buf;
108 std::string getClangFullCPPVersion() {
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;
118 std::string repo = getClangFullRepositoryVersion();
119 if (!repo.empty()) {
120 OS << " " << repo;
123 return buf;
126 } // end namespace clang