Skip to content
This repository has been archived by the owner on Apr 19, 2024. It is now read-only.

Commit

Permalink
Include 'build info' in all --version text and About boxes.
Browse files Browse the repository at this point in the history
This shows the build platform (32- vs 64-bit in particular, and also
whether Unix GTK builds were compiled with or without the X11 pieces),
what compiler was used to build the binary, and any interesting build
options that might have been set on the make command line (especially,
but not limited to, the security-damaging ones like NO_SECURITY or
UNPROTECT). This will probably be useful all over the place, but in
particular it should allow the different Windows binaries to be told
apart!

Commits 21101c7 and 2eb952c laid the groundwork for this, by
allowing the various About boxes to contain free text and also
ensuring they could be copied and pasted easily as part of a bug
report.
  • Loading branch information
sgtatham committed Jan 21, 2017
1 parent 960ad59 commit 7e14730
Show file tree
Hide file tree
Showing 18 changed files with 127 additions and 28 deletions.
4 changes: 3 additions & 1 deletion cmdgen.c
Expand Up @@ -129,7 +129,9 @@ void sk_cleanup(void)

void showversion(void)
{
printf("puttygen: %s\n", ver);
char *buildinfo_text = buildinfo("\n");
printf("puttygen: %s\n%s", ver, buildinfo_text);
sfree(buildinfo_text);
}

void usage(int standalone)
Expand Down
62 changes: 62 additions & 0 deletions misc.c
Expand Up @@ -1147,3 +1147,65 @@ int strendswith(const char *s, const char *t)
size_t slen = strlen(s), tlen = strlen(t);
return slen >= tlen && !strcmp(s + (slen - tlen), t);
}

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__
strbuf_catf(buf, "%sCompiler: clang %s", newline, __clang_version__);
#elif defined __GNUC__ && defined __VERSION__
strbuf_catf(buf, "%sCompiler: gcc %s", newline, __VERSION__);
#elif defined _MSC_VER
strbuf_catf(buf, "%sCompiler: Visual Studio", newline);
#if _MSC_VER == 1900
strbuf_catf(buf, " 2015 / MSVC++ 14.0");
#elif _MSC_VER == 1800
strbuf_catf(buf, " 2013 / MSVC++ 12.0");
#elif _MSC_VER == 1700
strbuf_catf(buf, " 2012 / MSVC++ 11.0");
#elif _MSC_VER == 1600
strbuf_catf(buf, " 2010 / MSVC++ 10.0");
#elif _MSC_VER == 1500
strbuf_catf(buf, " 2008 / MSVC++ 9.0");
#elif _MSC_VER == 1400
strbuf_catf(buf, " 2005 / MSVC++ 8.0");
#elif _MSC_VER == 1310
strbuf_catf(buf, " 2003 / MSVC++ 7.1");
#else
strbuf_catf(buf, ", unrecognised version");
#endif
strbuf_catf(buf, " (_MSC_VER=%d)", (int)_MSC_VER);
#endif

#ifdef NO_SECURITY
strbuf_catf(buf, "%sBuild option: NO_SECURITY", newline);
#endif
#ifdef NO_SECUREZEROMEMORY
strbuf_catf(buf, "%sBuild option: NO_SECUREZEROMEMORY", 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

return strbuf_to_str(buf);
}
2 changes: 2 additions & 0 deletions misc.h
Expand Up @@ -118,6 +118,8 @@ int get_ssh_uint32(int *datalen, const void **data, unsigned *ret);
* form, check if it equals an ordinary C zero-terminated string. */
int match_ssh_id(int stringlen, const void *string, const char *id);

char *buildinfo(const char *newline);

