brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · 4823f56 Raw
129 lines · cpp
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-exception6//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 24std::string getClangRepositoryPath() {25#if defined(CLANG_REPOSITORY_STRING)26  return CLANG_REPOSITORY_STRING;27#else28#ifdef CLANG_REPOSITORY29  return CLANG_REPOSITORY;30#else31  return "";32#endif33#endif34}35 36std::string getLLVMRepositoryPath() {37#ifdef LLVM_REPOSITORY38  return LLVM_REPOSITORY;39#else40  return "";41#endif42}43 44std::string getClangRevision() {45#ifdef CLANG_REVISION46  return CLANG_REVISION;47#else48  return "";49#endif50}51 52std::string getLLVMRevision() {53#ifdef LLVM_REVISION54  return LLVM_REVISION;55#else56  return "";57#endif58}59 60std::string getClangVendor() {61#ifdef CLANG_VENDOR62  return CLANG_VENDOR;63#else64  return "";65#endif66}67 68std::string getClangFullRepositoryVersion() {69  std::string buf;70  llvm::raw_string_ostream OS(buf);71  std::string Path = getClangRepositoryPath();72  std::string Revision = getClangRevision();73  if (!Path.empty() || !Revision.empty()) {74    OS << '(';75    if (!Path.empty())76      OS << Path;77    if (!Revision.empty()) {78      if (!Path.empty())79        OS << ' ';80      OS << Revision;81    }82    OS << ')';83  }84  // Support LLVM in a separate repository.85  std::string LLVMRev = getLLVMRevision();86  if (!LLVMRev.empty() && LLVMRev != Revision) {87    OS << " (";88    std::string LLVMRepo = getLLVMRepositoryPath();89    if (!LLVMRepo.empty())90      OS << LLVMRepo << ' ';91    OS << LLVMRev << ')';92  }93  return buf;94}95 96std::string getClangFullVersion() {97  return getClangToolFullVersion("clang");98}99 100std::string getClangToolFullVersion(StringRef ToolName) {101  std::string buf;102  llvm::raw_string_ostream OS(buf);103  OS << getClangVendor() << ToolName << " version " CLANG_VERSION_STRING;104 105  std::string repo = getClangFullRepositoryVersion();106  if (!repo.empty()) {107    OS << " " << repo;108  }109 110  return buf;111}112 113std::string getClangFullCPPVersion() {114  // The version string we report in __VERSION__ is just a compacted version of115  // the one we report on the command line.116  std::string buf;117  llvm::raw_string_ostream OS(buf);118  OS << getClangVendor() << "Clang " CLANG_VERSION_STRING;119 120  std::string repo = getClangFullRepositoryVersion();121  if (!repo.empty()) {122    OS << " " << repo;123  }124 125  return buf;126}127 128} // end namespace clang129