summaryrefslogtreecommitdiffstats
path: root/src/inkscape-version-info.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/inkscape-version-info.cpp')
-rw-r--r--src/inkscape-version-info.cpp118
1 files changed, 118 insertions, 0 deletions
diff --git a/src/inkscape-version-info.cpp b/src/inkscape-version-info.cpp
new file mode 100644
index 0000000..5df892c
--- /dev/null
+++ b/src/inkscape-version-info.cpp
@@ -0,0 +1,118 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/** @file
+ * Consolidates version info for Inkscape,
+ * its various dependencies and the OS we're running on
+ *//*
+ * Authors:
+ * Patrick Storz <eduard.braun2@gmx.de>
+ *
+ * Copyright (C) 2021 Authors
+ * Released under GNU GPL v2+, read the file 'COPYING' for more information.
+ */
+
+
+#include <ostream>
+#include <string>
+
+#include <hb.h> // not indirectly included via gtk.h on macOS
+#include <glib.h>
+#include <glibmm.h>
+#include <gtk/gtk.h>
+#include <gtkmm.h>
+#include <libxml2/libxml/xmlversion.h>
+#include <libxslt/xsltconfig.h>
+
+#ifdef HAVE_POPPLER
+#include <poppler-config.h>
+#endif
+
+#include "inkscape-version.h" // Inkscape version
+
+
+namespace Inkscape {
+
+/**
+ * Return Inkscape version string
+ *
+ * Returns the Inkscape version string including program name.
+ *
+ * @return version string
+ */
+std::string inkscape_version() {
+ return std::string("Inkscape ") + Inkscape::version_string;
+}
+
+/**
+ * Return OS version string
+ *
+ * Returns the OS version string including OS name.
+ *
+ * Relies on glib's 'g_get_os_info'.
+ * Might be undefined on some OSs. "(unknown)" is returned in this case.
+ *
+ * @return version string
+ */
+std::string os_version() {
+ std::string os_version_string = "(unknown)";
+
+#if GLIB_CHECK_VERSION(2,64,0)
+ char *os_name = g_get_os_info(G_OS_INFO_KEY_NAME);
+ char *os_pretty_name = g_get_os_info(G_OS_INFO_KEY_PRETTY_NAME);
+ if (os_pretty_name) {
+ os_version_string = os_pretty_name;
+ } else if (os_name) {
+ os_version_string = os_name;
+ }
+ g_free(os_name);
+ g_free(os_pretty_name);
+#endif
+
+ return os_version_string;
+}
+
+/**
+ * Return full debug info
+ *
+ * Returns full debug info including:
+ * - Inkscape version
+ * - versions of various dependencies
+ * - OS name and version
+ *
+ * @return debug info
+ */
+std::string debug_info() {
+ std::stringstream ss;
+
+ ss << inkscape_version() << std::endl;
+ ss << std::endl;
+ ss << " GLib version: " << glib_major_version << "." << glib_minor_version << "." << glib_micro_version << std::endl;
+ ss << " GTK version: " << gtk_major_version << "." << gtk_minor_version << "." << gtk_micro_version << std::endl;
+ ss << " glibmm version: " << GLIBMM_MAJOR_VERSION << "." << GLIBMM_MINOR_VERSION << "." << GLIBMM_MICRO_VERSION << std::endl;
+ ss << " gtkmm version: " << GTKMM_MAJOR_VERSION << "." << GTKMM_MINOR_VERSION << "." << GTKMM_MICRO_VERSION << std::endl;
+ ss << " libxml2 version: " << LIBXML_DOTTED_VERSION << std::endl;
+ ss << " libxslt version: " << LIBXSLT_DOTTED_VERSION << std::endl;
+ ss << " Cairo version: " << cairo_version_string() << std::endl;
+ ss << " Pango version: " << pango_version_string() << std::endl;
+ ss << " HarfBuzz version: " << hb_version_string() << std::endl;
+#ifdef HAVE_POPPLER
+ ss << " Poppler version: " << POPPLER_VERSION << std::endl;
+#endif
+ ss << std::endl;
+ ss << " OS version: " << os_version();
+
+ return ss.str();
+}
+
+} // namespace Inkscape
+
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace .0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim:filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99: \ No newline at end of file