From 4847dd3ae903517c875debca870001ef94a32d37 Mon Sep 17 00:00:00 2001 From: Lubos Dolezel Date: Thu, 3 Dec 2015 17:37:56 +0100 Subject: [PATCH] Changes required to have _CFCopyVersionDictionary() working --- src/CFF/CFUtilities.c | 81 ++++++++++++++++++++++++++++ src/CFF/CFUtilities.cpp | 46 ---------------- src/CFF/CFUtilities.h | 3 +- src/CFF/CMakeLists.txt | 2 +- src/CoreServices/CMakeLists.txt | 1 + src/CoreServices/SystemVersion.plist | 16 ++++++ src/external/corefoundation | 2 +- 7 files changed, 101 insertions(+), 50 deletions(-) create mode 100644 src/CFF/CFUtilities.c delete mode 100644 src/CFF/CFUtilities.cpp create mode 100644 src/CoreServices/SystemVersion.plist diff --git a/src/CFF/CFUtilities.c b/src/CFF/CFUtilities.c new file mode 100644 index 000000000..82851fcab --- /dev/null +++ b/src/CFF/CFUtilities.c @@ -0,0 +1,81 @@ + +#include "CFUtilities.h" +#include +#include +#include +#include +#include "CFStringConst.h" +#include +#include "darling-config.h" + +CONST_STRING_DECL(_kCFSystemVersionProductNameKey, "ProductName"); +CONST_STRING_DECL(_kCFSystemVersionProductCopyrightKey, "ProductCopyright"); +CONST_STRING_DECL(_kCFSystemVersionProductVersionKey, "ProductVersion"); +CONST_STRING_DECL(_kCFSystemVersionProductVersionExtraKey, "ProductVersionExtra"); +CONST_STRING_DECL(_kCFSystemVersionProductUserVisibleVersionKey, "UserVisibleVersion"); +CONST_STRING_DECL(_kCFSystemVersionBuildVersionKey, "ProductBuildVersion"); +CONST_STRING_DECL(_kCFSystemVersionProductVersionStringKey, "ProductVersionString"); +CONST_STRING_DECL(_kCFSystemVersionBuildStringKey, "ProductBuildString"); + +__attribute__((constructor)) + static void initConstants() +{ + CFTypeID type = CFStringGetTypeID(); + GSRuntimeConstantInit(_kCFSystemVersionProductNameKey, type); + GSRuntimeConstantInit(_kCFSystemVersionProductCopyrightKey, type); + GSRuntimeConstantInit(_kCFSystemVersionProductVersionKey, type); + GSRuntimeConstantInit(_kCFSystemVersionProductVersionExtraKey, type); + GSRuntimeConstantInit(_kCFSystemVersionBuildVersionKey, type); + GSRuntimeConstantInit(_kCFSystemVersionProductUserVisibleVersionKey, type); + GSRuntimeConstantInit(_kCFSystemVersionProductVersionStringKey, type); + GSRuntimeConstantInit(_kCFSystemVersionBuildStringKey, type); + + CFHash(_kCFSystemVersionBuildStringKey); +} + +Boolean _CFExecutableLinkedOnOrAfter(CFSystemVersion version) +{ + // TODO: For now just say yep, we are newer + return true; +} + +static CFDictionaryRef _CFCopyVersionDictionary(CFStringRef path) +{ + CFURLRef url; + CFDataRef resourceData; + Boolean status; + SInt32 errorCode; + CFErrorRef err; + CFPropertyListRef plist; + + url = CFURLCreateWithFileSystemPath(NULL, path, kCFURLPOSIXPathStyle, 0); + status = CFURLCreateDataAndPropertiesFromResource(NULL, url, &resourceData, + NULL, NULL, &errorCode); + + if (!status) + { + CFRelease(url); + return NULL; + } + + plist = CFPropertyListCreateWithData(NULL, resourceData, kCFPropertyListImmutable, + NULL, &err); + + CFRelease(resourceData); + CFRelease(url); + + return plist; +} + +CFDictionaryRef _CFCopySystemVersionDictionary(void) +{ + CFStringRef str = CFSTR(SHARE_PATH "/SystemVersion.plist"); + return _CFCopyVersionDictionary(str); +} + +CFDictionaryRef _CFCopyServerVersionDictionary(void) +{ + CFStringRef str = CFSTR(SHARE_PATH "/SystemVersion.plist"); + return _CFCopyVersionDictionary(str); +} + diff --git a/src/CFF/CFUtilities.cpp b/src/CFF/CFUtilities.cpp deleted file mode 100644 index 3445dd990..000000000 --- a/src/CFF/CFUtilities.cpp +++ /dev/null @@ -1,46 +0,0 @@ - -#include "CFUtilities.h" -#include -#include - -Boolean _CFExecutableLinkedOnOrAfter(CFSystemVersion version) -{ - // TODO: For now just say yep, we are newer - return true; -} - -static CFDictionaryRef _CFCopyVersionDictionary(CFStringRef path) -{ - static const CFStringRef keys[] = - { - CFSTR("ProductBuildVersion"), - CFSTR("ProductCopyright"), - CFSTR("ProductName"), - CFSTR("ProductUserVisibleVersion"), - CFSTR("ProductVersion") - }; - - static const CFStringRef values[] = - { - CFSTR("12345678"), - CFSTR("See Source Files"), - CFSTR("Darling"), - CFSTR("10.8"), - CFSTR("10.8") - }; - - return CFDictionaryCreate(NULL, (const void**)&keys[0], (const void**)&values[0], 5, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); -} - -CFDictionaryRef _CFCopySystemVersionDictionary(void) -{ - // TODO: Make this a real file installed by Darling and read by _CFCopyVersionDictionary - return _CFCopyVersionDictionary(CFSTR("/System/Library/CoreServices/SystemVersion.plist")); -} - -CFDictionaryRef _CFCopyServerVersionDictionary(void) -{ - // TODO: Make this a real file installed by Darling and read by _CFCopyVersionDictionary - return _CFCopyVersionDictionary(CFSTR("/System/Library/CoreServices/ServerVersion.plist")); -} - diff --git a/src/CFF/CFUtilities.h b/src/CFF/CFUtilities.h index c6f2d7349..0313cf2ed 100644 --- a/src/CFF/CFUtilities.h +++ b/src/CFF/CFUtilities.h @@ -4,8 +4,7 @@ #include #include -typedef enum { -} CFSystemVersion; +typedef int CFSystemVersion; CF_EXPORT Boolean _CFExecutableLinkedOnOrAfter(CFSystemVersion version); diff --git a/src/CFF/CMakeLists.txt b/src/CFF/CMakeLists.txt index 43a3b2dfa..b3449438c 100644 --- a/src/CFF/CMakeLists.txt +++ b/src/CFF/CMakeLists.txt @@ -41,7 +41,7 @@ set(cff_SRCS ) set(cffextra_SRCS - CFUtilities.cpp + CFUtilities.c CFPreferences.mm ../util/debug.cpp ../util/stlutils.cpp diff --git a/src/CoreServices/CMakeLists.txt b/src/CoreServices/CMakeLists.txt index 842955ab7..9b77ac04c 100644 --- a/src/CoreServices/CMakeLists.txt +++ b/src/CoreServices/CMakeLists.txt @@ -64,4 +64,5 @@ add_library(CoreServices SHARED ${CoreServices_SRCS}) target_link_libraries(CoreServices icucore system ${EXTRA_LIBS} CFF cxx iconv) install(TARGETS CoreServices DESTINATION "lib${SUFFIX}/darling") +install(FILES SystemVersion.plist DESTINATION "share/darling") diff --git a/src/CoreServices/SystemVersion.plist b/src/CoreServices/SystemVersion.plist new file mode 100644 index 000000000..a180ee8fc --- /dev/null +++ b/src/CoreServices/SystemVersion.plist @@ -0,0 +1,16 @@ + + + + + ProductBuildVersion + Darling + ProductCopyright + 2012-2015 Lubos Dolezel + ProductName + Mac OS X + ProductUserVisibleVersion + 10.8 + ProductVersion + 10.8 + + diff --git a/src/external/corefoundation b/src/external/corefoundation index fe955a5ee..782a332a0 160000 --- a/src/external/corefoundation +++ b/src/external/corefoundation @@ -1 +1 @@ -Subproject commit fe955a5eed01b574f8f51f6ed6b6d4e1771c9834 +Subproject commit 782a332a0cdf04834981df12beeb0fa7eb064a95 -- 2.51.2