public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/iains/heads/d-for-darwin)] darwin: Implement osxVersionMin for getTargetInfo
@ 2021-10-15 19:33 Iain D Sandoe
  0 siblings, 0 replies; 6+ messages in thread
From: Iain D Sandoe @ 2021-10-15 19:33 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:a38344bd7a7ba6cbee0950afa58f6cc6f8c383f4

commit a38344bd7a7ba6cbee0950afa58f6cc6f8c383f4
Author: Iain Buclaw <ibuclaw@gdcproject.org>
Date:   Sat Dec 5 00:08:04 2020 +0100

    darwin: Implement osxVersionMin for getTargetInfo

Diff:
---
 gcc/config/darwin-d.c                        | 54 ++++++++++++++++++++++++++++
 libphobos/libdruntime/core/sys/posix/stdio.d |  7 ++--
 2 files changed, 59 insertions(+), 2 deletions(-)

diff --git a/gcc/config/darwin-d.c b/gcc/config/darwin-d.c
index 67d69b721b5..295db5164cc 100644
--- a/gcc/config/darwin-d.c
+++ b/gcc/config/darwin-d.c
@@ -21,6 +21,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "tm_d.h"
 #include "d/d-target.h"
 #include "d/d-target-def.h"
+#include "diagnostic.h"
 
 /* Implement TARGET_D_OS_VERSIONS for Darwin targets.  */
 
@@ -42,6 +43,58 @@ darwin_d_handle_target_object_format (void)
   return build_string_literal (strlen (objfmt) + 1, objfmt);
 }
 
+/* Given an OS X version VERSION_STR, return it as a six digit integer.  */
+
+static unsigned long
+parse_version (const char *version_str)
+{
+  const size_t version_len = strlen (version_str);
+  if (version_len < 1)
+    return 0;
+
+  /* Version string must consist of digits and periods only.  */
+  if (strspn (version_str, "0123456789.") != version_len)
+    return 0;
+
+  if (!ISDIGIT (version_str[0]) || !ISDIGIT (version_str[version_len - 1]))
+    return 0;
+
+  char *endptr;
+  unsigned long major = strtoul (version_str, &endptr, 10);
+  version_str = endptr + ((*endptr == '.') ? 1 : 0);
+
+  /* Version string must not contain adjacent periods.  */
+  if (*version_str == '.')
+    return 0;
+
+  unsigned long minor = strtoul (version_str, &endptr, 10);
+  version_str = endptr + ((*endptr == '.') ? 1 : 0);
+
+  unsigned long tiny = strtoul (version_str, &endptr, 10);
+
+  /* Version string must contain no more than three tokens.  */
+  if (*endptr != '\0')
+    return 0;
+
+  return (major * 10000) + (minor * 100) + tiny;
+}
+
+/* Handle a call to `__traits(getTargetInfo, "osxVersionMin")'.  */
+
+static tree
+darwin_d_handle_target_version_min (void)
+{
+  const unsigned long version = parse_version (darwin_macosx_version_min);
+
+  if (version == 0)
+    {
+      error ("unknown value %qs of %<-mmacosx-version-min%>",
+	     darwin_macosx_version_min);
+    }
+
+  return build_int_cst_type (integer_type_node, version);
+}
+
 /* Implement TARGET_D_REGISTER_OS_TARGET_INFO for Darwin targets.  */
 
 static void
