mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-09 09:27:59 +00:00
156 lines
4.7 KiB
C
156 lines
4.7 KiB
C
|
/*
|
||
|
* 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();
|
||
|
|
||
|
strbuf_catf(buf, "Build platform: %d-bit %s",
|
||
|
(int)(CHAR_BIT * sizeof(void *)),
|
||
|
BUILDINFO_PLATFORM);
|
||
|
|
||
|
#ifdef __clang_version__
|
||
|
#define FOUND_COMPILER
|
||
|
strbuf_catf(buf, "%sCompiler: clang %s", newline, __clang_version__);
|
||
|
#elif defined __GNUC__ && defined __VERSION__
|
||
|
#define FOUND_COMPILER
|
||
|
strbuf_catf(buf, "%sCompiler: gcc %s", newline, __VERSION__);
|
||
|
#endif
|
||
|
|
||
|
#if defined _MSC_VER
|
||
|
#ifndef FOUND_COMPILER
|
||
|
#define FOUND_COMPILER
|
||
|
strbuf_catf(buf, "%sCompiler: ", newline);
|
||
|
#else
|
||
|
strbuf_catf(buf, ", emulating ");
|
||
|
#endif
|
||
|
strbuf_catf(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.
|
||
|
*/
|
||
|
#elif _MSC_VER == 1928 && _MSC_FULL_VER >= 192829500
|
||
|
/*
|
||
|
* 16.9 and 16.8 have the same _MSC_VER value, and have to be
|
||
|
* distinguished by _MSC_FULL_VER. As of 2021-03-04 that is not
|
||
|
* mentioned on the above page, but see e.g.
|
||
|
* https://developercommunity.visualstudio.com/t/the-169-cc-compiler-still-uses-the-same-version-nu/1335194#T-N1337120
|
||
|
* which says that 16.9 builds will have versions starting at
|
||
|
* 19.28.29500.* and going up. Hence, 19 28 29500 is what we
|
||
|
* compare _MSC_FULL_VER against above.
|
||
|
*/
|
||
|
strbuf_catf(buf, " 2019 (16.9)");
|
||
|
#elif _MSC_VER == 1928
|
||
|
strbuf_catf(buf, " 2019 (16.8)");
|
||
|
#elif _MSC_VER == 1927
|
||
|
strbuf_catf(buf, " 2019 (16.7)");
|
||
|
#elif _MSC_VER == 1926
|
||
|
strbuf_catf(buf, " 2019 (16.6)");
|
||
|
#elif _MSC_VER == 1925
|
||
|
strbuf_catf(buf, " 2019 (16.5)");
|
||
|
#elif _MSC_VER == 1924
|
||
|
strbuf_catf(buf, " 2019 (16.4)");
|
||
|
#elif _MSC_VER == 1923
|
||
|
strbuf_catf(buf, " 2019 (16.3)");
|
||
|
#elif _MSC_VER == 1922
|
||
|
strbuf_catf(buf, " 2019 (16.2)");
|
||
|
#elif _MSC_VER == 1921
|
||
|
strbuf_catf(buf, " 2019 (16.1)");
|
||
|
#elif _MSC_VER == 1920
|
||
|
strbuf_catf(buf, " 2019 (16.0)");
|
||
|
#elif _MSC_VER == 1916
|
||
|
strbuf_catf(buf, " 2017 version 15.9");
|
||
|
#elif _MSC_VER == 1915
|
||
|
strbuf_catf(buf, " 2017 version 15.8");
|
||
|
#elif _MSC_VER == 1914
|
||
|
strbuf_catf(buf, " 2017 version 15.7");
|
||
|
#elif _MSC_VER == 1913
|
||
|
strbuf_catf(buf, " 2017 version 15.6");
|
||
|
#elif _MSC_VER == 1912
|
||
|
strbuf_catf(buf, " 2017 version 15.5");
|
||
|
#elif _MSC_VER == 1911
|
||
|
strbuf_catf(buf, " 2017 version 15.3");
|
||
|
#elif _MSC_VER == 1910
|
||
|
strbuf_catf(buf, " 2017 RTW (15.0)");
|
||
|
#elif _MSC_VER == 1900
|
||
|
strbuf_catf(buf, " 2015 (14.0)");
|
||
|
#elif _MSC_VER == 1800
|
||
|
strbuf_catf(buf, " 2013 (12.0)");
|
||
|
#elif _MSC_VER == 1700
|
||
|
strbuf_catf(buf, " 2012 (11.0)");
|
||
|
#elif _MSC_VER == 1600
|
||
|
strbuf_catf(buf, " 2010 (10.0)");
|
||
|
#elif _MSC_VER == 1500
|
||
|
strbuf_catf(buf, " 2008 (9.0)");
|
||
|
#elif _MSC_VER == 1400
|
||
|
strbuf_catf(buf, " 2005 (8.0)");
|
||
|
#elif _MSC_VER == 1310
|
||
|
strbuf_catf(buf, " .NET 2003 (7.1)");
|
||
|
#elif _MSC_VER == 1300
|
||
|
strbuf_catf(buf, " .NET 2002 (7.0)");
|
||
|
#elif _MSC_VER == 1200
|
||
|
strbuf_catf(buf, " 6.0");
|
||
|
#else
|
||
|
strbuf_catf(buf, ", unrecognised version");
|
||
|
#endif
|
||
|
strbuf_catf(buf, ", _MSC_VER=%d", (int)_MSC_VER);
|
||
|
#endif
|
||
|
|
||
|
#ifdef BUILDINFO_GTK
|
||
|
{
|
||
|
char *gtk_buildinfo = buildinfo_gtk_version();
|
||
|
if (gtk_buildinfo) {
|
||
|
strbuf_catf(buf, "%sCompiled against GTK version %s",
|
||
|
newline, gtk_buildinfo);
|
||
|
sfree(gtk_buildinfo);
|
||
|
}
|
||
|
}
|
||
|
#endif
|
||
|
#if defined _WINDOWS
|
||
|
{
|
||
|
int echm = has_embedded_chm();
|
||
|
if (echm >= 0)
|
||
|
strbuf_catf(buf, "%sEmbedded HTML Help file: %s", newline,
|
||
|
echm ? "yes" : "no");
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#if defined _WINDOWS && defined MINEFIELD
|
||
|
strbuf_catf(buf, "%sBuild option: MINEFIELD", newline);
|
||
|
#endif
|
||
|
#ifdef NO_IPV6
|
||
|
strbuf_catf(buf, "%sBuild option: NO_IPV6", newline);
|
||
|
#endif
|
||
|
#ifdef NO_GSSAPI
|
||
|
strbuf_catf(buf, "%sBuild option: NO_GSSAPI", newline);
|
||
|
#endif
|
||
|
#ifdef STATIC_GSSAPI
|
||
|
strbuf_catf(buf, "%sBuild option: STATIC_GSSAPI", newline);
|
||
|
#endif
|
||
|
#ifdef UNPROTECT
|
||
|
strbuf_catf(buf, "%sBuild option: UNPROTECT", newline);
|
||
|
#endif
|
||
|
#ifdef FUZZING
|
||
|
strbuf_catf(buf, "%sBuild option: FUZZING", newline);
|
||
|
#endif
|
||
|
#ifdef DEBUG
|
||
|
strbuf_catf(buf, "%sBuild option: DEBUG", newline);
|
||
|
#endif
|
||
|
|
||
|
strbuf_catf(buf, "%sSource commit: %s", newline, commitid);
|
||
|
|
||
|
return strbuf_to_str(buf);
|
||
|
}
|