On 2020-03-02 15:04:00-0800, Emily Shaffer <emilyshaffer@xxxxxxxxxx> wrote: > 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@xxxxxxxxxx> > --- > Documentation/git-bugreport.txt | 1 + > bugreport.c | 6 ++++++ > compat/compiler.h | 38 +++++++++++++++++++++++++++++++++ > 3 files changed, 45 insertions(+) > create mode 100644 compat/compiler.h > > diff --git a/Documentation/git-bugreport.txt b/Documentation/git-bugreport.txt > index 17b0d14e8d..643d1b2884 100644 > --- a/Documentation/git-bugreport.txt > +++ b/Documentation/git-bugreport.txt > @@ -27,6 +27,7 @@ The following information is captured automatically: > > - 'git version --build-options' > - 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 > cases, it might not be able to launch - for example, if a relevant config file > diff --git a/bugreport.c b/bugreport.c > index 857b4f712c..5073c901cd 100644 > --- a/bugreport.c > +++ b/bugreport.c > @@ -4,6 +4,7 @@ > #include "strbuf.h" > #include "time.h" > #include "help.h" > +#include "compat/compiler.h" > > 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.version, > 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[] = { > diff --git a/compat/compiler.h b/compat/compiler.h > new file mode 100644 > index 0000000000..21f098e6a4 > --- /dev/null > +++ b/compat/compiler.h > @@ -0,0 +1,38 @@ > +#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 __GNUC__ > + strbuf_addf(info, "gnuc: %d.%d\n", __GNUC__, __GNUC_MINOR__); > +#endif This fixup can be used for clang on Linux, I guess it could be applied for macOS too (since default gcc on macOS is symlinked to clang?) --------------8<---------------------- diff --git a/compat/compiler.h b/compat/compiler.h index 21f098e6a4..055dbb5e1b 100644 --- a/compat/compiler.h +++ b/compat/compiler.h @@ -11,7 +11,9 @@ static inline void get_compiler_info(struct strbuf *info) { int len = info->len; -#ifdef __GNUC__ +#ifdef __clang__ + strbuf_addf(info, "clang: %s\n", __clang_version__); +#elif defined(__GNUC__) strbuf_addf(info, "gnuc: %d.%d\n", __GNUC__, __GNUC_MINOR__); #endif -------------------->8--------------------- > + > +#ifdef _MSC_VER > + strbuf_addf(info, "MSVC version: %s\n", _MSC_FULL_VER); > +#endif > + > + if (len == info->len) > + strbuf_addf(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_addf(info, _("no libc information available\n")); > +} > + > +#endif /* COMPILER_H */ > -- > 2.25.0.265.gbab2e86ba0-goog > -- Danh