@@ -49,6 +102,7 @@ darwin_d_register_target_info (void)
 {
   const struct d_target_info_spec handlers[] = {
     { "objectFormat", darwin_d_handle_target_object_format },
+    { "osxVersionMin", darwin_d_handle_target_version_min },
     { NULL, NULL },
   };
 
diff --git a/libphobos/libdruntime/core/sys/posix/stdio.d b/libphobos/libdruntime/core/sys/posix/stdio.d
index 41b52da7c64..fcd9fcbc29c 100644
--- a/libphobos/libdruntime/core/sys/posix/stdio.d
+++ b/libphobos/libdruntime/core/sys/posix/stdio.d
@@ -378,8 +378,11 @@ else version (Darwin)
     int   fseeko(FILE*, off_t, int);
     off_t ftello(FILE*);
 
-    ssize_t getdelim(char**, size_t*, int, FILE*);
-    ssize_t getline(char**, size_t*, FILE*);
+    static if (__traits(getTargetInfo, "osxVersionMin") >= 100700)
+    {
+        ssize_t getdelim(char**, size_t*, int, FILE*);
+        ssize_t getline(char**, size_t*, FILE*);
+    }
 }
 else version (FreeBSD)
 {


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [gcc(refs/users/iains/heads/d-for-darwin)] darwin: Implement osxVersionMin for getTargetInfo
@ 2021-10-18 15:54 Iain D Sandoe
  0 siblings, 0 replies; 6+ messages in thread
From: Iain D Sandoe @ 2021-10-18 15:54 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:a9e914afb82b181438451aecb0ab425bdfcd3c36

commit a9e914afb82b181438451aecb0ab425bdfcd3c36
Author: Iain Buclaw <ibuclaw@gdcproject.org>
Date:   Sat Dec 5 00:08:04 2020 +0100

    darwin: Implement osxVersionMin for getTargetInfo

Diff:
---
 gcc/config/darwin-d.c                        | 54 ++++++++++++++++++++++++++++
 libphobos/libdruntime/core/sys/posix/stdio.d |  7 ++--
 2 files changed, 59 insertions(+), 2 deletions(-)

diff --git a/gcc/config/darwin-d.c b/gcc/config/darwin-d.c
index 67d69b721b5..295db5164cc 100644
--- a/gcc/config/darwin-d.c
+++ b/gcc/config/darwin-d.c
@@ -21,6 +21,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "tm_d.h"
 #include "d/d-target.h"
 #include "d/d-target-def.h"
+#include "diagnostic.h"
 
 /* Implement TARGET_D_OS_VERSIONS for Darwin targets.  */
 
@@ -42,6 +43,58 @@ darwin_d_handle_target_object_format (void)
   return build_string_literal (strlen (objfmt) + 1, objfmt);
 }
 
+/* Given an OS X version VERSION_STR, return it as a six digit integer.  */
+
+static unsigned long
+parse_version (const char *version_str)
+{
+  const size_t version_len = strlen (version_str);
+  if (version_len < 1)
+    return 0;
+
+  /* Version string must consist of digits and periods only.  */
+  if (strspn (version_str, "0123456789.") != version_len)
+    return 0;
+
+  if (!ISDIGIT (version_str[0]) || !ISDIGIT (version_str[version_len - 1]))
+    return 0;
+
+  char *endptr;
+  unsigned long major = strtoul (version_str, &endptr, 10);
+  version_str = endptr + ((*endptr == '.') ? 1 : 0);
+
+  /* Version string must not contain adjacent periods.  */
+  if (*version_str == '.')
+    return 0;
+
+  unsigned long minor = strtoul (version_str, &endptr, 10);
+  version_str = endptr + ((*endptr == '.') ? 1 : 0);
+
+  unsigned long tiny = strtoul (version_str, &endptr, 10);
+
+  /* Version string must contain no more than three tokens.  */
+  if (*endptr != '\0')
+    return 0;
+
+  return (major * 10000) + (minor * 100) + tiny;
+}
+
+/* Handle a call to `__traits(getTargetInfo, "osxVersionMin")'.  */
+
+static tree
+darwin_d_handle_target_version_min (void)
+{
+  const unsigned long version = parse_version (darwin_macosx_version_min);
+
+  if (version == 0)
+    {
+      error ("unknown value %qs of %<-mmacosx-version-min%>",
+	     darwin_macosx_version_min);
+    }
+
+  return build_int_cst_type (integer_type_node, version);
+}
+
 /* Implement TARGET_D_REGISTER_OS_TARGET_INFO for Darwin targets.  */
 
 static void
