On 21 Nov 2023, at 23:13, Iain Sandoe <i...@sandoe.co.uk> wrote:

>> #if defined (__APPLE__)
>> -#include <unistd.h>
> 
> If removing unistd.h is intentional (i.e. you determined that it’s no longer
> needed for Darwin), then we should make that a separate patch.

I thought that I’d had to include unistd.h for the first patch in this thread; 
clearly not!

What I hope will be the final version:

——— 8< .———

In gcc/ada/adaint.c(__gnat_get_file_names_case_sensitive), the current
assumption for __APPLE__ is that file names are case-insensitive
unless __arm__ or __arm64__ are defined, in which case file names are
declared case-sensitive.

The associated comment is
  "By default, we suppose filesystems aren't case sensitive on
  Windows and Darwin (but they are on arm-darwin)."

This means that on aarch64-apple-darwin, file names are treated as
case-sensitive, which is not the default case.

The true default position is that macOS file systems are
case-insensitive, iOS file systems are case-sensitive.

Apple provide a header file <TargetConditionals.h> which permits a
compile-time check for the compiler target (e.g. OSX vs IOS); if
TARGET_OS_IOS is defined as 1, this is a build for iOS.

  * gcc/ada/adaint.c
  (__gnat_get_file_names_case_sensitive): Split out the __APPLE__
  check and remove the checks for __arm__, __arm64__.
  For Apple, file names are by default case-insensitive unless
  TARGET_OS_IOS is set.

Signed-off-by: Simon Wright <si...@pushface.org>
---
 gcc/ada/adaint.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c
index bb4ed2607e5..2e9c59ae958 100644
--- a/gcc/ada/adaint.c
+++ b/gcc/ada/adaint.c
@@ -85,6 +85,7 @@
 
 #if defined (__APPLE__)
 #include <unistd.h>
+#include <TargetConditionals.h>
 #endif
 
 #if defined (__hpux__)
@@ -613,11 +614,18 @@ __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 TARGET_OS_IOS
+         file_names_case_sensitive_cache = 1;
 #else
+         file_names_case_sensitive_cache = 0;
+#endif   
+#else /* Neither Windows nor Apple.  */
          file_names_case_sensitive_cache = 1;
 #endif
        }
-- 
2.37.1 (Apple Git-137.1)

Reply via email to