Message ID | 20200302230400.107428-6-emilyshaffer@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | add git-bugreport tool | expand |
On 2020-03-02 15:04:00-0800, Emily Shaffer <emilyshaffer@google.com> 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@google.com> > --- > 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 >
Emily Shaffer <emilyshaffer@google.com> writes: > +static inline void get_compiler_info(struct strbuf *info) > +{ > + ... > + if (len == info->len) > + strbuf_addf(info, _("no compiler information available\n")); s/addf/addstr/ to squelch https://travis-ci.org/git/git/jobs/657572439 > +} > + > +static inline void get_libc_info(struct strbuf *info) > +{ > + ... > + if (len == info->len) > + strbuf_addf(info, _("no libc information available\n")); Ditto. > +} > + > +#endif /* COMPILER_H */
Hi Emily, On Mon, 2 Mar 2020, Emily Shaffer wrote: > 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 > + > +#ifdef _MSC_VER > + strbuf_addf(info, "MSVC version: %s\n", _MSC_FULL_VER); I need this to fix a crash in the Visual Studio build's test run: -- snip -- Subject: [PATCH] fixup??? bugreport: add compiler info As documented at https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=vs-2019, `_MSC_FULL_VER` is an integer, not a string. Therefore this fix is needed to prevent a segmentation fault in the test t0091.1. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> --- compat/compiler.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compat/compiler.h b/compat/compiler.h index ce6a7f6de9a..ac90fa051dd 100644 --- a/compat/compiler.h +++ b/compat/compiler.h @@ -16,7 +16,8 @@ static inline void get_compiler_info(struct strbuf *info) #endif #ifdef _MSC_VER - strbuf_addf(info, "MSVC version: %s\n", _MSC_FULL_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) -- snap -- Could you squash that in, please? BTW the two issues I reported in the earlier round are still problems. Could you squash my fixes, please? For your convenience, you can pluck all four of them right off of https://github.com/git-for-windows/git/commits/shears/pu Just replace the `???` by `!` and you can even use `git rebase --autosquash`. Ciao, Dscho > +#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 > >
On Wed, Mar 04, 2020 at 10:39:53PM +0100, Johannes Schindelin wrote: > Hi Emily, > > On Mon, 2 Mar 2020, Emily Shaffer wrote: > > > 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 > > + > > +#ifdef _MSC_VER > > + strbuf_addf(info, "MSVC version: %s\n", _MSC_FULL_VER); > > I need this to fix a crash in the Visual Studio build's test run: Hummm, is that not part of the GGG suite? I saw it pass (and then failed to include the updated patches with v9 with the changes you mentioned below). > > -- snip -- > Subject: [PATCH] fixup??? bugreport: add compiler info > > As documented at > https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=vs-2019, > `_MSC_FULL_VER` is an integer, not a string. Therefore this fix is > needed to prevent a segmentation fault in the test t0091.1. > > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> > --- > compat/compiler.h | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/compat/compiler.h b/compat/compiler.h > index ce6a7f6de9a..ac90fa051dd 100644 > --- a/compat/compiler.h > +++ b/compat/compiler.h > @@ -16,7 +16,8 @@ static inline void get_compiler_info(struct strbuf *info) > #endif > > #ifdef _MSC_VER > - strbuf_addf(info, "MSVC version: %s\n", _MSC_FULL_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) > -- snap -- > > Could you squash that in, please? > > BTW the two issues I reported in the earlier round are still problems. > Could you squash my fixes, please? For your convenience, you can pluck all > four of them right off of > https://github.com/git-for-windows/git/commits/shears/pu Yes, I think these two issues earlier I have locally and thumbfingered running format-patch. > > Just replace the `???` by `!` and you can even use `git rebase > --autosquash`. > > Ciao, > Dscho > > > > +#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 > > > >
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 + +#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 */
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> --- Documentation/git-bugreport.txt | 1 + bugreport.c | 6 ++++++ compat/compiler.h | 38 +++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 compat/compiler.h