[cfe-commits] r83321 - in /cfe/trunk: include/clang/Basic/Version.h lib/Basic/CMakeLists.txt lib/Basic/Makefile lib/Basic/Version.cpp lib/Driver/Driver.cpp lib/Driver/Makefile
Daniel Dunbar
daniel at zuster.org
Sat Oct 17 02:10:56 PDT 2009
On Mon, Oct 5, 2009 at 1:33 PM, Douglas Gregor <dgregor at apple.com> wrote:
> Author: dgregor
> Date: Mon Oct 5 15:33:49 2009
> New Revision: 83321
>
> URL: http://llvm.org/viewvc/llvm-project?rev=83321&view=rev
> Log:
> Provide a common set of routines in Version.h that return Subversion
> branch/revision information. Use that information in the driver,
> rather than one-off branch/revision computation.
Nice! Want to update clang-cc to print this with its version as well?
It might also be nice to make the function names more generic, like
GetClangSourcePath/Revision and return a string from the latter. This
would allow us to sensibly add support for printing the git revision
for such users as have been corrupted.
- Daniel
> Modified:
> cfe/trunk/include/clang/Basic/Version.h
> cfe/trunk/lib/Basic/CMakeLists.txt
> cfe/trunk/lib/Basic/Makefile
> cfe/trunk/lib/Basic/Version.cpp
> cfe/trunk/lib/Driver/Driver.cpp
> cfe/trunk/lib/Driver/Makefile
>
> Modified: cfe/trunk/include/clang/Basic/Version.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Version.h?rev=83321&r1=83320&r2=83321&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/Version.h (original)
> +++ cfe/trunk/include/clang/Basic/Version.h Mon Oct 5 15:33:49 2009
> @@ -7,7 +7,8 @@
> //
> //===----------------------------------------------------------------------===//
> //
> -// This header defines version macros for Clang.
> +// This header defines version macros and version-related utility functions
> +// for Clang.
> //
> //===----------------------------------------------------------------------===//
>
> @@ -45,4 +46,14 @@
> CLANG_MAKE_VERSION_STRING(CLANG_VERSION_MAJOR,CLANG_VERSION_MINOR)
> #endif
>
> +namespace clang {
> + /// \brief Retrieves the Subversion path that identifies the particular
> + /// Clang branch, tag, or trunk from which this Clang was built.
> + const char *getClangSubversionPath();
> +
> + /// \brief Retrieves the Subversion revision number from which this Clang
> + /// was built.
> + unsigned getClangSubversionRevision();
> +}
> +
> #endif // LLVM_CLANG_BASIC_VERSION_H
>
> Modified: cfe/trunk/lib/Basic/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/CMakeLists.txt?rev=83321&r1=83320&r2=83321&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Basic/CMakeLists.txt (original)
> +++ cfe/trunk/lib/Basic/CMakeLists.txt Mon Oct 5 15:33:49 2009
> @@ -11,8 +11,19 @@
> TargetInfo.cpp
> Targets.cpp
> TokenKinds.cpp
> + Version.cpp
> )
>
> +# Determine Subversion revision.
> +# FIXME: This only gets updated when CMake is run, so this revision number
> +# may be out-of-date!
> +find_package(Subversion)
> +if (Subversion_FOUND)
> + Subversion_WC_INFO(${CLANG_SOURCE_DIR} CLANG)
> + set_source_files_properties(Version.cpp
> + PROPERTIES COMPILE_DEFINITIONS "SVN_REVISION=\"${CLANG_WC_REVISION}\"")
> +endif()
> +
> add_dependencies(clangBasic
> ClangDiagnosticAnalysis
> ClangDiagnosticAST
>
> Modified: cfe/trunk/lib/Basic/Makefile
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Makefile?rev=83321&r1=83320&r2=83321&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Basic/Makefile (original)
> +++ cfe/trunk/lib/Basic/Makefile Mon Oct 5 15:33:49 2009
> @@ -23,3 +23,14 @@
>
> include $(LEVEL)/Makefile.common
>
> +SVN_REVISION := $(shell cd $(PROJ_SRC_DIR)/../.. && svnversion)
> +
> +CPP.Defines += -I$(PROJ_SRC_DIR)/../../include -I$(PROJ_OBJ_DIR)/../../include \
> + -DSVN_REVISION='"$(SVN_REVISION)"'
> +
> +$(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
> +$(ObjDir)/.ver-svn: .ver
> +$(ObjDir)/Version.o: $(ObjDir)/.ver-svn
>
> Modified: cfe/trunk/lib/Basic/Version.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Version.cpp?rev=83321&r1=83320&r2=83321&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Basic/Version.cpp (original)
> +++ cfe/trunk/lib/Basic/Version.cpp Mon Oct 5 15:33:49 2009
> @@ -39,24 +39,10 @@
>
> unsigned getClangSubversionRevision() {
> #ifndef SVN_REVISION
> + // Subversion was not available at build time?
> return 0;
> #else
> - // What follows is an evil trick. We can end up getting three different
> - // kinds of results when asking for the Subversion information:
> - // - if SVN_REVISION is a number, we return that number (adding 0 to it is
> - // harmless).
> - // - if SVN_REVISION is "exported" (for an tree without any Subversion
> - // info), we end up referencing the local variable "exported" and adding
> - // zero to it, and we return 0.
> - // - if SVN_REVISION is empty (because "svn info" returned no results),
> - // the "+" turns into a unary "+" operator and we return 0.
> - //
> - // Making this less ugly requires doing more computation in the CMake- and
> - // Makefile-based build systems, with all sorts of checking to make sure we
> - // don't end up breaking this build. It's better this way. Really.
> - const unsigned exported = 0;
> - (void)exported;
> - return SVN_REVISION + 0;
> + return strtol(SVN_REVISION, 0, 10);
> #endif
> }
>
>
> Modified: cfe/trunk/lib/Driver/Driver.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=83321&r1=83320&r2=83321&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Driver/Driver.cpp (original)
> +++ cfe/trunk/lib/Driver/Driver.cpp Mon Oct 5 15:33:49 2009
> @@ -410,24 +410,13 @@
> }
>
> void Driver::PrintVersion(const Compilation &C, llvm::raw_ostream &OS) const {
> - static char buf[] = "$URL$";
> - char *zap = strstr(buf, "/lib/Driver");
> - if (zap)
> - *zap = 0;
> - zap = strstr(buf, "/clang/tools/clang");
> - if (zap)
> - *zap = 0;
> - const char *vers = buf+6;
> - // FIXME: Add cmake support and remove #ifdef
> -#ifdef SVN_REVISION
> - const char *revision = SVN_REVISION;
> -#else
> - const char *revision = "";
> -#endif
> // FIXME: The following handlers should use a callback mechanism, we don't
> // know what the client would like to do.
> OS << "clang version " CLANG_VERSION_STRING " ("
> - << vers << " " << revision << ")" << '\n';
> + << getClangSubversionPath();
> + if (unsigned Revision = getClangSubversionRevision())
> + OS << " " << Revision;
> + OS << ")" << '\n';
>
> const ToolChain &TC = C.getDefaultToolChain();
> OS << "Target: " << TC.getTripleString() << '\n';
>
> Modified: cfe/trunk/lib/Driver/Makefile
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Makefile?rev=83321&r1=83320&r2=83321&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Driver/Makefile (original)
> +++ cfe/trunk/lib/Driver/Makefile Mon Oct 5 15:33:49 2009
> @@ -15,16 +15,6 @@
> # Don't install Clang libraries
> NO_INSTALL = 1
>
> -include $(LEVEL)/Makefile.common
> -
> -SVN_REVISION := $(shell cd $(PROJ_SRC_DIR)/../.. && svnversion)
> +CPPFLAGS += -I$(PROJ_SRC_DIR)/../../include -I$(PROJ_OBJ_DIR)/../../include
>
> -CPP.Defines += -I$(PROJ_SRC_DIR)/../../include -I$(PROJ_OBJ_DIR)/../../include \
> - -DSVN_REVISION='"$(SVN_REVISION)"'
> -
> -$(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
> -$(ObjDir)/.ver-svn: .ver
> -$(ObjDir)/Driver.o: $(ObjDir)/.ver-svn
> +include $(LEVEL)/Makefile.common
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
More information about the cfe-commits
mailing list