Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mRemoteNG/PuTTYNG.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'utils/buildinfo.c')
-rw-r--r--utils/buildinfo.c164
1 files changed, 164 insertions, 0 deletions
diff --git a/utils/buildinfo.c b/utils/buildinfo.c
new file mode 100644
index 00000000..5a837e01
--- /dev/null
+++ b/utils/buildinfo.c
@@ -0,0 +1,164 @@
+/*
+ * Return a string describing everything we know about how this
+ * particular binary was built: from what source, for what target
+ * platform, using what tools, with what settings, etc.
+ */
+
+#include "putty.h"
+
+char *buildinfo(const char *newline)
+{
+ strbuf *buf = strbuf_new();
+
+ put_fmt(buf, "Build platform: %d-bit %s",
+ (int)(CHAR_BIT * sizeof(void *)), BUILDINFO_PLATFORM);
+
+#ifdef __clang_version__
+#define FOUND_COMPILER
+ put_fmt(buf, "%sCompiler: clang %s", newline, __clang_version__);
+#elif defined __GNUC__ && defined __VERSION__
+#define FOUND_COMPILER
+ put_fmt(buf, "%sCompiler: gcc %s", newline, __VERSION__);
+#endif
+
+#if defined _MSC_VER
+#ifndef FOUND_COMPILER
+#define FOUND_COMPILER
+ put_fmt(buf, "%sCompiler: ", newline);
+#else
+ put_fmt(buf, ", emulating ");
+#endif
+ put_fmt(buf, "Visual Studio");
+
+#if 0
+ /*
+ * List of _MSC_VER values and their translations taken from
+ * https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros
+ *
+ * The pointless #if 0 branch containing this comment is there so
+ * that every real clause can start with #elif and there's no
+ * anomalous first clause. That way the patch looks nicer when you
+ * add extra ones.
+ *
+ * Mostly you can tell the version just from _MSC_VER, but in some
+ * cases, two different compiler versions have the same _MSC_VER
+ * value, and have to be distinguished by _MSC_FULL_VER.
+ */
+#elif _MSC_VER == 1933
+ put_fmt(buf, " 2022 (17.3)");
+#elif _MSC_VER == 1932
+ put_fmt(buf, " 2022 (17.2)");
+#elif _MSC_VER == 1931
+ put_fmt(buf, " 2022 (17.1)");
+#elif _MSC_VER == 1930
+ put_fmt(buf, " 2022 (17.0)");
+#elif _MSC_VER == 1929 && _MSC_FULL_VER >= 192930100
+ put_fmt(buf, " 2019 (16.11)");
+#elif _MSC_VER == 1929
+ put_fmt(buf, " 2019 (16.10)");
+#elif _MSC_VER == 1928 && _MSC_FULL_VER >= 192829500
+ put_fmt(buf, " 2019 (16.9)");
+#elif _MSC_VER == 1928
+ put_fmt(buf, " 2019 (16.8)");
+#elif _MSC_VER == 1927
+ put_fmt(buf, " 2019 (16.7)");
+#elif _MSC_VER == 1926
+ put_fmt(buf, " 2019 (16.6)");
+#elif _MSC_VER == 1925
+ put_fmt(buf, " 2019 (16.5)");
+#elif _MSC_VER == 1924
+ put_fmt(buf, " 2019 (16.4)");
+#elif _MSC_VER == 1923
+ put_fmt(buf, " 2019 (16.3)");
+#elif _MSC_VER == 1922
+ put_fmt(buf, " 2019 (16.2)");
+#elif _MSC_VER == 1921
+ put_fmt(buf, " 2019 (16.1)");
+#elif _MSC_VER == 1920
+ put_fmt(buf, " 2019 (16.0)");
+#elif _MSC_VER == 1916
+ put_fmt(buf, " 2017 version 15.9");
+#elif _MSC_VER == 1915
+ put_fmt(buf, " 2017 version 15.8");
+#elif _MSC_VER == 1914
+ put_fmt(buf, " 2017 version 15.7");
+#elif _MSC_VER == 1913
+ put_fmt(buf, " 2017 version 15.6");
+#elif _MSC_VER == 1912
+ put_fmt(buf, " 2017 version 15.5");
+#elif _MSC_VER == 1911
+ put_fmt(buf, " 2017 version 15.3");
+#elif _MSC_VER == 1910
+ put_fmt(buf, " 2017 RTW (15.0)");
+#elif _MSC_VER == 1900
+ put_fmt(buf, " 2015 (14.0)");
+#elif _MSC_VER == 1800
+ put_fmt(buf, " 2013 (12.0)");
+#elif _MSC_VER == 1700
+ put_fmt(buf, " 2012 (11.0)");
+#elif _MSC_VER == 1600
+ put_fmt(buf, " 2010 (10.0)");
+#elif _MSC_VER == 1500
+ put_fmt(buf, " 2008 (9.0)");
+#elif _MSC_VER == 1400
+ put_fmt(buf, " 2005 (8.0)");
+#elif _MSC_VER == 1310
+ put_fmt(buf, " .NET 2003 (7.1)");
+#elif _MSC_VER == 1300
+ put_fmt(buf, " .NET 2002 (7.0)");
+#elif _MSC_VER == 1200
+ put_fmt(buf, " 6.0");
+#else
+ put_fmt(buf, ", unrecognised version");
+#endif
+ put_fmt(buf, ", _MSC_VER=%d", (int)_MSC_VER);
+#ifdef _MSC_FULL_VER
+ put_fmt(buf, ", _MSC_FULL_VER=%d", (int)_MSC_FULL_VER);
+#endif
+#endif
+
+#ifdef BUILDINFO_GTK
+ {
+ char *gtk_buildinfo = buildinfo_gtk_version();
+ if (gtk_buildinfo) {
+ put_fmt(buf, "%sCompiled against GTK version %s",
+ newline, gtk_buildinfo);
+ sfree(gtk_buildinfo);
+ }
+ }
+#endif
+#if defined _WINDOWS
+ {
+ int echm = has_embedded_chm();
+ if (echm >= 0)
+ put_fmt(buf, "%sEmbedded HTML Help file: %s", newline,
+ echm ? "yes" : "no");
+ }
+#endif
+
+#if defined _WINDOWS && defined MINEFIELD
+ put_fmt(buf, "%sBuild option: MINEFIELD", newline);
+#endif
+#ifdef NO_IPV6
+ put_fmt(buf, "%sBuild option: NO_IPV6", newline);
+#endif
+#ifdef NO_GSSAPI
+ put_fmt(buf, "%sBuild option: NO_GSSAPI", newline);
+#endif
+#ifdef STATIC_GSSAPI
+ put_fmt(buf, "%sBuild option: STATIC_GSSAPI", newline);
+#endif
+#ifdef UNPROTECT
+ put_fmt(buf, "%sBuild option: UNPROTECT", newline);
+#endif
+#ifdef FUZZING
+ put_fmt(buf, "%sBuild option: FUZZING", newline);
+#endif
+#ifdef DEBUG
+ put_fmt(buf, "%sBuild option: DEBUG", newline);
+#endif
+
+ put_fmt(buf, "%sSource commit: %s", newline, commitid);
+
+ return strbuf_to_str(buf);
+}