util: New function set_program_name_version().
authorEthan Jackson <ethan@nicira.com>
Fri, 6 Apr 2012 18:47:51 +0000 (11:47 -0700)
committerEthan Jackson <ethan@nicira.com>
Fri, 6 Apr 2012 19:46:15 +0000 (12:46 -0700)
With this function, users of the Open vSwitch libraries which
should not have the same version as Open vSwitch will have their
version displayed in unixctl and at the command line.

Signed-off-by: Ethan Jackson <ethan@nicira.com>
lib/util.c
lib/util.h

index 2402ac6e5a53de28e4702ebdaa347ea81587246c..810d766dc7fbe0be9d93e2d2539f1e5b7e0467d3 100644 (file)
@@ -284,21 +284,35 @@ ovs_retval_to_string(int retval)
  * be called at the beginning of main() with "argv[0]" as the argument
  * to 'argv0'.
  *
+ * 'version' should contain the version of the caller's program.  If 'version'
+ * is the same as the VERSION #define, the caller is assumed to be part of Open
+ * vSwitch.  Otherwise, it is assumed to be an external program linking against
+ * the Open vSwitch libraries.
+ *
  * The 'date' and 'time' arguments should likely be called with
  * "__DATE__" and "__TIME__" to use the time the binary was built.
  * Alternatively, the "set_program_name" macro may be called to do this
  * automatically.
  */
 void
-set_program_name__(const char *argv0, const char *date, const char *time)
+set_program_name__(const char *argv0, const char *version, const char *date,
+                   const char *time)
 {
     const char *slash = strrchr(argv0, '/');
     program_name = slash ? slash + 1 : argv0;
 
     free(program_version);
-    program_version = xasprintf("%s (Open vSwitch) "VERSION"\n"
-                                "Compiled %s %s\n",
-                                program_name, date, time);
+
+    if (!strcmp(version, VERSION)) {
+        program_version = xasprintf("%s (Open vSwitch) "VERSION"\n"
+                                    "Compiled %s %s\n",
+                                    program_name, date, time);
+    } else {
+        program_version = xasprintf("%s %s\n"
+                                    "Open vSwitch Library "VERSION"\n"
+                                    "Compiled %s %s\n",
+                                    program_name, version, date, time);
+    }
 }
 
 /* Returns a pointer to a string describing the program version.  The
index 9318fa7274a0f30b98dbf307a7abef348b35a7a9..bdad501782b5c1db76c1f9e95a4dd09d2896c210 100644 (file)
@@ -162,9 +162,10 @@ rightmost_1bit(uintmax_t x)
 extern "C" {
 #endif
 
-void set_program_name__(const char *name, const char *date, const char *time);
+void set_program_name__(const char *name, const char *version,
+                        const char *date, const char *time);
 #define set_program_name(name) \
-        set_program_name__(name, __DATE__, __TIME__)
+        set_program_name__(name, VERSION, __DATE__, __TIME__)
 
 const char *get_program_version(void);
 void ovs_print_version(uint8_t min_ofp, uint8_t max_ofp);