From: Daniel Dunbar Date: Wed, 29 Sep 2010 17:57:10 +0000 (+0000) Subject: Basic: Add support for git svn to get the repo version in clang executable, X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=640cf37c9432031412a9d3b8c2abcdff4f7f0e97;p=clang Basic: Add support for git svn to get the repo version in clang executable, patch by Jonathan Mulder! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@115049 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/Version.h b/include/clang/Basic/Version.h index 9948677662..59d82925fb 100644 --- a/include/clang/Basic/Version.h +++ b/include/clang/Basic/Version.h @@ -48,7 +48,7 @@ namespace clang { /// \brief Retrieves the repository revision number (or identifer) from which /// this Clang was built. - std::string getClangRevision(); + llvm::StringRef getClangRevision(); /// \brief Retrieves the full repository version that is an amalgamation of /// the information in getClangRepositoryPath() and getClangRevision(). diff --git a/lib/Basic/Makefile b/lib/Basic/Makefile index c156304595..7dd5221710 100644 --- a/lib/Basic/Makefile +++ b/lib/Basic/Makefile @@ -18,8 +18,10 @@ include $(CLANG_LEVEL)/Makefile SVN_REVISION := $(shell $(LLVM_SRC_ROOT)/utils/GetSourceVersion $(PROJ_SRC_DIR)/../..) +SVN_REPOSITORY := $(shell $(LLVM_SRC_ROOT)/utils/GetRepositoryPath $(PROJ_SRC_DIR)/../..) + CPP.Defines += -I$(PROJ_SRC_DIR)/../../include -I$(PROJ_OBJ_DIR)/../../include \ - -DSVN_REVISION='"$(SVN_REVISION)"' + -DSVN_REVISION='"$(SVN_REVISION)"' -DSVN_REPOSITORY='"$(SVN_REPOSITORY)"' $(ObjDir)/.ver-svn .ver: $(ObjDir)/.dir @if [ '$(SVN_REVISION)' != '$(shell cat $(ObjDir)/.ver-svn 2>/dev/null)' ]; then\ diff --git a/lib/Basic/Version.cpp b/lib/Basic/Version.cpp index 036ee00545..e9649e284d 100644 --- a/lib/Basic/Version.cpp +++ b/lib/Basic/Version.cpp @@ -21,26 +21,27 @@ using namespace std; namespace clang { llvm::StringRef getClangRepositoryPath() { - static const char URL[] = "$URL$"; - const char *URLEnd = URL + strlen(URL); +#ifdef SVN_REPOSITORY + if (SVN_REPOSITORY[0] != '\0') { + static const char URL[] = SVN_REPOSITORY; + const char *URLEnd = URL + strlen(URL) - 1; - const char *End = strstr(URL, "/lib/Basic"); - if (End) - URLEnd = End; + // Strip off version from a build from an integration branch. + const char *End = strstr(URL, "/src/tools/clang"); + if (End) + URLEnd = End; - // Strip off version from a build from an integration branch. - End = strstr(URL, "/src/tools/clang"); - if (End) - URLEnd = End; + const char *Begin = strstr(URL, "cfe/"); + if (Begin) + return llvm::StringRef(Begin + 4, URLEnd - Begin - 4); - const char *Begin = strstr(URL, "cfe/"); - if (Begin) - return llvm::StringRef(Begin + 4, URLEnd - Begin - 4); - - return llvm::StringRef(URL, URLEnd - URL); + return llvm::StringRef(URL, URLEnd - URL); + } +#endif + return ""; } -std::string getClangRevision() { +llvm::StringRef getClangRevision() { #ifdef SVN_REVISION if (SVN_REVISION[0] != '\0') { std::string revision; @@ -55,10 +56,15 @@ std::string getClangRevision() { std::string getClangFullRepositoryVersion() { std::string buf; llvm::raw_string_ostream OS(buf); - OS << getClangRepositoryPath(); - const std::string &Revision = getClangRevision(); - if (!Revision.empty()) - OS << ' ' << Revision; + const llvm::StringRef &Path = getClangRepositoryPath(); + const llvm::StringRef &Revision = getClangRevision(); + if (!Path.empty()) + OS << Path; + if (!Revision.empty()) { + if (!Path.empty()) + OS << ' '; + OS << Revision; + } return OS.str(); }