diff mbox series

[v12,5/5] bugreport: add compiler info

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

Commit Message

Emily Shaffer April 6, 2020, 10:45 p.m. UTC
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

Comments

Junio C Hamano April 6, 2020, 11:31 p.m. UTC | #1
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.
Đoàn Trần Công Danh April 6, 2020, 11:47 p.m. UTC | #2
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,
Junio C Hamano April 7, 2020, 3:09 p.m. UTC | #3
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.
Emily Shaffer April 7, 2020, 6:35 p.m. UTC | #4
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 mbox series

Patch

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 */