diff options
author | Jia Liu <proljc@gmail.com> | 2012-03-02 14:37:41 +0000 |
---|---|---|
committer | Jia Liu <proljc@gmail.com> | 2012-03-02 14:37:41 +0000 |
commit | f8e5d4cf39220e9b7c7ee744f634fce6dec28a76 (patch) | |
tree | 260a48ffa8e19d3d3258b3c574228fd4a9a2ab81 | |
parent | b4f0bd6864f33bc2fd8246f1f841d87e60c4ffc8 (diff) |
clang -v support for separate clang.git and llvm.git, patch by Andrew Trick.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151910 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Basic/Version.h | 9 | ||||
-rw-r--r-- | lib/Basic/Makefile | 23 | ||||
-rw-r--r-- | lib/Basic/Version.cpp | 35 |
3 files changed, 57 insertions, 10 deletions
diff --git a/include/clang/Basic/Version.h b/include/clang/Basic/Version.h index 96be5475c6..f3f5b5a53a 100644 --- a/include/clang/Basic/Version.h +++ b/include/clang/Basic/Version.h @@ -47,10 +47,19 @@ namespace clang { /// Clang was built. std::string getClangRepositoryPath(); + /// \brief Retrieves the repository path from which LLVM was built. Supports + /// LLVM residing in a separate repository from clang. + std::string getLLVMRepositoryPath(); + /// \brief Retrieves the repository revision number (or identifer) from which /// this Clang was built. std::string getClangRevision(); + /// \brief Retrieves the repository revision number (or identifer) from which + /// LLVM was built. If Clang and LLVM are in the same repository, this returns + /// the same string as getClangRevision. + std::string getLLVMRevision(); + /// \brief Retrieves the full repository version that is an amalgamation of /// the information in getClangRepositoryPath() and getClangRevision(). std::string getClangFullRepositoryVersion(); diff --git a/lib/Basic/Makefile b/lib/Basic/Makefile index 61accba0b5..f5ca904338 100644 --- a/lib/Basic/Makefile +++ b/lib/Basic/Makefile @@ -1,10 +1,10 @@ ##===- clang/lib/Basic/Makefile ----------------------------*- Makefile -*-===## -# +# # The LLVM Compiler Infrastructure # # This file is distributed under the University of Illinois Open Source # License. See LICENSE.TXT for details. -# +# ##===----------------------------------------------------------------------===## # # This implements the Basic library for the C-Language front-end. @@ -17,17 +17,24 @@ LIBRARYNAME := clangBasic include $(CLANG_LEVEL)/Makefile SVN_REVISION := $(strip \ - $(shell $(LLVM_SRC_ROOT)/utils/GetSourceVersion $(PROJ_SRC_DIR)/../..)) + $(shell $(LLVM_SRC_ROOT)/utils/GetSourceVersion $(PROJ_SRC_DIR)/../..)) SVN_REPOSITORY := $(strip \ - $(shell $(LLVM_SRC_ROOT)/utils/GetRepositoryPath $(PROJ_SRC_DIR)/../..)) + $(shell $(LLVM_SRC_ROOT)/utils/GetRepositoryPath $(PROJ_SRC_DIR)/../..)) + +LLVM_REVISION := $(strip \ + $(shell $(LLVM_SRC_ROOT)/utils/GetSourceVersion $(LLVM_SRC_ROOT))) + +LLVM_REPOSITORY := $(strip \ + $(shell $(LLVM_SRC_ROOT)/utils/GetRepositoryPath $(LLVM_SRC_ROOT))) CPP.Defines += -I$(PROJ_SRC_DIR)/../../include -I$(PROJ_OBJ_DIR)/../../include \ - -DSVN_REVISION='"$(SVN_REVISION)"' -DSVN_REPOSITORY='"$(SVN_REPOSITORY)"' + -DSVN_REVISION='"$(SVN_REVISION)"' -DSVN_REPOSITORY='"$(SVN_REPOSITORY)"' \ + -DLLVM_REVISION='"$(LLVM_REVISION)"' -DLLVM_REPOSITORY='"$(LLVM_REPOSITORY)"' $(ObjDir)/.ver-svn .ver: $(ObjDir)/.dir - @if [ '$(SVN_REVISION)' != '$(shell cat $(ObjDir)/.ver-svn 2>/dev/null)' ]; then\ - echo '$(SVN_REVISION)' > $(ObjDir)/.ver-svn; \ - fi + @if [ '$(SVN_REVISION) $(LLVM_REVISION)' != '$(shell cat $(ObjDir)/.ver-svn 2>/dev/null)' ]; then\ + echo '$(SVN_REVISION) $(LLVM_REVISION)' > $(ObjDir)/.ver-svn; \ + fi $(ObjDir)/.ver-svn: .ver $(ObjDir)/Version.o: $(ObjDir)/.ver-svn diff --git a/lib/Basic/Version.cpp b/lib/Basic/Version.cpp index 10b9364587..2934822c80 100644 --- a/lib/Basic/Version.cpp +++ b/lib/Basic/Version.cpp @@ -19,7 +19,7 @@ #include <cstdlib> namespace clang { - + std::string getClangRepositoryPath() { #if defined(CLANG_REPOSITORY_STRING) return CLANG_REPOSITORY_STRING; @@ -50,6 +50,21 @@ std::string getClangRepositoryPath() { #endif } +std::string getLLVMRepositoryPath() { +#ifdef LLVM_REPOSITORY + StringRef URL(LLVM_REPOSITORY); +#else + StringRef URL(""); +#endif + + // Trim path prefix off, assuming path came from standard llvm path. + size_t Start = URL.find("llvm/"); + if (Start != StringRef::npos) + URL = URL.substr(Start + 5); + + return URL; +} + std::string getClangRevision() { #ifdef SVN_REVISION return SVN_REVISION; @@ -58,6 +73,14 @@ std::string getClangRevision() { #endif } +std::string getLLVMRevision() { +#ifdef LLVM_REVISION + return LLVM_REVISION; +#else + return ""; +#endif +} + std::string getClangFullRepositoryVersion() { std::string buf; llvm::raw_string_ostream OS(buf); @@ -70,9 +93,17 @@ std::string getClangFullRepositoryVersion() { OS << ' '; OS << Revision; } + // Support LLVM in a separate repository. + std::string LLVMRev = getLLVMRevision(); + if (!LLVMRev.empty() && LLVMRev != Revision) { + std::string LLVMRepo = getLLVMRepositoryPath(); + if (!LLVMRepo.empty()) + OS << ' ' << LLVMRepo; + OS << ' ' << LLVMRev; + } return OS.str(); } - + std::string getClangFullVersion() { std::string buf; llvm::raw_string_ostream OS(buf); |