[compiler-rt] r345551 - [compiler-rt][builtins] Don't #include CoreFoundation in os_version_check.c

Erik Pilkington via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 29 16:01:27 PDT 2018


Author: epilk
Date: Mon Oct 29 16:01:26 2018
New Revision: 345551

URL: http://llvm.org/viewvc/llvm-project?rev=345551&view=rev
Log:
[compiler-rt][builtins] Don't #include CoreFoundation in os_version_check.c

This breaks some configurations, so just forward declare everything that we need.

rdar://35943793

Differential revision: https://reviews.llvm.org/D50269

Modified:
    compiler-rt/trunk/lib/builtins/os_version_check.c

Modified: compiler-rt/trunk/lib/builtins/os_version_check.c
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/os_version_check.c?rev=345551&r1=345550&r2=345551&view=diff
==============================================================================
--- compiler-rt/trunk/lib/builtins/os_version_check.c (original)
+++ compiler-rt/trunk/lib/builtins/os_version_check.c Mon Oct 29 16:01:26 2018
@@ -15,7 +15,6 @@
 
 #ifdef __APPLE__
 
-#include <CoreFoundation/CoreFoundation.h>
 #include <TargetConditionals.h>
 #include <dispatch/dispatch.h>
 #include <dlfcn.h>
@@ -28,6 +27,33 @@
 static int32_t GlobalMajor, GlobalMinor, GlobalSubminor;
 static dispatch_once_t DispatchOnceCounter;
 
+/* We can't include <CoreFoundation/CoreFoundation.h> directly from here, so
+ * just forward declare everything that we need from it. */
+
+typedef const void *CFDataRef, *CFAllocatorRef, *CFPropertyListRef,
+                   *CFStringRef, *CFDictionaryRef, *CFTypeRef, *CFErrorRef;
+
+#if __LLP64__
+typedef unsigned long long CFTypeID;
+typedef unsigned long long CFOptionFlags;
+typedef signed long long CFIndex;
+#else
+typedef unsigned long CFTypeID;
+typedef unsigned long CFOptionFlags;
+typedef signed long CFIndex;
+#endif
+
+typedef unsigned char UInt8;
+typedef _Bool Boolean;
+typedef CFIndex CFPropertyListFormat;
+typedef uint32_t CFStringEncoding;
+
+/* kCFStringEncodingASCII analog. */
+#define CF_STRING_ENCODING_ASCII 0x0600
+/* kCFStringEncodingUTF8 analog. */
+#define CF_STRING_ENCODING_UTF8 0x08000100
+#define CF_PROPERTY_LIST_IMMUTABLE 0
+
 typedef CFDataRef (*CFDataCreateWithBytesNoCopyFuncTy)(CFAllocatorRef,
                                                        const UInt8 *, CFIndex,
                                                        CFAllocatorRef);
@@ -55,8 +81,7 @@ static void parseSystemVersionPList(void
   const void *NullAllocator = dlsym(RTLD_DEFAULT, "kCFAllocatorNull");
   if (!NullAllocator)
     return;
-  const CFAllocatorRef kCFAllocatorNull =
-      *(const CFAllocatorRef *)NullAllocator;
+  const CFAllocatorRef AllocatorNull = *(const CFAllocatorRef *)NullAllocator;
   CFDataCreateWithBytesNoCopyFuncTy CFDataCreateWithBytesNoCopyFunc =
       (CFDataCreateWithBytesNoCopyFuncTy)dlsym(RTLD_DEFAULT,
                                                "CFDataCreateWithBytesNoCopy");
@@ -140,21 +165,21 @@ static void parseSystemVersionPList(void
   /* Get the file buffer into CF's format. We pass in a null allocator here *
    * because we free PListBuf ourselves */
   FileContentsRef = (*CFDataCreateWithBytesNoCopyFunc)(
-      NULL, PListBuf, (CFIndex)NumRead, kCFAllocatorNull);
+      NULL, PListBuf, (CFIndex)NumRead, AllocatorNull);
   if (!FileContentsRef)
     goto Fail;
 
   if (CFPropertyListCreateWithDataFunc)
     PListRef = (*CFPropertyListCreateWithDataFunc)(
-        NULL, FileContentsRef, kCFPropertyListImmutable, NULL, NULL);
+        NULL, FileContentsRef, CF_PROPERTY_LIST_IMMUTABLE, NULL, NULL);
   else
     PListRef = (*CFPropertyListCreateFromXMLDataFunc)(
-        NULL, FileContentsRef, kCFPropertyListImmutable, NULL);
+        NULL, FileContentsRef, CF_PROPERTY_LIST_IMMUTABLE, NULL);
   if (!PListRef)
     goto Fail;
 
   CFStringRef ProductVersion = (*CFStringCreateWithCStringNoCopyFunc)(
-      NULL, "ProductVersion", kCFStringEncodingASCII, kCFAllocatorNull);
+      NULL, "ProductVersion", CF_STRING_ENCODING_ASCII, AllocatorNull);
   if (!ProductVersion)
     goto Fail;
   CFTypeRef OpaqueValue = (*CFDictionaryGetValueFunc)(PListRef, ProductVersion);
@@ -165,7 +190,7 @@ static void parseSystemVersionPList(void
 
   char VersionStr[32];
   if (!(*CFStringGetCStringFunc)((CFStringRef)OpaqueValue, VersionStr,
-                                 sizeof(VersionStr), kCFStringEncodingUTF8))
+                                 sizeof(VersionStr), CF_STRING_ENCODING_UTF8))
     goto Fail;
   sscanf(VersionStr, "%d.%d.%d", &GlobalMajor, &GlobalMinor, &GlobalSubminor);
 




More information about the llvm-commits mailing list