@@ -49,6 +102,7 @@ darwin_d_register_target_info (void)
 {
   const struct d_target_info_spec handlers[] = {
     { "objectFormat", darwin_d_handle_target_object_format },
+    { "osxVersionMin", darwin_d_handle_target_version_min },
     { NULL, NULL },
   };
 
diff --git a/libphobos/libdruntime/core/sys/posix/stdio.d b/libphobos/libdruntime/core/sys/posix/stdio.d
index 41b52da7c64..fcd9fcbc29c 100644
--- a/libphobos/libdruntime/core/sys/posix/stdio.d
+++ b/libphobos/libdruntime/core/sys/posix/stdio.d
@@ -378,8 +378,11 @@ else version (Darwin)
     int   fseeko(FILE*, off_t, int);
     off_t ftello(FILE*);
 
-    ssize_t getdelim(char**, size_t*, int, FILE*);
-    ssize_t getline(char**, size_t*, FILE*);
+    static if (__traits(getTargetInfo, "osxVersionMin") >= 100700)
+    {
+        ssize_t getdelim(char**, size_t*, int, FILE*);
+        ssize_t getline(char**, size_t*, FILE*);
+    }
 }
 else version (FreeBSD)
 {


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [gcc(refs/users/iains/heads/d-for-darwin)] darwin: Implement osxVersionMin for getTargetInfo
@ 2021-10-13  8:30 Iain D Sandoe
  0 siblings, 0 replies; 6+ messages in thread
From: Iain D Sandoe @ 2021-10-13  8:30 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:7306be99431c2599bc60d6774d8939f3cba4b5de

commit 7306be99431c2599bc60d6774d8939f3cba4b5de
Author: Iain Buclaw <ibuclaw@gdcproject.org>
Date:   Sat Dec 5 00:08:04 2020 +0100

    darwin: Implement osxVersionMin for getTargetInfo

Diff:
---
 gcc/config/darwin-d.c                        | 54 ++++++++++++++++++++++++++++
 libphobos/libdruntime/core/sys/posix/stdio.d |  7 ++--
 2 files changed, 59 insertions(+), 2 deletions(-)

diff --git a/gcc/config/darwin-d.c b/gcc/config/darwin-d.c
index 67d69b721b5..295db5164cc 100644
--- a/gcc/config/darwin-d.c
+++ b/gcc/config/darwin-d.c
@@ -21,6 +21,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "tm_d.h"
 #include "d/d-target.h"
 #include "d/d-target-def.h"
+#include "diagnostic.h"
 
 /* Implement TARGET_D_OS_VERSIONS for Darwin targets.  */
 
@@ -42,6 +43,58 @@ darwin_d_handle_target_object_format (void)
   return build_string_literal (strlen (objfmt) + 1, objfmt);
 }
 
+/* Given an OS X version VERSION_STR, return it as a six digit integer.  */
+
+static unsigned long
+parse_version (const char *version_str)
+{
+  const size_t version_len = strlen (version_str);
+  if (version_len < 1)
+    return 0;
+
+  /* Version string must consist of digits and periods only.  */
+  if (strspn (version_str, "0123456789.") != version_len)
+    return 0;
+
+  if (!ISDIGIT (version_str[0]) || !ISDIGIT (version_str[version_len - 1]))
+    return 0;
+
+  char *endptr;
+  unsigned long major = strtoul (version_str, &endptr, 10);
+  version_str = endptr + ((*endptr == '.') ? 1 : 0);
+
+  /* Version string must not contain adjacent periods.  */
+  if (*version_str == '.')
+    return 0;
+
+  unsigned long minor = strtoul (version_str, &endptr, 10);
+  version_str = endptr + ((*endptr == '.') ? 1 : 0);
+
+  unsigned long tiny = strtoul (version_str, &endptr, 10);
+
+  /* Version string must contain no more than three tokens.  */
+  if (*endptr != '\0')
+    return 0;
+
+  return (major * 10000) + (minor * 100) + tiny;
+}
+
+/* Handle a call to `__traits(getTargetInfo, "osxVersionMin")'.  */
+
+static tree
+darwin_d_handle_target_version_min (void)
+{
+  const unsigned long version = parse_version (darwin_macosx_version_min);
+
+  if (version == 0)
+    {
+      error ("unknown value %qs of %<-mmacosx-version-min%>",
+	     darwin_macosx_version_min);
+    }
+
+  return build_int_cst_type (integer_type_node, version);
+}
+
 /* Implement TARGET_D_REGISTER_OS_TARGET_INFO for Darwin targets.  */
 
 static void
