diff options
author | João Valverde <j@v6e.pt> | 2021-07-03 12:58:30 +0100 |
---|---|---|
committer | Wireshark GitLab Utility <gerald+gitlab-utility@wireshark.org> | 2021-07-04 10:37:49 +0000 |
commit | 100876337af28f9e86259e0a17e28d1ea1b737a2 (patch) | |
tree | a366f31adae1393872c124b3fa8719f2d5cd0dd5 /ui | |
parent | 47d2afd99018b5ef85376e1ff81ee11af4483fa3 (diff) |
Move version_info.[ch] to ui/
Version info is an aspect of UI implementation so move it to
a more appropriate place, such as ui/. This also helps declutter
the top-level.
A static library is appropriate to encapsulate the dependencies
as private and it is better supported by CMake than object libraries.
Also version_info.h should not be installed as a public header.
Diffstat (limited to 'ui')
-rw-r--r-- | ui/CMakeLists.txt | 29 | ||||
-rw-r--r-- | ui/commandline.c | 2 | ||||
-rw-r--r-- | ui/decode_as_utils.c | 2 | ||||
-rw-r--r-- | ui/export_pdu_ui_utils.c | 2 | ||||
-rw-r--r-- | ui/qt/about_dialog.cpp | 2 | ||||
-rw-r--r-- | ui/qt/capture_file_properties_dialog.cpp | 2 | ||||
-rw-r--r-- | ui/qt/follow_stream_dialog.cpp | 2 | ||||
-rw-r--r-- | ui/qt/main.cpp | 2 | ||||
-rw-r--r-- | ui/qt/main_window.cpp | 2 | ||||
-rw-r--r-- | ui/qt/welcome_page.cpp | 2 | ||||
-rw-r--r-- | ui/tap_export_pdu.c | 2 | ||||
-rw-r--r-- | ui/version_info.c | 547 | ||||
-rw-r--r-- | ui/version_info.h | 117 |
13 files changed, 694 insertions, 19 deletions
diff --git a/ui/CMakeLists.txt b/ui/CMakeLists.txt index 06f829a77d..f3e0c6d3e6 100644 --- a/ui/CMakeLists.txt +++ b/ui/CMakeLists.txt @@ -78,17 +78,8 @@ set_source_files_properties( COMPILE_FLAGS "${WERROR_COMMON_FLAGS}" ) - add_library(ui STATIC ${UI_SRC}) -set_target_properties(ui PROPERTIES - LINK_FLAGS "${WS_LINK_FLAGS}" - FOLDER "UI" -) -if(MSVC) - set_target_properties(ui PROPERTIES LINK_FLAGS_DEBUG "${WS_MSVC_DEBUG_LINK_FLAGS}") -endif() - target_link_libraries(ui wsutil caputils) target_include_directories(ui SYSTEM @@ -96,6 +87,26 @@ target_include_directories(ui SYSTEM ${WINSPARKLE_INCLUDE_DIRS} ) +add_library(version_info STATIC version_info.c) + +if(NOT VCSVERSION_OVERRIDE) + add_dependencies(version_info version) +endif() + +target_link_libraries(version_info PRIVATE ${ZLIB_LIBRARIES}) + +target_include_directories(version_info PRIVATE ${ZLIB_INCLUDE_DIRS}) + +set_target_properties(ui version_info PROPERTIES + LINK_FLAGS "${WS_LINK_FLAGS}" + FOLDER "UI" +) +if(MSVC) + set_target_properties(ui version_info PROPERTIES + LINK_FLAGS_DEBUG "${WS_MSVC_DEBUG_LINK_FLAGS}" + ) +endif() + add_definitions(-DDOC_DIR="${CMAKE_INSTALL_FULL_DOCDIR}") CHECKAPI( diff --git a/ui/commandline.c b/ui/commandline.c index 96135f4472..ebfc5eae50 100644 --- a/ui/commandline.c +++ b/ui/commandline.c @@ -29,7 +29,7 @@ #include <wsutil/wsgetopt.h> #endif -#include <version_info.h> +#include <ui/version_info.h> #include <ui/clopts_common.h> #include <ui/cmdarg_err.h> diff --git a/ui/decode_as_utils.c b/ui/decode_as_utils.c index 5357b44d52..be2164e372 100644 --- a/ui/decode_as_utils.c +++ b/ui/decode_as_utils.c @@ -25,7 +25,7 @@ #include "wsutil/filesystem.h" #include <wsutil/ws_assert.h> #include "ui/cmdarg_err.h" -#include "version_info.h" +#include "ui/version_info.h" /* XXX - We might want to switch this to a UAT */ diff --git a/ui/export_pdu_ui_utils.c b/ui/export_pdu_ui_utils.c index 7246b57f66..53e43bbba2 100644 --- a/ui/export_pdu_ui_utils.c +++ b/ui/export_pdu_ui_utils.c @@ -15,7 +15,7 @@ #include "globals.h" #include "wsutil/os_version_info.h" #include "wsutil/tempfile.h" -#include "version_info.h" +#include "ui/version_info.h" #include <epan/tap.h> #include <epan/exported_pdu.h> diff --git a/ui/qt/about_dialog.cpp b/ui/qt/about_dialog.cpp index 14535baa60..27611a1f62 100644 --- a/ui/qt/about_dialog.cpp +++ b/ui/qt/about_dialog.cpp @@ -38,7 +38,7 @@ #include "wsutil/tempfile.h" #include "wsutil/plugins.h" #include "wsutil/copyright_info.h" -#include "version_info.h" +#include "ui/version_info.h" #include "extcap.h" diff --git a/ui/qt/capture_file_properties_dialog.cpp b/ui/qt/capture_file_properties_dialog.cpp index 8c23a6cb19..39241dcc1a 100644 --- a/ui/qt/capture_file_properties_dialog.cpp +++ b/ui/qt/capture_file_properties_dialog.cpp @@ -16,7 +16,7 @@ #include "wsutil/str_util.h" #include "wsutil/utf8_entities.h" -#include "version_info.h" +#include "ui/version_info.h" #include <ui/qt/utils/qt_ui_utils.h> #include "wireshark_application.h" diff --git a/ui/qt/follow_stream_dialog.cpp b/ui/qt/follow_stream_dialog.cpp index e64bd5427b..4e36e09ea5 100644 --- a/ui/qt/follow_stream_dialog.cpp +++ b/ui/qt/follow_stream_dialog.cpp @@ -33,7 +33,7 @@ #include "wsutil/file_util.h" #include "wsutil/str_util.h" -#include "version_info.h" +#include "ui/version_info.h" #include "ws_symbol_export.h" diff --git a/ui/qt/main.cpp b/ui/qt/main.cpp index 43b9b34ac1..975c0e21b5 100644 --- a/ui/qt/main.cpp +++ b/ui/qt/main.cpp @@ -48,7 +48,7 @@ #include <wsutil/report_message.h> #include <wsutil/please_report_bug.h> #include <wsutil/unicode-utils.h> -#include <version_info.h> +#include <ui/version_info.h> #include <epan/addr_resolv.h> #include <epan/ex-opt.h> diff --git a/ui/qt/main_window.cpp b/ui/qt/main_window.cpp index 34ccf03ebd..6ff429918a 100644 --- a/ui/qt/main_window.cpp +++ b/ui/qt/main_window.cpp @@ -23,7 +23,7 @@ DIAG_ON(frame-larger-than=) #include <wsutil/filesystem.h> #include <wsutil/wslog.h> #include <wsutil/ws_assert.h> -#include <version_info.h> +#include <ui/version_info.h> #include <epan/prefs.h> #include <epan/stats_tree_priv.h> #include <epan/plugin_if.h> diff --git a/ui/qt/welcome_page.cpp b/ui/qt/welcome_page.cpp index 059a57334d..8631423ce4 100644 --- a/ui/qt/welcome_page.cpp +++ b/ui/qt/welcome_page.cpp @@ -16,7 +16,7 @@ #include "ui/capture_globals.h" #include "ui/urls.h" -#include "version_info.h" +#include "ui/version_info.h" #include "welcome_page.h" #include <ui_welcome_page.h> diff --git a/ui/tap_export_pdu.c b/ui/tap_export_pdu.c index 98190a8e2e..850148ca55 100644 --- a/ui/tap_export_pdu.c +++ b/ui/tap_export_pdu.c @@ -18,7 +18,7 @@ #include <wsutil/os_version_info.h> #include <wsutil/report_message.h> -#include "version_info.h" +#include "ui/version_info.h" #include "tap_export_pdu.h" diff --git a/ui/version_info.c b/ui/version_info.c new file mode 100644 index 0000000000..b7e60cc381 --- /dev/null +++ b/ui/version_info.c @@ -0,0 +1,547 @@ +/* version_info.c + * Routines to report version information for Wireshark programs + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <locale.h> + +#ifdef _WIN32 +#include <windows.h> +#elif __APPLE__ +#include <sys/types.h> +#include <sys/sysctl.h> +#elif __linux__ +#include <sys/sysinfo.h> +#endif + +#include <glib.h> + +#ifdef HAVE_ZLIB +#include <zlib.h> +#endif + +#include "version.h" + +#include "version_info.h" + +#include <wsutil/cpu_info.h> +#include <wsutil/copyright_info.h> +#include <wsutil/os_version_info.h> +#include <wsutil/crash_info.h> +#include <wsutil/plugins.h> + +static char *appname_with_version; +static char *comp_info; +static char *runtime_info; + +static void get_compiler_info(GString *str); + +void +ws_init_version_info(const char *appname, + void (*prepend_compile_time_info)(GString *), + void (*append_compile_time_info)(GString *), + void (*additional_run_time_info)(GString *)) +{ + GString *comp_info_str, *runtime_info_str; + + /* + * Combine the supplied application name string with the + * version - including the VCS version, for a build from + * a checkout. + */ + appname_with_version = g_strdup_printf("%s %s", + appname, get_ws_vcs_version_info()); + + /* Get the compile-time version information string */ + comp_info_str = get_compiled_version_info(prepend_compile_time_info, + append_compile_time_info); + + /* Get the run-time version information string */ + runtime_info_str = get_runtime_version_info(additional_run_time_info); + + comp_info = g_string_free(comp_info_str, FALSE); + runtime_info = g_string_free(runtime_info_str, FALSE); + + /* Add this information to the information to be reported on a crash. */ + ws_add_crash_info("%s\n" + "\n" + "%s\n" + "%s", + appname_with_version, comp_info, runtime_info); +} + +const char * +get_appname_and_version(void) +{ + return appname_with_version; +} + +/* + * If the string doesn't end with a newline, append one. + * Then word-wrap it to 80 columns. + */ +static void +end_string(GString *str) +{ + size_t point; + char *p, *q; + + point = str->len; + if (point == 0 || str->str[point - 1] != '\n') + g_string_append(str, "\n"); + p = str->str; + while (*p != '\0') { + q = strchr(p, '\n'); + if (q - p > 80) { + /* + * Break at or before this point. + */ + q = p + 80; + while (q > p && *q != ' ') + q--; + if (q != p) + *q = '\n'; + } + p = q + 1; + } +} + +static const gchar * +get_zlib_compiled_version_info(void) +{ +#ifdef HAVE_ZLIB +#ifdef ZLIB_VERSION + return "with zlib "ZLIB_VERSION; +#else + return "with zlib (version unknown)"; +#endif /* ZLIB_VERSION */ +#else + return "without zlib"; +#endif /* HAVE_ZLIB */ +} + +/* + * Get various library compile-time versions, put them in a GString, + * and return the GString. + * + * "prepend_info" is called at the start to prepend any additional + * information before the standard library information. + * + * "append_info" is called at the end to append any additional + * information after the standard library information. This is + * required in order to, for example, put Qt information at the + * end of the string, as we don't use Qt in TShark. + */ +GString * +get_compiled_version_info(void (*prepend_info)(GString *), + void (*append_info)(GString *)) +{ + GString *str; + + str = g_string_new("Compiled "); + + if (sizeof(str) == 4) + g_string_append(str, "(32-bit) "); + else + g_string_append(str, "(64-bit) "); + + /* Compiler info */ + g_string_append(str, "using "); + get_compiler_info(str); + g_string_append(str, ", "); + + if (prepend_info) { + (*prepend_info)(str); + g_string_append(str, ", "); + } + + /* GLIB */ + g_string_append(str, "with "); + g_string_append_printf(str, +#ifdef GLIB_MAJOR_VERSION + "GLib %d.%d.%d", GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, + GLIB_MICRO_VERSION); +#else + "GLib (version unknown)"); +#endif + + g_string_append_printf(str, ", %s", get_zlib_compiled_version_info()); + + /* Additional application-dependent information */ + if (append_info) + (*append_info)(str); + +#ifdef WS_DISABLE_ASSERT + g_string_append(str, ", without assertions"); +#endif + + g_string_append(str, "."); + + end_string(str); + + return str; +} + +static void +get_mem_info(GString *str) +{ + gint64 memsize = 0; + +#ifdef _WIN32 + MEMORYSTATUSEX statex; + + statex.dwLength = sizeof (statex); + + if (GlobalMemoryStatusEx(&statex)) + memsize = statex.ullTotalPhys; +#elif __APPLE__ + size_t len = sizeof(memsize); + sysctlbyname("hw.memsize", &memsize, &len, NULL, 0); +#elif __linux__ + struct sysinfo info; + if (sysinfo(&info) == 0) + memsize = info.totalram * info.mem_unit; +#endif + + if (memsize > 0) + g_string_append_printf(str, ", with ""%" G_GINT64_MODIFIER "d" " MB of physical memory", memsize/(1024*1024)); +} + +/* + * Get compiler information, and append it to the GString. + */ +static void +get_compiler_info(GString *str) +{ + /* + * See https://sourceforge.net/apps/mediawiki/predef/index.php?title=Compilers + * information on various defined strings. + * + * GCC's __VERSION__ is a nice text string for humans to + * read. The page at sourceforge.net largely describes + * numeric #defines that encode the version; if the compiler + * doesn't also offer a nice printable string, we try prettifying + * the number somehow. + */ + #if defined(_MSC_FULL_VER) + /* + * We check for this first, as Microsoft have a version of their + * compiler that has Clang as the front end and their code generator + * as the back end. + * + * My head asplode. + */ + + /* As of Wireshark 3.0, we support only Visual Studio 2015 (14.x) + * or later. + * + * https://dev.to/yumetodo/list-of-mscver-and-mscfullver-8nd + * has a *large* table of Microsoft product names, VC++ versions, + * _MSC_VER values, and _MSC_FULL_VER values. All the versions + * we support define _MSC_FULL_VER. We don't bother trying to + * get the SP/update/version number from the build number, as + * we'd have to keep updating that with every update; there's no + * way to get that information directly from a predefine, and in + * some cases multiple updates/versions have the *same* build + * number (because they didn't update the toolchain). + * + * https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=vs-2017 + * defines the format of _MSC_VER and _MSC_FULL_VER. _MSC_FULL_VER + * is a decimal number of the form MMmmBBBBB, where MM is the compiler/ + * toolchain major version, mm is the minor version, and BBBBB is the + * build. We break it down based on that. + */ + #define COMPILER_MAJOR_VERSION (_MSC_FULL_VER / 10000000) + #define COMPILER_MINOR_VERSION ((_MSC_FULL_VER % 10000000) / 100000) + #define COMPILER_BUILD_NUMBER (_MSC_FULL_VER % 100000) + + /* + * From https://web.archive.org/web/20190125151548/https://blogs.msdn.microsoft.com/vcblog/2014/11/17/c111417-features-in-vs-2015-preview/ + * Bakersfield: DevDiv's upper management determines the scheduling + * of new major versions. They also decided to increment the product + * version from 12 (for VS 2013) to 14 (for VS 2015). However, the + * C++ compiler's version incremented normally, from 18 to 19. + * (It's larger because the C++ compiler predates the "Visual" in + * Visual C++.) + * + * So the product version number is 5 less than the compiler version + * number. + */ + #define VCPP_MAJOR_VERSION (COMPILER_MAJOR_VERSION - 5) + + #if VCPP_MAJOR_VERSION == 14 + /* + * From https://devblogs.microsoft.com/cppblog/side-by-side-minor-version-msvc-toolsets-in-visual-studio-2017/ + * + * We've been delivering improvements to Visual Studio 2017 more + * frequently than ever before. Since its first release in March + * we've released four major updates to VS2017 and are currently + * previewing the fifth update, VS2017 version 15.5. + * + * The MSVC toolset in VS2017 is built as a minor version update to + * the VS2015 compiler toolset. This minor version bump indicates + * that the VS2017 MSVC toolset is binary compatible with the VS2015 + * MSVC toolset, enabling an easier upgrade for VS2015 users. Even + * though the MSVC compiler toolset in VS2017 delivers many new + * features and conformance improvements it is a minor version, + * compatible update from 14.00 in VS2015 to 14.10 in VS2017. + */ + #if COMPILER_MINOR_VERSION < 10 + #define VS_VERSION "2015" + #elif COMPILER_MINOR_VERSION < 20 + #define VS_VERSION "2017" + #else + #define VS_VERSION "2019" + #endif + #else + /* + * Add additional checks here, before the #else. + */ + #define VS_VERSION "(unknown)" + #endif /* VCPP_MAJOR_VERSION */ + + /* + * XXX - should we show the raw compiler version number, as is + * shown by "cl /?", which would be %d.%d.%d.%d with + * COMPILER_MAJOR_VERSION, COMPILER_MINOR_VERSION, + * COMPILER_BUILD_NUMBER, and _MSC_BUILD, the last of which is + * "the revision number element of the compiler's version number", + * which I guess is not to be confused with the build number, + * the _BUILD in the name nonwithstanding. + */ + g_string_append_printf(str, "Microsoft Visual Studio " VS_VERSION " (VC++ %d.%d, build %d)", + VCPP_MAJOR_VERSION, COMPILER_MINOR_VERSION, COMPILER_BUILD_NUMBER); + #if defined(__clang__) + /* + * See above. + */ + g_string_append_printf(str, " clang/C2 %s and -fno-ms-compatibility", + __VERSION__); + #endif + #elif defined(__GNUC__) && defined(__VERSION__) + /* + * Clang and llvm-gcc also define __GNUC__ and __VERSION__; + * distinguish between them. + */ + #if defined(__clang__) + /* clang */ + gchar *version; /* clang's version string has a trailing space. */ + #if defined(__clang_version__) + version = g_strdup(__clang_version__); + g_string_append_printf(str, "Clang %s", g_strstrip(version)); + #else + version = g_strdup(__VERSION__); + g_string_append_printf(str, "%s", g_strstrip(version)); + #endif /* __clang_version__ */ + g_free(version); + #elif defined(__llvm__) + /* llvm-gcc */ + g_string_append_printf(str, "llvm-gcc %s", __VERSION__); + #else + /* boring old GCC */ + g_string_append_printf(str, "GCC %s", __VERSION__); + #endif + #elif defined(__HP_aCC) + g_string_append_printf(str, "HP aCC %d", __HP_aCC); + #elif defined(__xlC__) + g_string_append_printf(str, "IBM XL C %d.%d", + (__xlC__ >> 8) & 0xFF, __xlC__ & 0xFF); + #ifdef __IBMC__ + if ((__IBMC__ % 10) != 0) + g_string_append_printf(str, " patch %d", __IBMC__ % 10); + #endif /* __IBMC__ */ + #elif defined(__INTEL_COMPILER) + g_string_append_printf(str, "Intel C %d.%d", + __INTEL_COMPILER / 100, (__INTEL_COMPILER / 10) % 10); + if ((__INTEL_COMPILER % 10) != 0) + g_string_append_printf(str, " patch %d", __INTEL_COMPILER % 10); + #ifdef __INTEL_COMPILER_BUILD_DATE + g_string_sprinta(str, ", compiler built %04d-%02d-%02d", + __INTEL_COMPILER_BUILD_DATE / 10000, + (__INTEL_COMPILER_BUILD_DATE / 100) % 100, + __INTEL_COMPILER_BUILD_DATE % 100); + #endif /* __INTEL_COMPILER_BUILD_DATE */ + #elif defined(__SUNPRO_C) + g_string_append_printf(str, "Sun C %d.%d", + (__SUNPRO_C >> 8) & 0xF, (__SUNPRO_C >> 4) & 0xF); + if ((__SUNPRO_C & 0xF) != 0) + g_string_append_printf(str, " patch %d", __SUNPRO_C & 0xF); + #else + g_string_append(str, "unknown compiler"); + #endif +} + +/* XXX - is the setlocale() return string opaque? For glibc the separator is ';' */ +static gchar * +get_locale(void) +{ + const gchar *lang; + gchar **locv, *loc; + + lang = setlocale(LC_ALL, NULL); + if (lang == NULL) { + return NULL; + } + + locv = g_strsplit(lang, ";", -1); + loc = g_strjoinv(", ", locv); + g_strfreev(locv); + return loc; +} + +/* + * Get various library run-time versions, and the OS version, and append + * them to the specified GString. + * + * "additional_info" is called at the end to append any additional + * information; this is required in order to, for example, put the + * libcap information at the end of the string, as we currently + * don't use libcap in TShark. + */ +GString * +get_runtime_version_info(void (*additional_info)(GString *)) +{ + GString *str; + gchar *lang; + + str = g_string_new("Running on "); + + get_os_version_info(str); + + /* CPU Info */ + get_cpu_info(str); + + /* Get info about installed memory */ + get_mem_info(str); + + /* GLib */ + g_string_append_printf(str, ", with GLib %u.%u.%u", + glib_major_version, glib_minor_version, glib_micro_version); + + /* zlib */ +#if defined(HAVE_ZLIB) && !defined(_WIN32) + g_string_append_printf(str, ", with zlib %s", zlibVersion()); +#endif + + /* Additional application-dependent information */ + if (additional_info) + (*additional_info)(str); + + /* + * Locale. + * + * This returns the C language's locale information; this + * returns the locale that's actually in effect, even if + * it doesn't happen to match the settings of any of the + * locale environment variables. + * + * On Windows get_locale returns the full language, country + * name, and code page, e.g. "English_United States.1252": + * https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/setlocale-wsetlocale?view=vs-2019 + */ + if ((lang = get_locale()) != NULL) { + g_string_append_printf(str, ", with locale %s", lang); + g_free(lang); + } + else { + g_string_append(str, ", with default locale"); + } + + /* plugins */ +#ifdef HAVE_PLUGINS + if (g_module_supported()) { + g_string_append_printf(str, ", binary plugins supported (%d loaded)", plugins_get_count()); + } + else { + g_string_append(str, ", binary plugins not supported by the platform"); + } +#else + g_string_append(str, ", built without support for binary plugins"); +#endif + + g_string_append(str, "."); + + end_string(str); + + return str; +} + +/* + * Return a version number string for Wireshark, including, for builds + * from a tree checked out from Wireshark's version control system, + * something identifying what version was checked out. + */ +const char * +get_ws_vcs_version_info(void) +{ +#ifdef VCSVERSION + return VERSION " (" VCSVERSION ")"; +#else + return VERSION; +#endif +} + +const char * +get_ws_vcs_version_info_short(void) +{ +#ifdef VCSVERSION + return VCSVERSION; +#else + return VERSION; +#endif +} + +void +get_ws_version_number(int *major, int *minor, int *micro) +{ + if (major) + *major = VERSION_MAJOR; + if (minor) + *minor = VERSION_MINOR; + if (micro) + *micro = VERSION_MICRO; +} + +void +show_version(void) +{ + printf("%s\n" + "\n" + "%s\n" + "%s\n" + "%s", + appname_with_version, get_copyright_info(), + comp_info, runtime_info); +} + +void +show_help_header(const char *description) +{ + printf("%s\n" + "%s\n" + "See https://www.wireshark.org for more information.\n", + appname_with_version, description); +} + +/* + * Editor modelines - https://www.wireshark.org/tools/modelines.html + * + * Local variables: + * c-basic-offset: 8 + * tab-width: 8 + * indent-tabs-mode: t + * End: + * + * vi: set shiftwidth=8 tabstop=8 noexpandtab: + * :indentSize=8:tabSize=8:noTabs=false: + */ diff --git a/ui/version_info.h b/ui/version_info.h new file mode 100644 index 0000000000..d16bb3cfbf --- /dev/null +++ b/ui/version_info.h @@ -0,0 +1,117 @@ +/* version_info.h + * Declarations of routines to report version information for Wireshark + * programs + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef __WS_VERSION_INFO_H__ +#define __WS_VERSION_INFO_H__ + +#include <glib.h> + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* + * Initialize information about the program for various purposes, including + * reporting the version and build information for the program, putting + * that information into crash dumps if possible, and giving the program + * name and version information into capture files written by the program + * if possible. + * + * "appname" is a string that appears at the beginning of the information; + * it should include the application name, followed by "(Wireshark)" if + * the program isn't Wireshark. + * + * "prepend_compile_time_info" is called at the start to prepend any + * additional build information before the standard library information. + * + * "append_compile_time_info" is called at the end to append any additional + * build information after the standard library information. This is + * required in order to, for example, put Qt information at the + * end of the string, as we don't use Qt in TShark. + * + * "additional_info" is called at the end to append any additional + * run-time information; this is required in order to, for example, + * put the libcap information at the end of the string, as we currently + * don't use libcap in TShark. + */ +void ws_init_version_info(const char *appname, + void (*prepend_compile_time_info)(GString *), + void (*append_compile_time_info)(GString *), + void (*additional_run_time_info)(GString *)); + +/* + * Get a string giving the application name, as provided to + * ws_init_version_info(), followed by a string giving the + * application version. + */ +const char *get_appname_and_version(void); + +/* + * Get various library compile-time versions, put them in a GString, + * and return the GString. + * + * "prepend_info" is called at the start to prepend any additional + * information before the standard library information. + * + * "append_info" is called at the end to append any additional + * information after the standard library information. This is + * required in order to, for example, put Qt information at the + * end of the string, as we don't use Qt in TShark. + */ +GString *get_compiled_version_info(void (*prepend_info)(GString *), + void (*append_info)(GString *)); + +/* + * Get various library run-time versions, and the OS version, put them in + * a GString, and return the GString. + * + * "additional_info" is called at the end to append any additional + * information; this is required in order to, for example, put the + * libcap information at the end of the string, as we currently + * don't use libcap in TShark. + */ +GString *get_runtime_version_info(void (*additional_info)(GString *)); + +/* + * Return a version number string for Wireshark, including, for builds + * from a tree checked out from Wireshark's version control system, + * something identifying what version was checked out. + */ +const char *get_ws_vcs_version_info(void); + +/* + * Shorter version of get_ws_vcs_version_info(). + */ +const char *get_ws_vcs_version_info_short(void); + +/* + * Return version number as integers. + */ +void get_ws_version_number(int *major, int *minor, int *micro); + +/* + * Show the program name and version number information on the standard + * output; this is used for command-line "show the version" options. + */ +void show_version(void); + +/* + * Show the program name and version number information, a supplied + * description string, and a "See {URL} for more information" message. + * This is used for command-line "help" options. + */ +void show_help_header(const char *description); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __WS_VERSION_INFO_H__ */ |