Message ID | 20200406224526.256074-6-emilyshaffer@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | bugreport: add tool to generate debugging info | expand |
Emily Shaffer <emilyshaffer@google.com> writes: > 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'. This one is not about "what system are we running on", but more about "how were the various pieces of Git binaries the user has trouble running built?". While it may be useful to learn how "git bugreport" was compiled, the same question about the other binaries of Git (e.g. "git" itself, or "git ls-files" that is builtin) may have different answers. It should be fairly trivial to teach the "git" binaries (i.e. "git" itself plus builtins, and standalone subcommands like "git-remote-curl" and "git-bugreport") to report how they were built (e.g. with what library and compiler) by calling the helpers you added in [3/5] and [5/5] and once that is done, it would be straight-forward to teach "git bugreport" to collect properties of them by invoking them and reading their output via the run_command() interface, as I mentioned in my review on [3/5] earlire. Thanks.
On 2020-04-06 15:45:26-0700, Emily Shaffer <emilyshaffer@google.com> wrote:
> Helped-by: Danh Doan <congdanhqx@gmail.com>
If you ever send another version of this series, my Git identity is:
Đoàn Trần Công Danh <congdanhqx@gmail.com>
Thanks,
Danh Doan <congdanhqx@gmail.com> writes: > On 2020-04-06 15:45:26-0700, Emily Shaffer <emilyshaffer@google.com> wrote: >> Helped-by: Danh Doan <congdanhqx@gmail.com> > > If you ever send another version of this series, my Git identity is: > > Đoàn Trần Công Danh <congdanhqx@gmail.com> > > Thanks, Thanks.
On Tue, Apr 07, 2020 at 08:09:02AM -0700, Junio C Hamano wrote: > Danh Doan <congdanhqx@gmail.com> writes: > > > On 2020-04-06 15:45:26-0700, Emily Shaffer <emilyshaffer@google.com> wrote: > >> Helped-by: Danh Doan <congdanhqx@gmail.com> > > > > If you ever send another version of this series, my Git identity is: > > > > Đoàn Trần Công Danh <congdanhqx@gmail.com> > > > > Thanks, > > Thanks. > Thanks Danh - I copied it from the email header, my apologies. Junio, since you replied as well does that mean you updated your copy and I don't need to re-send? (I haven't read the other comments yet, but your comment on the cover letter makes me think you don't want a v13.) - Emily
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 1a3172bcec..089b939a87 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..10dbb65937 --- /dev/null +++ b/compat/compiler.h @@ -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 */
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: Danh Doan <congdanhqx@gmail.com> Helped-by: Johannes Schindelin <Johannes.Schindelin@gmx.de> --- Documentation/git-bugreport.txt | 1 + bugreport.c | 6 +++++ compat/compiler.h | 41 +++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 compat/compiler.h