The version is determined by configure.ac. After this version is shown the
revision. For subversion, it is simply the current revision as given by
`svnversion`. For git, the latest svn revision that HEAD includes is shown,
followed by the offset of HEAD from that commit, followed by a truncated sha1
for HEAD. If the offset is 0, the offset and sha1 are omitted.
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@672900
13f79535-47bb-0310-9956-
ffa450edef68
AM_YFLAGS = -d
+BUILT_SOURCES =
bin_PROGRAMS = thrift
clean-local:
$(RM) thriftl.cc thrifty.cc thrifty.h
+
+src/main.cc: version.h
+
+# Adding this to BUILT_SOURCES will cause version.h to be
+# regenerated on every "make all" or "make check", which is
+# necessary because it changes whenever we "svn up" or similar.
+# Ideally, we would like this to be regenerated whenever the
+# compiler is rebuilt, but every way we could think of to do
+# that caused unnecessary rebuilds of the compiler.
+BUILT_SOURCES += regen_version_h
+
+THRIFT_VERSION=$(shell /bin/sh $(top_srcdir)/print_version.sh -v)
+THRIFT_REVISION=$(shell /bin/sh $(top_srcdir)/print_version.sh -r)
+
+regen_version_h:
+ @echo -n "Regenerating version.h... "
+ @TMPFILE=`mktemp ./version_h.tmp_XXXXXX` ; \
+ echo "// AUTOGENERATED, DO NOT EDIT" > $$TMPFILE ; \
+ echo '#define THRIFT_VERSION "$(THRIFT_VERSION)"\n' >> $$TMPFILE ; \
+ echo '#define THRIFT_REVISION "$(THRIFT_REVISION)"\n' >> $$TMPFILE ; \
+ if cmp $$TMPFILE version.h >/dev/null ; \
+ then \
+ rm -f $$TMPFILE ; \
+ echo "No changes." ; \
+ else \
+ mv $$TMPFILE version.h ; \
+ echo "Updated." ; \
+ fi
#include "generate/t_xsd_generator.h"
#include "generate/t_erl_generator.h"
+#include "version.h"
+
using namespace std;
/**
*/
}
+/**
+ * Prints the version number
+ */
+void version() {
+ printf("Thrift version %s-%s\n", THRIFT_VERSION, THRIFT_REVISION);
+}
+
/**
* Diplays the usage message and then exits with an error code.
*/
void usage() {
fprintf(stderr, "Usage: thrift [options] file\n");
fprintf(stderr, "Options:\n");
+ fprintf(stderr, " -version Print the compiler version\n");
fprintf(stderr, " -php Generate PHP output files\n");
fprintf(stderr, " -phpi Generate PHP inlined files\n");
fprintf(stderr, " -phps Generate PHP server stubs (with -php)\n");
++arg;
}
- if (strcmp(arg, "-debug") == 0) {
+ if (strcmp(arg, "-version") == 0) {
+ version();
+ exit(1);
+ } else if (strcmp(arg, "-debug") == 0) {
g_debug = 1;
} else if (strcmp(arg, "-nowarn") == 0) {
g_warn = 0;
}
}
+ // if you're asking for version, you have a right not to pass a file
+ if (strcmp(argv[argc-1], "-version") == 0) {
+ version();
+ exit(1);
+ }
+
// TODO(dreiss): Delete these when everyone is using the new hotness.
if (gen_cpp) {
pwarning(1, "-cpp is deprecated. Use --gen cpp");
--- /dev/null
+#!/bin/sh
+
+cd "`dirname "$0"`"
+
+# Computing both the version and the revision on every invocation is wasteful,
+# but it is cheap and avoids the use of nonportable shell functions.
+
+VERSION=`sed -ne 's/^AC_INIT(\[thrift\], \[\(.*\)\])$/\1/p' configure.ac`
+
+if test -d .svn ; then
+ REVISION="r`svnversion`"
+elif test -d .git ; then
+ SHA1=`git rev-list --max-count=1 --grep='^git-svn-id:' HEAD`
+ REVISION=`git cat-file commit $SHA1 | sed -ne 's/^git-svn-id:[^@]*@\([0-9][0-9]*\).*/r\1/p'`
+ OFFSET=`git rev-list ^$SHA1 HEAD | wc -l`
+ if test $OFFSET != 0 ; then
+ REVISION="$REVISION-$OFFSET-`git rev-parse --verify HEAD | cut -c 1-7`"
+ fi
+else
+ REVISION="exported"
+fi
+
+case "$1" in
+ -v) echo $VERSION ;;
+ -r) echo $REVISION ;;
+ -a) echo "$VERSION-$REVISION" ;;
+ *) echo "Usage: $0 -v|-r|-a"; exit 1;;
+esac