/*
* Debugging functions.
*
Expand Down
4 changes: 3 additions & 1 deletion pscp.c
Expand Up @@ -2263,7 +2263,9 @@ static void usage(void)

void version(void)
{
printf("pscp: %s\n", ver);
char *buildinfo_text = buildinfo("\n");
printf("pscp: %s\n%s\n", ver, buildinfo_text);
sfree(buildinfo_text);
cleanup_exit(1);
}

Expand Down
4 changes: 3 additions & 1 deletion psftp.c
Expand Up @@ -2665,7 +2665,9 @@ static void usage(void)

static void version(void)
{
printf("psftp: %s\n", ver);
char *buildinfo_text = buildinfo("\n");
printf("psftp: %s\n%s\n", ver, buildinfo_text);
sfree(buildinfo_text);
cleanup_exit(1);
}

Expand Down
5 changes: 3 additions & 2 deletions unix/gtkdlg.c
Expand Up @@ -3701,9 +3701,10 @@ void about_box(void *window)
gtk_widget_show(w);

{
char *buildinfo_text = buildinfo("\n");
char *label_text = dupprintf
("%s\n\n%s\n\n%s",
appname, ver,
("%s\n\n%s\n\n%s\n\n%s",
appname, ver, buildinfo_text,
"Copyright " SHORT_COPYRIGHT_DETAILS ". All rights reserved");
w = gtk_label_new(label_text);
gtk_label_set_justify(GTK_LABEL(w), GTK_JUSTIFY_CENTER);
Expand Down
5 changes: 4 additions & 1 deletion unix/gtkmain.c
Expand Up @@ -287,10 +287,13 @@ static void help(FILE *fp) {
}

static void version(FILE *fp) {
if(fprintf(fp, "%s: %s\n", appname, ver) < 0 || fflush(fp) < 0) {
char *buildinfo_text = buildinfo("\n");
if(fprintf(fp, "%s: %s\n%s\n", appname, ver, buildinfo_text) < 0 ||
fflush(fp) < 0) {
perror("output error");
exit(1);
}
sfree(buildinfo_text);
}

static struct gui_data *the_inst;
Expand Down
11 changes: 11 additions & 0 deletions unix/unix.h
Expand Up @@ -30,6 +30,17 @@
#define META_MANUAL_MASK (GDK_MOD1_MASK)
#define JUST_USE_GTK_CLIPBOARD_UTF8 /* low-level gdk_selection_* fails */
#define DEFAULT_CLIPBOARD GDK_SELECTION_CLIPBOARD /* OS X has no PRIMARY */

#define BUILDINFO_PLATFORM "OS X (GTK)"

#elif defined NOT_X_WINDOWS

#define BUILDINFO_PLATFORM "Unix (pure GTK)"

#else

#define BUILDINFO_PLATFORM "Unix (GTK + X11)"

#endif

