On 11 Nov 2023, at 18:10, Iain Sandoe <idsan...@googlemail.com> wrote:
> 
>> On 11 Nov 2023, at 07:47, Simon Wright <si...@pushface.org> wrote:
>> 
>> On 6 Nov 2023, at 08:36, Arnaud Charlet <char...@adacore.com> wrote:
>>> 
>>>>> So without changing fundamentally the model, you can't decide dynamically 
>>>>> for the whole
>>>>> system. Making the choice based on the current directory is pretty 
>>>>> random, since the current
>>>>> directory isn't well defined at program's start up and could be pretty 
>>>>> much any filesystem.
>>>> 
>>>> I’d imagine that projects spread over more than one 
>>>> differently-case-sensitive filesystem would
>>>> be rare. As to the current directory at compiler startup, with GPRbuild 
>>>> it’s the object directory, so
>>>> likely to be somewhere near the project’s source tree.
>>> 
>>> I am not talking about the current directory when the compiler runs, I am 
>>> talking about the
>>> current directory where the target program runs, which can be pretty much 
>>> anywhere.
>>> 
>>> In other words, you are modifying a runtime file (adaint.c) which is used 
>>> both by the host compiler
>>> and by the target applications. My comment worries about the target 
>>> applications while yours
>>> applies to the host compiler only.
>> 
>> I don’t understand?
>> 
>> The change works out whether the filesystem of the current working directory 
>> is CS, whether
>> it’s the compiler or some user program that’s running it (it looks like that 
>> would have to be via 
>> some higher-level compiler package, I found only GNAT.Command_Line and 
>> GNAT.Directory_Operations).
>> 
>> I can see that might not be what the user program wants, but if they 
>> actually care the current
>> situation isn’t great anyway; the compiler definitely makes the wrong choice 
>> for new Macs.
>> 
>>>>> Note that the current setting on arm is actually for iOS, which we did 
>>>>> support at AdaCore
>>>>> at some point (and could revive in the future, who knows).
>>>> 
>>>> Wouldn’t it be more natural to go via LLVM? I understand from Iain that 
>>>> iOS isn’t currently
>>>> supported by GCC.
>>> 
>>> That's another option. We'd like to keep both options on the table, since 
>>> both options have
>>> pros and cons.
>>> 
>>>>> So it would be fine to refine the test to differentiate between macOS and 
>>>>> embedded iOS and co,
>>>>> that would be a better change here.
>>>> 
>>>> There didn’t seem to be a way to do that.
>>> 
>>> OK, I thought there would be some defines that we could use for that, too 
>>> bad if there isn't
>>> and indeed we might need to perform another runtime check then as suggested 
>>> by Iain.
>> 
>> I can see a possible interface, operatingSystemVersion in NSProcessInfo.h - 
>> Objective C
>> needed, I think
> 
> Some of the NS interfaces are available to regular C (e.g. stuff in 
> CoreFoundation), and I am
> fairly/very sure that we will be able to find a machanism that does not 
> involve introducing an
> ObjC dep.  [I am obvioulsy not in any way against ObjC - since i’m the 
> maintainer ;) .. but it
> seems heavyweight for solving this issue].

It certainly would be heavyweight, since TargetConditionals.h includes 
TARGET_OS_OSX, 
which is 1 if we’re compiling for macOS and 0 otherwise (there’s a useful chart 
at :83 in the 
MacOSX13.1 SDK).

Two ways ahead here:
(1) just replace the current __arm__, __arm64__ test with this
(2) as 1, but implement the runtime test for case sensitivity only for macOS

Whether (2) is acceptable depends, I suppose, on what issues Iain encountered 
on Darwin 9 
& Darwin 17. I’ll be content to go with (1).

Reply via email to