@@ -49,6 +102,7 @@ darwin_d_register_target_info (void)
 {
   const struct d_target_info_spec handlers[] = {
     { "objectFormat", darwin_d_handle_target_object_format },
+    { "osxVersionMin", darwin_d_handle_target_version_min },
     { NULL, NULL },
   };
 
diff --git a/libphobos/libdruntime/core/sys/posix/stdio.d b/libphobos/libdruntime/core/sys/posix/stdio.d
index 41b52da7c64..fcd9fcbc29c 100644
--- a/libphobos/libdruntime/core/sys/posix/stdio.d
+++ b/libphobos/libdruntime/core/sys/posix/stdio.d
@@ -378,8 +378,11 @@ else version (Darwin)
     int   fseeko(FILE*, off_t, int);
     off_t ftello(FILE*);
 
-    ssize_t getdelim(char**, size_t*, int, FILE*);
-    ssize_t getline(char**, size_t*, FILE*);
+    static if (__traits(getTargetInfo, "osxVersionMin") >= 100700)
+    {
+        ssize_t getdelim(char**, size_t*, int, FILE*);
+        ssize_t getline(char**, size_t*, FILE*);
+    }
 }
 else version (FreeBSD)
 {


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [gcc(refs/users/iains/heads/d-for-darwin)] darwin: Implement osxVersionMin for getTargetInfo
@ 2021-10-11 20:35 Iain D Sandoe
  0 siblings, 0 replies; 6+ messages in thread
From: Iain D Sandoe @ 2021-10-11 20:35 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:3ad1f9e192e579fc590ed6551ac9b3ff47db3e2e

commit 3ad1f9e192e579fc590ed6551ac9b3ff47db3e2e
Author: Iain Buclaw <ibuclaw@gdcproject.org>
Date:   Sat Dec 5 00:08:04 2020 +0100

    darwin: Implement osxVersionMin for getTargetInfo

Diff:
---
 gcc/config/darwin-d.c                        | 54 ++++++++++++++++++++++++++++
 libphobos/libdruntime/core/sys/posix/stdio.d |  7 ++--
 2 files changed, 59 insertions(+), 2 deletions(-)

diff --git a/gcc/config/darwin-d.c b/gcc/config/darwin-d.c
index 67d69b721b5..295db5164cc 100644
--- a/gcc/config/darwin-d.c
+++ b/gcc/config/darwin-d.c
@@ -21,6 +21,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "tm_d.h"
 #include "d/d-target.h"
 #include "d/d-target-def.h"
+#include "diagnostic.h"
 
 /* Implement TARGET_D_OS_VERSIONS for Darwin targets.  */
 
@@ -42,6 +43,58 @@ darwin_d_handle_target_object_format (void)
   return build_string_literal (strlen (objfmt) + 1, objfmt);
 }
 
