git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Build errors when building git on MacOS 11 (x86-64) and for M1 macs

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Jun 10, 2021, 13:52 UTC
Message-ID
<87sg1p24zc.fsf@evledraar.gmail.com>
In-Reply-To
<f5487adb-b7dc-4f97-bca1-749701337759n@googlegroups.com>
[CC-ing the main git@ list for the "bug in git" aspect of this]
On Thu, Jun 10 2021, Nikhil Gupta wrote:
Show 37 quoted lines
> &nbsp; | The following shell command exited with status 2:
> &nbsp; | &nbsp;
> &nbsp; | $ CFLAGS=-I/opt/chef-workstation/embedded/include -O3 -D_FORTIFY_SOURCE=2 -fstack-protector CPPFLAGS=-I/opt/chef-workstation/embedded/include -O3
> -D_FORTIFY_SOURCE=2 -fstack-protector CXXFLAGS=-I/opt/chef-workstation/embedded/include -O3 -D_FORTIFY_SOURCE=2 -fstack-protector
> LDFLAGS=-Wl,-rpath,/opt/chef-workstation/embedded/lib -L/opt/chef-workstation/embedded/lib LD_RUN_PATH=/opt/chef-workstation/embedded/lib MAKE=gmake
> OMNIBUS_INSTALL_DIR=/opt/chef-workstation
> PATH=/opt/chef-workstation/bin:/opt/chef-workstation/embedded/bin:/Users/administrator/.buildkite-agent/builds/MM009-local-1/chef/chef-chef-workstation-master-omnibus-adhoc/omnibus/vendor/bundle/ruby/2.7.0/bin:/opt/angry-omnibus-toolchain/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
> PKG_CONFIG_PATH=/opt/chef-workstation/embedded/lib/pkgconfig gmake prefix=/opt/chef-workstation/embedded bindir=/opt/chef-workstation/gitbin -j 10
> [...]
> &nbsp; | * new script parameters
> &nbsp; | builtin/archive.c:48:24: error: implicit declaration of function 'archive_format_from_filename' is invalid in C99
> [-Werror,-Wimplicit-function-declaration]
> &nbsp; | const char *format = archive_format_from_filename(name_hint);
> &nbsp; | ^
> &nbsp; | builtin/archive.c:48:24: note: did you mean 'archive_read_open_filename'?
> &nbsp; | /opt/chef-workstation/embedded/include/archive.h:527:15: note: 'archive_read_open_filename' declared here
> &nbsp; | __LA_DECL int archive_read_open_filename(struct archive *,
> &nbsp; | ^
> &nbsp; | builtin/archive.c:48:15: warning: incompatible integer to pointer conversion initializing 'const char *' with an expression of type 'int'
> [-Wint-conversion]
> &nbsp; | const char *format = archive_format_from_filename(name_hint);
> &nbsp; | ^        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> &nbsp; | builtin/archive.c:101:2: error: implicit declaration of function 'init_archivers' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
> &nbsp; | init_archivers();
> &nbsp; | ^
> &nbsp; | builtin/archive.c:111:9: error: implicit declaration of function 'write_archive' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
> &nbsp; | return write_archive(argc, argv, prefix, the_repository, output, 0);
> &nbsp; | ^
> &nbsp; | builtin/archive.c:111:9: note: did you mean 'write_or_die'?
> &nbsp; | ./cache.h:1737:6: note: 'write_or_die' declared here
> &nbsp; | void write_or_die(int fd, const void *buf, size_t count);
> &nbsp; | ^
> &nbsp; | 1 warning and 3 errors generated.
> &nbsp; | gmake: *** [Makefile:2431: builtin/archive.o] Error 1
> &nbsp; | gmake: *** Waiting for unfinished jobs....
> &nbsp; | &nbsp;
> &nbsp; | &nbsp;

I have no access to such a system, but I think think I see the problem from what you've supplied here.

You supplied a CFLAGS=-I/opt/chef-workstation/embedded/include which has an archive.h file that's unrelated to the archive.h file git expects.

Thus we include that and find things unrelated to git, and error when we encounter a function we expected to have declared in our own archive.h.

The solution is something like defining a config.mak file where you add flags with BASIC_CFLAGS +=, not =. See config.mak.uname for an example. You'll then add new directories after our own -I.

This is arguably a bug in git's Makefile in that we should have that "-I." in an ESSENTIAL_CFLAGS variable or something, I can't think of a scenario where git would compile without it. That or things in builtin/ should include e.g. ../archive.h, perhaps such a thing isn't portable.

I think (but have not confirmed) that you probably got this far because your compiler will stick -I. at the /end/ of the flags implicitly (or is that standardized C behavior? I can't remember).

So it worked until we had a filename conflict, i.e. we'd find strbuf.h in our own sources, but have an issue with a common name like archive.h.

Next: Felipe Contreras
Message 1 of 4 in “Re: Build errors when building git on MacOS 11 (x86-64) and for M1 macs”
  1. Ævar Arnfjörð BjarmasonJun 10, 2021
  2. Felipe ContrerasJun 10, 2021
  3. Jeff KingJun 10, 2021
  4. Jeff KingJun 10, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.