From 3b82db4b0497e78ae6dba438ce6888ee06eeb388 Mon Sep 17 00:00:00 2001 From: Adric Norris Date: Wed, 31 Aug 2016 16:09:14 -0500 Subject: [PATCH 1/2] Preliminary support for reporting build platform Add preliminary support for detection of the build plaform, and reporting of same with the `git version --build-options' command. This can be useful for bug reporting, to distinguish between 32 and 64-bit builds for example. The current implementation can only distinguish between x86 and x86_64. This will be extended in future patches. In addition, all 32-bit variants (i686, i586, etc.) are collapsed into `x86'. An example of the output is: $ git version --build-options git version 2.9.3.windows.2.826.g06c0f2f sizeof-long: 4 machine: x86_64 The label of `machine' was chosen so the new information will approximate the output of `uname -m'. Signed-off-by: Adric Norris --- help.c | 3 +++ help.h | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/help.c b/help.c index a07f01e6f9..76aec6ba70 100644 --- a/help.c +++ b/help.c @@ -424,6 +424,8 @@ const char *help_unknown_cmd(const char *cmd) int cmd_version(int argc, const char **argv, const char *prefix) { + static char build_platform[] = GIT_BUILD_PLATFORM; + /* * The format of this string should be kept stable for compatibility * with external projects that rely on the output of "git version". @@ -432,6 +434,7 @@ int cmd_version(int argc, const char **argv, const char *prefix) while (*++argv) { if (!strcmp(*argv, "--build-options")) { printf("sizeof-long: %d\n", (int)sizeof(long)); + printf("machine: %s\n", build_platform); /* NEEDSWORK: also save and output GIT-BUILD_OPTIONS? */ } } diff --git a/help.h b/help.h index b21d7c94e8..1cf9b6fa4c 100644 --- a/help.h +++ b/help.h @@ -33,3 +33,16 @@ extern void list_commands(unsigned int colopts, struct cmdnames *main_cmds, stru */ extern void help_unknown_ref(const char *ref, const char *cmd, const char *error); #endif /* HELP_H */ + +/* + * identify build platform + */ +#ifndef GIT_BUILD_PLATFORM + #if defined __x86__ || defined __i386__ || defined __i586__ || defined __i686__ + #define GIT_BUILD_PLATFORM "x86"; + #elif defined __x86_64__ + #define GIT_BUILD_PLATFORM "x86_64"; + #else + #define GIT_BUILD_PLATFORM "unknown"; + #endif +#endif From 4655745c61c88e1e8ccaadb347545ff7df2b3b62 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Fri, 9 Dec 2016 17:48:24 +0100 Subject: [PATCH 2/2] version --build-options: report commit, too, if possible In particular when local tags are used (or tags that are pushed to some fork) to build Git, it is very hard to figure out from which particular revision a particular Git executable was built. Let's just report that in our build options. We need to be careful, though, to report when the current commit cannot be determined, e.g. when building from a tarball without any associated Git repository. Signed-off-by: Johannes Schindelin --- Makefile | 4 +++- help.c | 2 ++ version.c | 1 + version.h | 1 + 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index ffa6da71b7..a726e9d737 100644 --- a/Makefile +++ b/Makefile @@ -1798,7 +1798,9 @@ builtin/help.sp builtin/help.s builtin/help.o: EXTRA_CPPFLAGS = \ version.sp version.s version.o: GIT-VERSION-FILE GIT-USER-AGENT version.sp version.s version.o: EXTRA_CPPFLAGS = \ '-DGIT_VERSION="$(GIT_VERSION)"' \ - '-DGIT_USER_AGENT=$(GIT_USER_AGENT_CQ_SQ)' + '-DGIT_USER_AGENT=$(GIT_USER_AGENT_CQ_SQ)' \ + '-DGIT_BUILT_FROM_COMMIT="$(shell git rev-parse -q --verify HEAD || \ + echo "(unknown)")"' $(BUILT_INS): git$X $(QUIET_BUILT_IN)$(RM) $@ && \ diff --git a/help.c b/help.c index 76aec6ba70..a2318483f0 100644 --- a/help.c +++ b/help.c @@ -433,6 +433,8 @@ int cmd_version(int argc, const char **argv, const char *prefix) printf("git version %s\n", git_version_string); while (*++argv) { if (!strcmp(*argv, "--build-options")) { + printf("built from commit: %s\n", + git_built_from_commit_string); printf("sizeof-long: %d\n", (int)sizeof(long)); printf("machine: %s\n", build_platform); /* NEEDSWORK: also save and output GIT-BUILD_OPTIONS? */ diff --git a/version.c b/version.c index 6106a8098c..41b718c29e 100644 --- a/version.c +++ b/version.c @@ -3,6 +3,7 @@ #include "strbuf.h" const char git_version_string[] = GIT_VERSION; +const char git_built_from_commit_string[] = GIT_BUILT_FROM_COMMIT; const char *git_user_agent(void) { diff --git a/version.h b/version.h index 6911a4f155..7c62e80577 100644 --- a/version.h +++ b/version.h @@ -2,6 +2,7 @@ #define VERSION_H extern const char git_version_string[]; +extern const char git_built_from_commit_string[]; const char *git_user_agent(void); const char *git_user_agent_sanitized(void);