+/* Given an OS X version VERSION_STR, return it as a six digit integer.  */
+
+static unsigned long
+parse_version (const char *version_str)
+{
+  const size_t version_len = strlen (version_str);
+  if (version_len < 1)
+    return 0;
+
+  /* Version string must consist of digits and periods only.  */
+  if (strspn (version_str, "0123456789.") != version_len)
+    return 0;
+
+  if (!ISDIGIT (version_str[0]) || !ISDIGIT (version_str[version_len - 1]))
+    return 0;
+
+  char *endptr;
+  unsigned long major = strtoul (version_str, &endptr, 10);
+  version_str = endptr + ((*endptr == '.') ? 1 : 0);
+
+  /* Version string must not contain adjacent periods.  */
+  if (*version_str == '.')
+    return 0;
+
+  unsigned long minor = strtoul (version_str, &endptr, 10);
+  version_str = endptr + ((*endptr == '.') ? 1 : 0);
+
+  unsigned long tiny = strtoul (version_str, &endptr, 10);
+
+  /* Version string must contain no more than three tokens.  */
+  if (*endptr != '\0')
+    return 0;
+
+  return (major * 10000) + (minor * 100) + tiny;
+}
+
+/* Handle a call to `__traits(getTargetInfo, "osxVersionMin")'.  */
+
+static tree
+darwin_d_handle_target_version_min (void)
+{
+  const unsigned long version = parse_version (darwin_macosx_version_min);
+
+  if (version == 0)
+    {
+      error ("unknown value %qs of %<-mmacosx-version-min%>",
+	     darwin_macosx_version_min);
+    }
+
+  return build_int_cst_type (integer_type_node, version);
+}
+
 /* Implement TARGET_D_REGISTER_OS_TARGET_INFO for Darwin targets.  */
 
 static void
@@ -49,6 +102,7 @@ darwin_d_register_target_info (void)
 {
   const struct d_target_info_spec handlers[] = {
     { "objectFormat", darwin_d_handle_target_object_format },
+    { "osxVersionMin", darwin_d_handle_target_version_min },
     { NULL, NULL },
   };
 
diff --git a/libphobos/libdruntime/core/sys/posix/stdio.d b/libphobos/libdruntime/core/sys/posix/stdio.d
index 41b52da7c64..fcd9fcbc29c 100644
--- a/libphobos/libdruntime/core/sys/posix/stdio.d
+++ b/libphobos/libdruntime/core/sys/posix/stdio.d
@@ -378,8 +378,11 @@ else version (Darwin)
     int   fseeko(FILE*, off_t, int);
     off_t ftello(FILE*);
 
-    ssize_t getdelim(char**, size_t*, int, FILE*);
-    ssize_t getline(char**, size_t*, FILE*);
+    static if (__traits(getTargetInfo, "osxVersionMin") >= 100700)
+    {
+        ssize_t getdelim(char**, size_t*, int, FILE*);
+        ssize_t getline(char**, size_t*, FILE*);
+    }
 }
 else version (FreeBSD)
 {


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [gcc(refs/users/iains/heads/d-for-darwin)] darwin: Implement osxVersionMin for getTargetInfo
@ 2020-12-21 20:36 Iain D Sandoe
  0 siblings, 0 replies; 6+ messages in thread
From: Iain D Sandoe @ 2020-12-21 20:36 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:8290810240588102a6685103e4b83da762fddc37

commit 8290810240588102a6685103e4b83da762fddc37
Author: Iain Buclaw <ibuclaw@gdcproject.org>
Date:   Sat Dec 5 00:08:04 2020 +0100

    darwin: Implement osxVersionMin for getTargetInfo

Diff:
---
 gcc/config/darwin-d.c                        | 54 ++++++++++++++++++++++++++++
 libphobos/libdruntime/core/sys/posix/stdio.d |  7 ++--
 2 files changed, 59 insertions(+), 2 deletions(-)

diff --git a/gcc/config/darwin-d.c b/gcc/config/darwin-d.c
index 7b8c72efe27..9ebc90fd1ca 100644
--- a/gcc/config/darwin-d.c
+++ b/gcc/config/darwin-d.c
@@ -21,6 +21,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "tm_d.h"
 #include "d/d-target.h"
 #include "d/d-target-def.h"
+#include "diagnostic.h"
 
 /* Implement TARGET_D_OS_VERSIONS for Darwin targets.  */
 
@@ -42,6 +43,58 @@ darwin_d_handle_target_object_format (void)
   return build_string_literal (strlen (objfmt) + 1, objfmt);
 }
 
