On 17 Nov 2023, at 08:37, Arnaud Charlet <[email protected]> wrote:
>
>> Also, should the test code below (between %%%) be included in the
>> testsuite?
>
> It would be good but tests shouldn't output anything, they should be self
> testing,
> and you will need to deal with making the test portable to all targets.
>
> Given that the compiler itself uses this feature, I don't think this is worth
> the trouble.
OK
>> @@ -613,12 +613,25 @@ __gnat_get_file_names_case_sensitive (void)
>> else
>> {
>> /* By default, we suppose filesystems aren't case sensitive on
>> - Windows and Darwin (but they are on arm-darwin). */
>> -#if defined (WINNT) || defined (__DJGPP__) \
>> - || (defined (__APPLE__) && !(defined (__arm__) || defined (__arm64__)))
>> + Windows or DOS. */
>> +#if defined (WINNT) || defined (__DJGPP__)
>> + file_names_case_sensitive_cache = 0;
>> +#elif defined (__APPLE__)
>> + /* By default, macOS volumes are case-insensitive, iOS
>> + volumes are case-sensitive. */
>> +#if defined (TARGET_OS_OSX) /* In recent SDK. */
>> +#if TARGET_OS_OSX /* macOS. */
>> file_names_case_sensitive_cache = 0;
>> #else
>> file_names_case_sensitive_cache = 1;
>> +#endif
>> +#elif TARGET_OS_MAC /* macOS, in older SDK. */
>> + file_names_case_sensitive_cache = 0;
>> +#else
>> + file_names_case_sensitive_cache = 1;
>> +#endif
>> +#else /* Neither Windows nor Apple. */
>> + file_names_case_sensitive_cache = 1;
>> #endif
>
> 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.
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.
This is from the current TargetConditionals.h:
*
+---------------------------------------------------------------------------+
* | TARGET_OS_MAC
|
* | +-----+ +-------------------------------------------------+
+-----------+ |
* | | | | TARGET_OS_IPHONE | |
| |
* | | | | +-----------------+ +----+ +-------+ +--------+ | |
| |
* | | | | | IOS | | | | | | | | |
| |
* | | OSX | | | +-------------+ | | TV | | WATCH | | BRIDGE | | | DRIVERKIT
| |
* | | | | | | MACCATALYST | | | | | | | | | |
| |
* | | | | | +-------------+ | | | | | | | | |
| |
* | | | | +-----------------+ +----+ +-------+ +--------+ | |
| |
* | +-----+ +-------------------------------------------------+
+-----------+ |
*
+---------------------------------------------------------------------------+