On 2020-7-5 14:08 , Fred Wright wrote: > > Since having those defined differently would only be expected in cases > where the build target is a range of OS versions, and since MacPorts has > no concept of "OS version universality" and hence always targets one > specific OS version, once would expect the two definitions to be the > same in the MacPorts environment. But aside from it being cleaner to > use the correct macro for the context, there's at least one case where > they're *not* the same. From the default compiler on 10.5.8: > > MacMini:OSX fw$ ./conftest > __APPLE__ = 1 > __MAC_OS_X_VERSION_MIN_REQUIRED = 1058 > __MAC_OS_X_VERSION_MAX_ALLOWED = 1060 > _POSIX_VERSION = 200112 > > Thus, using MAX_ALLOWED to distinguish 10.5 from 10.6 doesn't work. > There are several ports that don't build on 10.5 for precisely this reason.
The reason for this, by the way, is that this toolchain is aware that 10.6 exists and it is always assumed by default that you want access to the latest features. Any symbols that are present in the max_allowed OS but not in the min_required are weak-linked, and programs are expected to check that those symbols are non-null before using them. That is the Apple way of being compatible with multiple OS versions in a single binary, but naturally it almost never happens in the open source world. - Josh