+/* Given an OS X version VERSION_STR, return it as a six digit integer.  */
+
+static unsigned long
+parse_version (const char *version_str)
+{
+  const size_t version_len = strlen (version_str);
+  if (version_len < 1)
+    return 0;
+
+  /* Version string must consist of digits and periods only.  */
+  if (strspn (version_str, "0123456789.") != version_len)
+    return 0;
+
+  if (!ISDIGIT (version_str[0]) || !ISDIGIT (version_str[version_len - 1]))
+    return 0;
+
+  char *endptr;
+  unsigned long major = strtoul (version_str, &endptr, 10);
+  version_str = endptr + ((*endptr == '.') ? 1 : 0);
+
+  /* Version string must not contain adjacent periods.  */
+  if (*version_str == '.')
+    return 0;
+
+  unsigned long minor = strtoul (version_str, &endptr, 10);
+  version_str = endptr + ((*endptr == '.') ? 1 : 0);
+
+  unsigned long tiny = strtoul (version_str, &endptr, 10);
+
+  /* Version string must contain no more than three tokens.  */
+  if (*endptr != '\0')
+    return 0;
+
+  return (major * 10000) + (minor * 100) + tiny;
+}
+
+/* Handle a call to `__traits(getTargetInfo, "osxVersionMin")'.  */
+
+static tree
+darwin_d_handle_target_version_min (void)
+{
+  const unsigned long version = parse_version (darwin_macosx_version_min);
+
+  if (version == 0)
+    {
+      error ("unknown value %qs of %<-mmacosx-version-min%>",
+	     darwin_macosx_version_min);
+    }
+
+  return build_int_cst_type (integer_type_node, version);
+}
+
 /* Implement TARGET_D_REGISTER_OS_TARGET_INFO for Darwin targets.  */
 
 static void
@@ -49,6 +102,7 @@ darwin_d_register_target_info (void)
 {
   const struct d_target_info_spec handlers[] = {
     { "objectFormat", darwin_d_handle_target_object_format },
+    { "osxVersionMin", darwin_d_handle_target_version_min },
     { NULL, NULL },
   };
 
diff --git a/libphobos/libdruntime/core/sys/posix/stdio.d b/libphobos/libdruntime/core/sys/posix/stdio.d
index a47aec525e8..0b3f8436254 100644
--- a/libphobos/libdruntime/core/sys/posix/stdio.d
+++ b/libphobos/libdruntime/core/sys/posix/stdio.d
@@ -377,8 +377,11 @@ else version (Darwin)
     int   fseeko(FILE*, off_t, int);
     off_t ftello(FILE*);
 
-    ssize_t getdelim(char**, size_t*, int, FILE*);
-    ssize_t getline(char**, size_t*, FILE*);
+    static if (__traits(getTargetInfo, "osxVersionMin") >= 100700)
+    {
+        ssize_t getdelim(char**, size_t*, int, FILE*);
+        ssize_t getline(char**, size_t*, FILE*);
+    }
 }
 else version (FreeBSD)
 {


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [gcc(refs/users/iains/heads/d-for-darwin)] darwin: Implement osxVersionMin for getTargetInfo
@ 2020-12-13 17:43 Iain D Sandoe
  0 siblings, 0 replies; 6+ messages in thread
From: Iain D Sandoe @ 2020-12-13 17:43 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:1f5441578341a62611f3136225038f5a3a143119

commit 1f5441578341a62611f3136225038f5a3a143119
Author: Iain Buclaw <ibuclaw@gdcproject.org>
Date:   Sat Dec 5 00:08:04 2020 +0100

    darwin: Implement osxVersionMin for getTargetInfo

Diff:
---
 gcc/config/darwin-d.c                        | 54 ++++++++++++++++++++++++++++
 libphobos/libdruntime/core/sys/posix/stdio.d |  7 ++--
 2 files changed, 59 insertions(+), 2 deletions(-)

diff --git a/gcc/config/darwin-d.c b/gcc/config/darwin-d.c
index 7b8c72efe27..9ebc90fd1ca 100644
--- a/gcc/config/darwin-d.c
+++ b/gcc/config/darwin-d.c
@@ -21,6 +21,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "tm_d.h"
 #include "d/d-target.h"
 #include "d/d-target-def.h"
+#include "diagnostic.h"
 
 /* Implement TARGET_D_OS_VERSIONS for Darwin targets.  */
 
@@ -42,6 +43,58 @@ darwin_d_handle_target_object_format (void)
   return build_string_literal (strlen (objfmt) + 1, objfmt);
 }
 
