From: Daniel Dunbar Date: Wed, 29 Sep 2010 19:15:29 +0000 (+0000) Subject: Basic: Simplify getClangRepositoryPath and getClangRevision. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=16a8fb7e9dd4a0347f7ed676e2d9bd254e1ea5b0;p=clang Basic: Simplify getClangRepositoryPath and getClangRevision. - I don't like returning StringRef's ever, unless it is actually important for performance, which it isn't here. - Also, stop validating getClangRevision to be an integer, I don't see a good reason to do this. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@115071 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/Version.h b/include/clang/Basic/Version.h index 59d82925fb..ede68ed50d 100644 --- a/include/clang/Basic/Version.h +++ b/include/clang/Basic/Version.h @@ -44,11 +44,11 @@ namespace clang { /// \brief Retrieves the repository path (e.g., Subversion path) that /// identifies the particular Clang branch, tag, or trunk from which this /// Clang was built. - llvm::StringRef getClangRepositoryPath(); + std::string getClangRepositoryPath(); /// \brief Retrieves the repository revision number (or identifer) from which /// this Clang was built. - llvm::StringRef getClangRevision(); + std::string 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 7dd5221710..61accba0b5 100644 --- a/lib/Basic/Makefile +++ b/lib/Basic/Makefile @@ -16,9 +16,11 @@ LIBRARYNAME := clangBasic include $(CLANG_LEVEL)/Makefile -SVN_REVISION := $(shell $(LLVM_SRC_ROOT)/utils/GetSourceVersion $(PROJ_SRC_DIR)/../..) +SVN_REVISION := $(strip \ + $(shell $(LLVM_SRC_ROOT)/utils/GetSourceVersion $(PROJ_SRC_DIR)/../..)) -SVN_REPOSITORY := $(shell $(LLVM_SRC_ROOT)/utils/GetRepositoryPath $(PROJ_SRC_DIR)/../..) +SVN_REPOSITORY := $(strip \ + $(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_REPOSITORY='"$(SVN_REPOSITORY)"' diff --git a/lib/Basic/Version.cpp b/lib/Basic/Version.cpp index e9649e284d..900b3e3859 100644 --- a/lib/Basic/Version.cpp +++ b/lib/Basic/Version.cpp @@ -20,44 +20,37 @@ using namespace std; namespace clang { -llvm::StringRef getClangRepositoryPath() { +std::string getClangRepositoryPath() { #ifdef SVN_REPOSITORY - if (SVN_REPOSITORY[0] != '\0') { - static const char URL[] = SVN_REPOSITORY; - const char *URLEnd = URL + strlen(URL) - 1; + llvm::StringRef URL(SVN_REPOSITORY); +#else + llvm::StringRef URL(""); +#endif - // 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. + URL = URL.slice(0, URL.find("/src/tools/clang")); - const char *Begin = strstr(URL, "cfe/"); - if (Begin) - return llvm::StringRef(Begin + 4, URLEnd - Begin - 4); + // Trim path prefix off, assuming path came from standard cfe path. + size_t Start = URL.find("cfe/"); + if (Start != llvm::StringRef::npos) + URL = URL.substr(Start + 4); - return llvm::StringRef(URL, URLEnd - URL); - } -#endif - return ""; + return URL; } -llvm::StringRef getClangRevision() { +std::string getClangRevision() { #ifdef SVN_REVISION - if (SVN_REVISION[0] != '\0') { - std::string revision; - llvm::raw_string_ostream OS(revision); - OS << strtol(SVN_REVISION, 0, 10); - return OS.str(); - } -#endif + return SVN_REVISION; +#else return ""; +#endif } std::string getClangFullRepositoryVersion() { std::string buf; llvm::raw_string_ostream OS(buf); - const llvm::StringRef &Path = getClangRepositoryPath(); - const llvm::StringRef &Revision = getClangRevision(); + std::string Path = getClangRepositoryPath(); + std::string Revision = getClangRevision(); if (!Path.empty()) OS << Path; if (!Revision.empty()) {