llvm-project/clang/lib/Basic/Version.cpp

64 lines
1.9 KiB
C++
Raw Normal View History

//===- Version.cpp - Clang Version Number -----------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file defines several version-related utility functions for Clang.
//
//===----------------------------------------------------------------------===//
#include <cstring>
#include <cstdlib>
using namespace std;
namespace clang {
const char *getClangSubversionPath() {
static const char *Path = 0;
if (Path)
return Path;
static char URL[] = "$URL$";
char *End = strstr(URL, "/lib/Basic");
if (End)
*End = 0;
char *Begin = strstr(URL, "cfe/");
if (Begin) {
Path = Begin + 4;
return Path;
}
Path = URL;
return Path;
}
unsigned getClangSubversionRevision() {
#ifndef SVN_REVISION
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;
#endif
}
} // end namespace clang