>>> Please simplify the above to (untested): >>> >>> #elif defined (__APPLE__) >>> /* By default, macOS volumes are case-insensitive, iOS >>> volumes are case-sensitive. */ >>> #if TARGET_OS_MAC /* macOS, in older SDK. */ >>> file_names_case_sensitive_cache = 0; >>> #elif TARGET_OS_OSX /* macOS, in recent SDK. */ >>> file_names_case_sensitive_cache = 0; >>> #else /* assume iOS. */ >>> file_names_case_sensitive_cache = 1; >>> #endif >>> #else /* Neither Windows nor Apple. */ >>> file_names_case_sensitive_cache = 1; >>> #endif >>> >>> which is simpler and more readable and should be equivalent AFAICT. >>> >>> OK with the above change. >>> >>> Arno >> >> Sorry, but that wouldn’t work. > > Then invert the two first tests, that doesn't change the gist of my > suggestion to simplify the > tests.
Apple’s naming is definitely confusing in this area! In current SDKs, TARGET_OS_MAC means code is being generated for a Mac OS X variant, which covers OSX, IOS, Watch … ; to determine which kind of device, you have to check the specific define for that device - OSX corresponds to macOS, i.e. laptops, desktops. In older SDKs (specifically Xcode 3, for macOS Leopard (darwin 9) as mentioned by Iain) TARGET_OS_MAC means code is being generated for "Mac OS", i.e. laptops, desktops as above; TARGET_OS_OSX is undefined (as are TARGET_OS_IOS etc). If we are compiling for macOS, using a current macOS SDK, then TARGET_OS_MAC is set to 1 and TARGET_OS_OSX is set to 1. If we were compiling for iOS, using a current iOS SDK as supplied with current Xcode, then TARGET_OS_MAC would be set to 1, TARGET_OS_OSX would be set to 0, and TARGET_OS_IOS would be set to 1. If TARGET_OS_OSX is defined then — we’re generating code for a recent Apple device, TARGET_OS_MAC could mean — macOS, iOS, iWatch etc, so we can’t use it. if TARGET_OS_OSX is 1 then — we’re generating code for macOS, file names are case-insensitive. else — we’re trying to generate code for a device which GCC doesn’t support at — the moment, e.g. iOS; let’s assume file names are case-sensitive.. end if else if TARGET_OS_MAC is 1 then — we’re generating code for macOS, file names are case-insensitve. else — let’s assume file names are case-sensitive. end if end if What we’re doing here is providing a default behaviour; it’s certainly the case that Apple filesystems are by default case-insensitive. If a user has code on case-sensitive file systems (Apple or other, e.g. unix-over-NFS) it’s up to them to use GNAT_FILE_NAME_CASE_SENSITIVE. >> TargetConditionals.h is created by Apple as part of SDK construction, so the >> TARGET_* macros are defined directly (#define TARGET_OS_OSX 1), >> >> In a newer macOS SDK, both TARGET_OS_MAC and TARGET_OS_OSX are defined and >> set to 1, and TARGET_OS_MAC covers OSX (macOS), IOS, TV, WATCH and others. >> In an older macOS SDK, TARGET_OS_MAC is defined and set to 1, and none of >> the others are defined at all.