#71842 closed defect (fixed)
legacy-support: include sys/stdio.h from stdio.h
| Reported by: | barracuda156 | Owned by: | fhgwright (Fred Wright) |
|---|---|---|---|
| Priority: | Normal | Milestone: | |
| Component: | legacy-support | Version: | 2.10.5 |
| Keywords: | Cc: | fhgwright (Fred Wright), mascguy (Christopher Nielsen), macportsraf | |
| Port: | legacy-support |
Description
Apple headers from 10.10+ include sys/stdio.h from stdio.h, which makes renameat available: https://github.com/alexey-lysiuk/macos-sdk/blob/69ddec41e6224afebd5f19bb24764305ac3e828a/MacOSX10.10.sdk/usr/include/stdio.h#L75
legacy-support provides renameat in sys/stdio.h, however does not include that header from stdio.h: https://github.com/macports/macports-legacy-support/blob/f109400eccefe2f735bcd9a068dad7a53407d548/include/stdio.h
Obviously, Apple header does not do that either when sys/stdio.h does not exist in the OS: https://github.com/alexey-lysiuk/macos-sdk/blob/0efb06490f664d335a4fdff9198df7d03e87deda/MacOSX10.8.sdk/usr/include/stdio.h (or any other SDK before that header appears).
In result, we get failures when compiling software which expects renameat to be available via stdio.h (which should work in fact, as it seems, but fails with legacy-support.
Examples: https://github.com/capnproto/capnproto/pull/2212 https://github.com/leo-arch/clifm/issues/298
Change History (8)
comment:1 Changed 13 months ago by fhgwright (Fred Wright)
comment:2 follow-up: 3 Changed 13 months ago by barracuda156
But is _stdio.h included in turn via stdio.h? Internal headers should not be included directly by third-party software.
comment:3 follow-up: 4 Changed 13 months ago by fhgwright (Fred Wright)
Replying to barracuda156:
But is
_stdio.hincluded in turn viastdio.h? Internal headers should not be included directly by third-party software.
Ah, yes, it is. Though in any case, legacy-support won't change anything related to renameat in 10.10+, anyway.
IMO, *stdio.h was a dumb place to put the renameat prototype, but that ship has already sailed.
I'll fix this soon, since it's easy (even including the test). :-)
comment:4 Changed 13 months ago by barracuda156
Replying to fhgwright:
Replying to barracuda156:
But is
_stdio.hincluded in turn viastdio.h? Internal headers should not be included directly by third-party software.Ah, yes, it is. Though in any case,
legacy-supportwon't change anything related torenameatin 10.10+, anyway.IMO,
*stdio.hwas a dumb place to put therenameatprototype, but that ship has already sailed.I'll fix this soon, since it's easy (even including the test). :-)
Great, thanks.
comment:5 Changed 13 months ago by fhgwright (Fred Wright)
| Owner: | set to fhgwright |
|---|---|
| Resolution: | → fixed |
| Status: | new → closed |
comment:6 Changed 13 months ago by fhgwright (Fred Wright)
comment:7 Changed 12 months ago by fhgwright (Fred Wright)
comment:8 Changed 10 months ago by mascguy (Christopher Nielsen)
| Component: | ports → legacy-support |
|---|
Recategorize existing legacy-support lib tickets, to use new component definition.

Replying to barracuda156:
Not exactly. In the 10.10-10.12 SDKs, it's indeed included by stdio.h, but in the 10.13+ SDKs it's included by _stdio.h and not by stdio.h. So there's some question about what the "correct" behavior should be considered to be, and how the software in question decides what header to use.
Copying the later behavior would probably make more sense.