bugreport: add compiler info

To help pinpoint the source of a regression, it is useful to know some
info about the compiler which the user's Git client was built with. By
adding a generic get_compiler_info() in 'compat/' we can choose which
relevant information to share per compiler; to get started, let's
demonstrate the version of glibc if the user built with 'gcc'.

Signed-off-by: Emily Shaffer <emilyshaffer@google.com>
Helped-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
Helped-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Emily Shaffer 2020-04-16 14:18:07 -07:00 committed by Junio C Hamano
parent 1411914a1c
commit 69bcbbceb7
3 changed files with 48 additions and 0 deletions

View File

@ -27,6 +27,7 @@ The following information is captured automatically:
- 'git version --build-options' - 'git version --build-options'
- uname sysname, release, version, and machine strings - uname sysname, release, version, and machine strings
- Compiler-specific info string
This tool is invoked via the typical Git setup process, which means that in some This tool is invoked via the typical Git setup process, which means that in some
cases, it might not be able to launch - for example, if a relevant config file cases, it might not be able to launch - for example, if a relevant config file

View File

@ -4,6 +4,7 @@
#include "strbuf.h" #include "strbuf.h"
#include "time.h" #include "time.h"
#include "help.h" #include "help.h"
#include "compat/compiler.h"
static void get_system_info(struct strbuf *sys_info) static void get_system_info(struct strbuf *sys_info)
{ {
@ -25,6 +26,11 @@ static void get_system_info(struct strbuf *sys_info)
uname_info.release, uname_info.release,
uname_info.version, uname_info.version,
uname_info.machine); uname_info.machine);
strbuf_addstr(sys_info, _("compiler info: "));
get_compiler_info(sys_info);
strbuf_addstr(sys_info, _("libc info: "));
get_libc_info(sys_info);
} }
static const char * const bugreport_usage[] = { static const char * const bugreport_usage[] = {

41
compat/compiler.h Normal file
View File

@ -0,0 +1,41 @@
#ifndef COMPILER_H
#define COMPILER_H
#include "git-compat-util.h"
#include "strbuf.h"
#ifdef __GLIBC__
#include <gnu/libc-version.h>
#endif
static inline void get_compiler_info(struct strbuf *info)
{
int len = info->len;
#ifdef __clang__
strbuf_addf(info, "clang: %s\n", __clang_version__);
#elif defined(__GNUC__)
strbuf_addf(info, "gnuc: %d.%d\n", __GNUC__, __GNUC_MINOR__);
#endif
#ifdef _MSC_VER
strbuf_addf(info, "MSVC version: %02d.%02d.%05d\n",
_MSC_VER / 100, _MSC_VER % 100, _MSC_FULL_VER % 100000);
#endif
if (len == info->len)
strbuf_addstr(info, _("no compiler information available\n"));
}
static inline void get_libc_info(struct strbuf *info)
{
int len = info->len;
#ifdef __GLIBC__
strbuf_addf(info, "glibc: %s\n", gnu_get_libc_version());
#endif
if (len == info->len)
strbuf_addstr(info, _("no libc information available\n"));
}
#endif /* COMPILER_H */