diff options
Diffstat (limited to 'src/lib/version')
-rw-r--r-- | src/lib/version/.may_include | 3 | ||||
-rw-r--r-- | src/lib/version/git_revision.c | 39 | ||||
-rw-r--r-- | src/lib/version/git_revision.h | 17 | ||||
-rw-r--r-- | src/lib/version/include.am | 27 | ||||
-rw-r--r-- | src/lib/version/lib_version.md | 2 | ||||
-rw-r--r-- | src/lib/version/torversion.h | 17 | ||||
-rw-r--r-- | src/lib/version/version.c | 59 |
7 files changed, 164 insertions, 0 deletions
diff --git a/src/lib/version/.may_include b/src/lib/version/.may_include new file mode 100644 index 0000000000..d159ceb41f --- /dev/null +++ b/src/lib/version/.may_include @@ -0,0 +1,3 @@ +orconfig.h +micro-revision.i +lib/version/*.h
\ No newline at end of file diff --git a/src/lib/version/git_revision.c b/src/lib/version/git_revision.c new file mode 100644 index 0000000000..09f11aa316 --- /dev/null +++ b/src/lib/version/git_revision.c @@ -0,0 +1,39 @@ +/* Copyright 2001-2004 Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2020, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#include "orconfig.h" +#include "lib/version/git_revision.h" + +/** + * @file git_revision.c + * @brief Strings to describe the current Git commit. + **/ + +/** String describing which Tor Git repository version the source was + * built from. This string is generated by a bit of shell kludging in + * src/core/include.am, and is usually right. + */ +const char tor_git_revision[] = +#ifndef COCCI +#ifndef _MSC_VER +#include "micro-revision.i" +#endif +#endif + ""; + +/** + * String appended to Tor bug messages describing the Tor version. + * + * It has the form "(on Tor 0.4.3.1-alpha)" or + * "(on Tor 0.4.3.1-alpha git-b994397f1af193f8)" + **/ +const char tor_bug_suffix[] = " (on Tor " VERSION +#ifndef COCCI +#ifndef _MSC_VER + " " +#include "micro-revision.i" +#endif +#endif /* !defined(COCCI) */ + ")"; diff --git a/src/lib/version/git_revision.h b/src/lib/version/git_revision.h new file mode 100644 index 0000000000..80b6c4734e --- /dev/null +++ b/src/lib/version/git_revision.h @@ -0,0 +1,17 @@ +/* Copyright 2001-2004 Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2020, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#ifndef TOR_GIT_REVISION_H +#define TOR_GIT_REVISION_H + +/** + * @file git_revision.h + * @brief Header for git_revision.c + **/ + +extern const char tor_git_revision[]; +extern const char tor_bug_suffix[]; + +#endif /* !defined(TOR_GIT_REVISION_H) */ diff --git a/src/lib/version/include.am b/src/lib/version/include.am new file mode 100644 index 0000000000..0ae31be1b2 --- /dev/null +++ b/src/lib/version/include.am @@ -0,0 +1,27 @@ + +noinst_LIBRARIES += src/lib/libtor-version.a + +if UNITTESTS_ENABLED +noinst_LIBRARIES += src/lib/libtor-version-testing.a +endif + +# ADD_C_FILE: INSERT SOURCES HERE. +src_lib_libtor_version_a_SOURCES = \ + src/lib/version/git_revision.c \ + src/lib/version/version.c + +src_lib_libtor_version_testing_a_SOURCES = \ + $(src_lib_libtor_version_a_SOURCES) +src_lib_libtor_version_testing_a_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_CPPFLAGS) +src_lib_libtor_version_testing_a_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS) + +# Declare that these object files depend on micro-revision.i. Without this +# rule, we could try to build them before micro-revision.i was created. +src/lib/version/git_revision.$(OBJEXT) \ + src/lib/version/src_lib_libtor_version_testing_a-git_revision.$(OBJEXT): \ + micro-revision.i + +# ADD_C_FILE: INSERT HEADERS HERE. +noinst_HEADERS += \ + src/lib/version/git_revision.h \ + src/lib/version/torversion.h diff --git a/src/lib/version/lib_version.md b/src/lib/version/lib_version.md new file mode 100644 index 0000000000..ccc45920f9 --- /dev/null +++ b/src/lib/version/lib_version.md @@ -0,0 +1,2 @@ +@dir /lib/version +@brief lib/version: holds the current version of Tor. diff --git a/src/lib/version/torversion.h b/src/lib/version/torversion.h new file mode 100644 index 0000000000..679df74381 --- /dev/null +++ b/src/lib/version/torversion.h @@ -0,0 +1,17 @@ +/* Copyright 2001-2004 Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2020, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#ifndef TOR_VERSION_H +#define TOR_VERSION_H + +/** + * @file torversion.h + * @brief Header for version.c. + **/ + +const char *get_version(void); +const char *get_short_version(void); + +#endif /* !defined(TOR_VERSION_H) */ diff --git a/src/lib/version/version.c b/src/lib/version/version.c new file mode 100644 index 0000000000..ec1d0bea2f --- /dev/null +++ b/src/lib/version/version.c @@ -0,0 +1,59 @@ +/* Copyright 2001-2004 Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2020, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#include "orconfig.h" +#include "lib/version/torversion.h" +#include "lib/version/git_revision.h" + +#include <stdio.h> +#include <string.h> + +/** + * @file version.c + * @brief Functions to get the version of Tor. + **/ + +/** A shorter version of this Tor process's version, for export in our router + * descriptor. (Does not include the git version, if any.) */ +static const char the_short_tor_version[] = + VERSION +#ifdef TOR_BUILD_TAG + " ("TOR_BUILD_TAG")" +#endif + ""; + +/** + * Longest possible version length. We make this a constant so that we + * can statically allocate the_tor_version. + **/ +#define MAX_VERSION_LEN 128 + +/** The version of this Tor process, possibly including git version */ +static char the_tor_version[MAX_VERSION_LEN] = ""; + +/** Return the current Tor version. */ +const char * +get_version(void) +{ + if (the_tor_version[0] == 0) { + if (strlen(tor_git_revision)) { + snprintf(the_tor_version, sizeof(the_tor_version), + "%s (git-%s)", the_short_tor_version, tor_git_revision); + } else { + snprintf(the_tor_version, sizeof(the_tor_version), + "%s", the_short_tor_version); + } + the_tor_version[sizeof(the_tor_version)-1] = 0; + } + + return the_tor_version; +} + +/** Return the current Tor version, without any git tag. */ +const char * +get_short_version(void) +{ + return the_short_tor_version; +} |