diff --git a/lib/util.c b/lib/util.c index 2402ac6e5..810d766dc 100644 --- a/lib/util.c +++ b/lib/util.c @@ -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 diff --git a/lib/util.h b/lib/util.h index 9318fa727..bdad50178 100644 --- a/lib/util.h +++ b/lib/util.h @@ -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);