struct Filename {
Expand Down
4 changes: 3 additions & 1 deletion unix/uxpgnt.c
Expand Up @@ -141,7 +141,9 @@ static void usage(void)

static void version(void)
{
printf("pageant: %s\n", ver);
char *buildinfo_text = buildinfo("\n");
printf("pageant: %s\n%s\n", ver, buildinfo_text);
sfree(buildinfo_text);
exit(1);
}

Expand Down
4 changes: 3 additions & 1 deletion unix/uxplink.c
Expand Up @@ -594,7 +594,9 @@ static void usage(void)

static void version(void)
{
printf("plink: %s\n", ver);
char *buildinfo_text = buildinfo("\n");
printf("plink: %s\n%s\n", ver, buildinfo_text);
sfree(buildinfo_text);
exit(1);
}

Expand Down
8 changes: 4 additions & 4 deletions windows/pageant.rc
Expand Up @@ -36,14 +36,14 @@ BEGIN
END

/* Accelerators used: cl */
213 DIALOG DISCARDABLE 140, 40, 214, 74
213 DIALOG DISCARDABLE 140, 40, 214, 90
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About Pageant"
FONT 8, "MS Shell Dlg"
BEGIN
DEFPUSHBUTTON "&Close", IDOK, 160, 56, 48, 14
PUSHBUTTON "View &Licence", 101, 6, 56, 70, 14
EDITTEXT 1000, 10, 6, 194, 48, ES_READONLY | ES_MULTILINE | ES_CENTER, WS_EX_STATICEDGE
DEFPUSHBUTTON "&Close", IDOK, 160, 72, 48, 14
PUSHBUTTON "View &Licence", 101, 6, 72, 70, 14
EDITTEXT 1000, 10, 6, 194, 64, ES_READONLY | ES_MULTILINE | ES_CENTER, WS_EX_STATICEDGE
END

/* No accelerators used */
Expand Down
8 changes: 4 additions & 4 deletions windows/puttygen.rc
Expand Up @@ -29,14 +29,14 @@ BEGIN
END

/* Accelerators used: cl */
213 DIALOG DISCARDABLE 140, 40, 214, 74
213 DIALOG DISCARDABLE 140, 40, 214, 90
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About PuTTYgen"
FONT 8, "MS Shell Dlg"
BEGIN
DEFPUSHBUTTON "&Close", IDOK, 160, 56, 48, 14
PUSHBUTTON "View &Licence", 101, 6, 56, 70, 14
EDITTEXT 1000, 10, 6, 194, 48, ES_READONLY | ES_MULTILINE | ES_CENTER, WS_EX_STATICEDGE
DEFPUSHBUTTON "&Close", IDOK, 160, 72, 48, 14
PUSHBUTTON "View &Licence", 101, 6, 72, 70, 14
EDITTEXT 1000, 10, 6, 194, 64, ES_READONLY | ES_MULTILINE | ES_CENTER, WS_EX_STATICEDGE
END

/* No accelerators used */
Expand Down
10 changes: 5 additions & 5 deletions windows/win_res.rc2
Expand Up @@ -16,15 +16,15 @@ IDI_MAINICON ICON "putty.ico"
IDI_CFGICON ICON "puttycfg.ico"

/* Accelerators used: clw */
IDD_ABOUTBOX DIALOG DISCARDABLE 140, 40, 214, 74
IDD_ABOUTBOX DIALOG DISCARDABLE 140, 40, 270, 106
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "About PuTTY"
FONT 8, "MS Shell Dlg"
BEGIN
DEFPUSHBUTTON "&Close", IDOK, 160, 56, 48, 14
PUSHBUTTON "View &Licence", IDA_LICENCE, 6, 56, 70, 14
PUSHBUTTON "Visit &Web Site", IDA_WEB, 84, 56, 70, 14
EDITTEXT IDA_TEXT, 10, 6, 194, 48, ES_READONLY | ES_MULTILINE | ES_CENTER, WS_EX_STATICEDGE
DEFPUSHBUTTON "&Close", IDOK, 216, 88, 48, 14
PUSHBUTTON "View &Licence", IDA_LICENCE, 6, 88, 70, 14
PUSHBUTTON "Visit &Web Site", IDA_WEB, 140, 88, 70, 14
EDITTEXT IDA_TEXT, 10, 6, 250, 80, ES_READONLY | ES_MULTILINE | ES_CENTER, WS_EX_STATICEDGE
END

/* Accelerators used: aco */
Expand Down
6 changes: 4 additions & 2 deletions windows/windlg.c
Expand Up @@ -200,10 +200,12 @@ static INT_PTR CALLBACK AboutProc(HWND hwnd, UINT msg,
SetWindowText(hwnd, str);
sfree(str);
{
char *buildinfo_text = buildinfo("\r\n");
char *text = dupprintf
("%s\r\n\r\n%s\r\n\r\n%s",
appname, ver,
("%s\r\n\r\n%s\r\n\r\n%s\r\n\r\n%s",
appname, ver, buildinfo_text,
"\251 " SHORT_COPYRIGHT_DETAILS ". All rights reserved.");
sfree(buildinfo_text);
SetDlgItemText(hwnd, IDA_TEXT, text);
sfree(text);
}
Expand Down
6 changes: 4 additions & 2 deletions windows/winpgen.c
Expand Up @@ -297,10 +297,12 @@ static INT_PTR CALLBACK AboutProc(HWND hwnd, UINT msg,
}

{
char *buildinfo_text = buildinfo("\r\n");
char *text = dupprintf
("PuTTYgen\r\n\r\n%s\r\n\r\n%s",
ver,
("PuTTYgen\r\n\r\n%s\r\n\r\n%s\r\n\r\n%s",
ver, buildinfo_text,
"\251 " SHORT_COPYRIGHT_DETAILS ". All rights reserved.");
sfree(buildinfo_text);
SetDlgItemText(hwnd, 1000, text);
sfree(text);
}
Expand Down
6 changes: 4 additions & 2 deletions windows/winpgnt.c
Expand Up @@ -152,10 +152,12 @@ static INT_PTR CALLBACK AboutProc(HWND hwnd, UINT msg,
switch (msg) {
case WM_INITDIALOG:
{
char *buildinfo_text = buildinfo("\r\n");
char *text = dupprintf
("Pageant\r\n\r\n%s\r\n\r\n%s",
ver,
("Pageant\r\n\r\n%s\r\n\r\n%s\r\n\r\n%s",
ver, buildinfo_text,
"\251 " SHORT_COPYRIGHT_DETAILS ". All rights reserved.");
sfree(buildinfo_text);
SetDlgItemText(hwnd, 1000, text);
sfree(text);
}
Expand Down
4 changes: 3 additions & 1 deletion windows/winplink.c
Expand Up @@ -223,7 +223,9 @@ static void usage(void)

static void version(void)
{
printf("plink: %s\n", ver);
char *buildinfo_text = buildinfo("\n");
printf("plink: %s\n%s\n", ver, buildinfo_text);
sfree(buildinfo_text);
exit(1);
}

Expand Down
2 changes: 2 additions & 0 deletions windows/winstuff.h
Expand Up @@ -27,6 +27,8 @@

#include "winhelp.h"

#define BUILDINFO_PLATFORM "Windows"

struct Filename {
char *path;
};
Expand Down

0 comments on commit 7e14730

Please sign in to comment.