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

Re: Minor portability issues + fixes

From
Jeff King <peff@peff.net>
Date
May 19, 2020, 02:49 UTC
Message-ID
<20200519024945.GB70483@coredump.intra.peff.net>
In-Reply-To
<7422404e-7fc8-4961-aae4-3f0adb71bb3a@www.fastmail.com>
On Mon, May 18, 2020 at 09:15:58PM -0400, Daniel Richard G. wrote:
Show 13 quoted lines
> I am building Git 2.26.2 on AIX. A few compilation errors arose, but
> they are resolvable with a few minor changes that will improve overall
> portability.
> 
> There were a few errors of this form:
> 
>     sha1-file.c: In function 'mmap_limit_check':
>     sha1-file.c:940:12: error: 'SIZE_MAX' undeclared (first use in this function)
>     sha1-file.c:940:12: note: each undeclared identifier is reported only once for each function it appears in
> 
> SIZE_MAX is defined in stdint.h, and adding that #include fixes this. It
> is likely that this header is being pulled in on other platforms due to
> transitive dependencies, but that does not occur on AIX.

All system defines in Git should be pulled in via git-compat-util.h. That does include stdint.h, but only if NO_INTTYPES_H is defined (otherwise we prefer inttypes.h). And POSIX (2004) says:

  The <inttypes.h> header shall include the <stdint.h> header.

But perhaps that is not so on AIX (it wouldn't be the first time we've seen a platform that does not strictly follow POSIX).

Does building with:
  make NO_INTTYPES_H=YesPlease
work?

If so, then perhaps it should be added to the AIX defines in config.mak.uname.

Show 13 quoted lines
> The problem is, in this case, CC_LD_DYNPATH is set to an empty value---
> which is incorrect, in light of how it is used in the Makefile. Here is
> a typical example:
> 
>     ifdef ZLIB_PATH
>             BASIC_CFLAGS += -I$(ZLIB_PATH)/include
>             EXTLIBS += -L$(ZLIB_PATH)/$(lib) $(CC_LD_DYNPATH)$(ZLIB_PATH)/$(lib)
>     endif
>     EXTLIBS += -lz
> 
> Setting that variable to an empty value causes a bare directory to be
> passed to the linker, which of course then errors out. I would suggest
> setting it to "-L" instead.

That would just be redundant with the earlier argument. That might be the easiest way to turn it into a noop, but we can probably do better with $(if) or similar, which would allow somebody to build with:

  make CC_LD_DYNPATH=
even without using the autoconf script.

I do wonder, though, if configure.ac could be extended for AIX to support whatever syntax the system linker uses for setting the run-path. I understand that you don't care either way about this feature, but this might be a good opportunity to fix it.

-Peff
Previous: Daniel Richard G.Next: Daniel Richard G.
Message 2 of 8 in “Minor portability issues + fixes”
  1. Daniel Richard G.May 19, 2020
  2. Jeff KingMay 19, 2020
  3. Daniel Richard G.May 19, 2020
  4. Jeff KingMay 20, 2020
  5. Daniel Richard G.May 21, 2020
  6. Jeff KingMay 22, 2020
  7. Carlo Marcelo Arenas BelónMay 19, 2020
  8. Daniel Richard G.May 19, 2020

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.