+/* Given an OS X version VERSION_STR, return it as a six digit integer.  */
+
+static unsigned long
+parse_version (const char *version_str)
+{
+  const size_t version_len = strlen (version_str);
+  if (version_len < 1)
+    return 0;
+
+  /* Version string must consist of digits and periods only.  */
+  if (strspn (version_str, "0123456789.") != version_len)
+    return 0;
+
+  if (!ISDIGIT (version_str[0]) || !ISDIGIT (version_str[version_len - 1]))
+    return 0;
+
+  char *endptr;
+  unsigned long major = strtoul (version_str, &endptr, 10);
+  version_str = endptr + ((*endptr == '.') ? 1 : 0);
+
+  /* Version string must not contain adjacent periods.  */
+  if (*version_str == '.')
+    return 0;
+
+  unsigned long minor = strtoul (version_str, &endptr, 10);
+  version_str = endptr + ((*endptr == '.') ? 1 : 0);
+
+  unsigned long tiny = strtoul (version_str, &endptr, 10);
+
+  /* Version string must contain no more than three tokens.  */
+  if (*endptr != '\0')
+    return 0;
+
+  return (major * 10000) + (minor * 100) + tiny;
+}
+
+/* Handle a call to `__traits(getTargetInfo, "osxVersionMin")'.  */
+
+static tree
+darwin_d_handle_target_version_min (void)
+{
+  const unsigned long version = parse_version (darwin_macosx_version_min);
+
+  if (version == 0)
+    {
+      error ("unknown value %qs of %<-mmacosx-version-min%>",
+	     darwin_macosx_version_min);
+    }
+
+  return build_int_cst_type (integer_type_node, version);
+}
+
 /* Implement TARGET_D_REGISTER_OS_TARGET_INFO for Darwin targets.  */
 
 static void
@@ -49,6 +102,7 @@ darwin_d_register_target_info (void)
 {
   const struct d_target_info_spec handlers[] = {
     { "objectFormat", darwin_d_handle_target_object_format },
+    { "osxVersionMin", darwin_d_handle_target_version_min },
     { NULL, NULL },
   };
 
diff --git a/libphobos/libdruntime/core/sys/posix/stdio.d b/libphobos/libdruntime/core/sys/posix/stdio.d
index a47aec525e8..0b3f8436254 100644
--- a/libphobos/libdruntime/core/sys/posix/stdio.d
+++ b/libphobos/libdruntime/core/sys/posix/stdio.d
@@ -377,8 +377,11 @@ else version (Darwin)
     int   fseeko(FILE*, off_t, int);
     off_t ftello(FILE*);
 
-    ssize_t getdelim(char**, size_t*, int, FILE*);
-    ssize_t getline(char**, size_t*, FILE*);
+    static if (__traits(getTargetInfo, "osxVersionMin") >= 100700)
+    {
+        ssize_t getdelim(char**, size_t*, int, FILE*);
+        ssize_t getline(char**, size_t*, FILE*);
+    }
 }
 else version (FreeBSD)
 {


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-10-18 15:54 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-15 19:33 [gcc(refs/users/iains/heads/d-for-darwin)] darwin: Implement osxVersionMin for getTargetInfo Iain D Sandoe
  -- strict thread matches above, loose matches on Subject: below --
2021-10-18 15:54 Iain D Sandoe
2021-10-13  8:30 Iain D Sandoe
2021-10-11 20:35 Iain D Sandoe
2020-12-21 20:36 Iain D Sandoe
2020-12-13 17:43 Iain D Sandoe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).