forked from github/putty
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuildinfo.c
154 lines (144 loc) · 4.46 KB
/
buildinfo.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/*
* 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.
*/
#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.
*/
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);
#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);
}