It gets worse - almost all configure scripts define a ac_fn_c_check_func macro that basically defines its own version with just the symbol name to check and then tries to link it. If it links then that function exists. If it does not link, then that function fails.
All of this seems to ignore the MACOSX_DEPLOYMENT_TARGET and even will ignore CFLAGS=-mmacosx-version-min=10.9
In addition the LDFAGS="-Wl,-no_weak_imports -Wl,-macosx_version_min,10.9: have no impact on the results of the configure tests.
So for any opensource projects that use "configure"/"configure.ac" to check for c functions being available using the AC_CHECK_FUNCS() will pass in all cases on OSX 10.12 (when that function exists there) no matter how hard you try to tell it you are building for "10.9" which does not support that symbol.
Actually compiling a real test case with the proper includes will at least detect some of this due to some Availability macros but that is not how c functions are checked for in configure.
So all of the following tests in the Python "configure" will pass when built on OSX 10.12 even if you have properly set the MACOSX_DEPLOYMENT_TARGET.
faccessat
fchmodat
fchownat
fdopendir
fstatat
getentropy
linkat
mkdirat
openat
readlinkat
renameat
symlinkat
unlinkat
clock_getres
clock_gettime
basename_r
clock_settime
dirname_r
mkostemp
mkostemps
getattrlistat
getattrlistbuilk
And none of these functions/symbols exists in OSX 10.9!!!!!!!
And I am sure there are many more. So once a person upgrades to XCode 8 and OSX Sierra, they have lost all true backwards compatibility for any open source project that uses one of these symbols/functions.
This truly sucks.
Last edited by KevinH; 03-25-2017 at 01:44 PM.
|