[tor-commits] [tor/master] Move tor_git_revision into a new module.

nickm at torproject.org nickm at torproject.org
Wed Nov 1 17:22:22 UTC 2017


commit 72b5e4a2db4282002fe50e11c2b8a79e108d30f8
Author: Nick Mathewson <nickm at torproject.org>
Date:   Wed Oct 18 13:49:35 2017 -0400

    Move tor_git_revision into a new module.
    
    At first, we put the tor_git_revision constant in tor_main.c, so
    that we wouldn't have to recompile config.o every time the git
    revision changed.  But putting it there had unintended side effect
    of forcing every program that wanted to link libor.a (including
    test, test-slow, the fuzzers, the benchmarks, etc) to declare their
    own tor_git_revision instance.
    
    That's not very nice, especially since we want to start supporting
    others who want to link against Tor (see 23846).
    
    So, create a new git_revision.c file that only contains this
    constant, and remove the duplicated boilerplate from everywhere
    else.
    
    Part of implementing ticket 23845.
---
 changes/ticket23845            |  4 ++++
 src/or/config.c                |  3 +--
 src/or/git_revision.c          | 17 +++++++++++++++++
 src/or/git_revision.h          | 12 ++++++++++++
 src/or/include.am              |  2 ++
 src/or/tor_main.c              | 12 ------------
 src/test/bench.c               |  5 -----
 src/test/fuzz/fuzzing_common.c |  3 ---
 src/test/testing_common.c      |  6 ------
 9 files changed, 36 insertions(+), 28 deletions(-)

diff --git a/changes/ticket23845 b/changes/ticket23845
new file mode 100644
index 000000000..01f57374b
--- /dev/null
+++ b/changes/ticket23845
@@ -0,0 +1,4 @@
+  o Code simplification and refactoring:
+    - The tor_git_revision[] constant no longer needs to be redeclared
+      by everything that links against the rest of Tor.  Done as part
+      of ticket 23845, to simplify our external API.
diff --git a/src/or/config.c b/src/or/config.c
index 832a7c967..57d919e72 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -82,6 +82,7 @@
 #include "dirvote.h"
 #include "dns.h"
 #include "entrynodes.h"
+#include "git_revision.h"
 #include "geoip.h"
 #include "hibernate.h"
 #include "main.h"
@@ -879,8 +880,6 @@ set_options(or_options_t *new_val, char **msg)
   return 0;
 }
 
-extern const char tor_git_revision[]; /* from tor_main.c */
-
 /** The version of this Tor process, as parsed. */
 static char *the_tor_version = NULL;
 /** A shorter version of this Tor process's version, for export in our router
diff --git a/src/or/git_revision.c b/src/or/git_revision.c
new file mode 100644
index 000000000..8f326b875
--- /dev/null
+++ b/src/or/git_revision.c
@@ -0,0 +1,17 @@
+/* Copyright 2001-2004 Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2017, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "git_revision.h"
+
+/** String describing which Tor Git repository version the source was
+ * built from.  This string is generated by a bit of shell kludging in
+ * src/or/include.am, and is usually right.
+ */
+const char tor_git_revision[] =
+#ifndef _MSC_VER
+#include "micro-revision.i"
+#endif
+  "";
+
diff --git a/src/or/git_revision.h b/src/or/git_revision.h
new file mode 100644
index 000000000..1ceaeedf1
--- /dev/null
+++ b/src/or/git_revision.h
@@ -0,0 +1,12 @@
+/* Copyright 2001-2004 Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2017, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef TOR_GIT_REVISION_H
+#define TOR_GIT_REVISION_H
+
+extern const char tor_git_revision[];
+
+#endif
+
diff --git a/src/or/include.am b/src/or/include.am
index 7216aba9a..662bd4807 100644
--- a/src/or/include.am
+++ b/src/or/include.am
@@ -51,6 +51,7 @@ LIBTOR_A_SOURCES = \
 	src/or/geoip.c					\
 	src/or/entrynodes.c				\
 	src/or/ext_orport.c				\
+	src/or/git_revision.c				\
 	src/or/hibernate.c				\
 	src/or/hs_cache.c				\
 	src/or/hs_cell.c				\
@@ -189,6 +190,7 @@ ORHEADERS = \
 	src/or/fp_pair.h				\
 	src/or/geoip.h					\
 	src/or/entrynodes.h				\
+	src/or/git_revision.h				\
 	src/or/hibernate.h				\
 	src/or/hs_cache.h				\
 	src/or/hs_cell.h				\
diff --git a/src/or/tor_main.c b/src/or/tor_main.c
index a3a883860..9f57f516e 100644
--- a/src/or/tor_main.c
+++ b/src/or/tor_main.c
@@ -3,18 +3,6 @@
  * Copyright (c) 2007-2017, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-extern const char tor_git_revision[];
-
-/** String describing which Tor Git repository version the source was
- * built from.  This string is generated by a bit of shell kludging in
- * src/or/include.am, and is usually right.
- */
-const char tor_git_revision[] =
-#ifndef _MSC_VER
-#include "micro-revision.i"
-#endif
-  "";
-
 /**
  * \file tor_main.c
  * \brief Stub module containing a main() function.
diff --git a/src/test/bench.c b/src/test/bench.c
index b7b123eee..f30b60990 100644
--- a/src/test/bench.c
+++ b/src/test/bench.c
@@ -3,11 +3,6 @@
  * Copyright (c) 2007-2017, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-extern const char tor_git_revision[];
-/* Ordinarily defined in tor_main.c; this bit is just here to provide one
- * since we're not linking to tor_main.c */
-const char tor_git_revision[] = "";
-
 /**
  * \file bench.c
  * \brief Benchmarks for lower level Tor modules.
diff --git a/src/test/fuzz/fuzzing_common.c b/src/test/fuzz/fuzzing_common.c
index 7aee92df6..cd88ce560 100644
--- a/src/test/fuzz/fuzzing_common.c
+++ b/src/test/fuzz/fuzzing_common.c
@@ -9,9 +9,6 @@
 #include "crypto.h"
 #include "crypto_ed25519.h"
 
-extern const char tor_git_revision[];
-const char tor_git_revision[] = "";
-
 static or_options_t *mock_options = NULL;
 static const or_options_t *
 mock_get_options(void)
diff --git a/src/test/testing_common.c b/src/test/testing_common.c
index 7e9c47b48..e43fa46c8 100644
--- a/src/test/testing_common.c
+++ b/src/test/testing_common.c
@@ -3,12 +3,6 @@
  * Copyright (c) 2007-2017, The Tor Project, Inc. */
 /* See LICENSE for licensing information */
 
-extern const char tor_git_revision[];
-
-/* Ordinarily defined in tor_main.c; this bit is just here to provide one
- * since we're not linking to tor_main.c */
-const char tor_git_revision[] = "";
-
 /**
  * \file test_common.c
  * \brief Common pieces to implement unit tests.





More information about the tor-commits mailing list