qt48: fix on darwin

because it's ancient, it relies on ancient APIs that Apple has deprecated
for literally years. Our new CoreFoundation cleanup means those APIs are no longer here, so let's kill the functionality. Eventually support for it
got removed from upstream too, so it's not as if we're doing anything too
awful here.
This commit is contained in:
Dan Peebles 2018-09-16 21:04:04 -04:00
parent 72cfa07dd3
commit 2c51846728
2 changed files with 331 additions and 0 deletions

View File

@ -68,6 +68,7 @@ stdenv.mkDerivation rec {
./parallel-configure.patch
./clang-5-darwin.patch
./qt-4.8.7-unixmake-darwin.patch
./kill-legacy-darwin-apis.patch
(substituteAll {
src = ./dlopen-absolute-paths.diff;
cups = if cups != null then lib.getLib cups else null;

View File

@ -0,0 +1,330 @@
diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp
index 4a9049b..c0ac9db 100644
--- a/src/corelib/io/qfilesystemengine_unix.cpp
+++ b/src/corelib/io/qfilesystemengine_unix.cpp
@@ -242,9 +242,8 @@ QFileSystemEntry QFileSystemEngine::canonicalName(const QFileSystemEntry &entry,
#else
char *ret = 0;
# if defined(Q_OS_MAC) && !defined(Q_OS_IOS)
- // When using -mmacosx-version-min=10.4, we get the legacy realpath implementation,
- // which does not work properly with the realpath(X,0) form. See QTBUG-28282.
- if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_6) {
+ // In Nix-on-Darwin, we don't support ancient macOS anyway, and the deleted branch relies on
+ // a symbol that's been deprecated for years and that our CF doesn't have
ret = (char*)malloc(PATH_MAX + 1);
if (ret && realpath(entry.nativeFilePath().constData(), (char*)ret) == 0) {
const int savedErrno = errno; // errno is checked below, and free() might change it
@@ -252,19 +251,6 @@ QFileSystemEntry QFileSystemEngine::canonicalName(const QFileSystemEntry &entry,
errno = savedErrno;
ret = 0;
}
- } else {
- // on 10.5 we can use FSRef to resolve the file path.
- QString path = QDir::cleanPath(entry.filePath());
- FSRef fsref;
- if (FSPathMakeRef((const UInt8 *)path.toUtf8().data(), &fsref, 0) == noErr) {
- CFURLRef urlref = CFURLCreateFromFSRef(NULL, &fsref);
- CFStringRef canonicalPath = CFURLCopyFileSystemPath(urlref, kCFURLPOSIXPathStyle);
- QString ret = QCFString::toQString(canonicalPath);
- CFRelease(canonicalPath);
- CFRelease(urlref);
- return QFileSystemEntry(ret);
- }
- }
# else
# if _POSIX_VERSION >= 200801L
ret = realpath(entry.nativeFilePath().constData(), (char*)0);
diff --git a/src/3rdparty/webkit/Source/WebCore/platform/mac/WebCoreNSStringExtras.h b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebCoreNSStringExtras.h
index 3bf7342..b6bcfc0 100644
--- a/src/3rdparty/webkit/Source/WebCore/platform/mac/WebCoreNSStringExtras.h
+++ b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebCoreNSStringExtras.h
@@ -43,7 +43,6 @@ BOOL stringIsCaseInsensitiveEqualToString(NSString *first, NSString *second);
BOOL hasCaseInsensitiveSuffix(NSString *string, NSString *suffix);
BOOL hasCaseInsensitiveSubstring(NSString *string, NSString *substring);
NSString *filenameByFixingIllegalCharacters(NSString *string);
-CFStringEncoding stringEncodingForResource(Handle resource);
#ifdef __cplusplus
}
diff --git a/src/3rdparty/webkit/Source/WebCore/platform/mac/WebCoreNSStringExtras.mm b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebCoreNSStringExtras.mm
index d6c3f0c..c88ca76 100644
--- a/src/3rdparty/webkit/Source/WebCore/platform/mac/WebCoreNSStringExtras.mm
+++ b/src/3rdparty/webkit/Source/WebCore/platform/mac/WebCoreNSStringExtras.mm
@@ -68,45 +68,4 @@ BOOL hasCaseInsensitiveSubstring(NSString *string, NSString *substring)
return filename;
}
-CFStringEncoding stringEncodingForResource(Handle resource)
-{
- short resRef = HomeResFile(resource);
- if (ResError() != noErr)
- return NSMacOSRomanStringEncoding;
-
- // Get the FSRef for the current resource file
- FSRef fref;
- OSStatus error = FSGetForkCBInfo(resRef, 0, NULL, NULL, NULL, &fref, NULL);
- if (error != noErr)
- return NSMacOSRomanStringEncoding;
-
- RetainPtr<CFURLRef> url(AdoptCF, CFURLCreateFromFSRef(NULL, &fref));
- if (!url)
- return NSMacOSRomanStringEncoding;
-
- NSString *path = [(NSURL *)url.get() path];
-
- // Get the lproj directory name
- path = [path stringByDeletingLastPathComponent];
- if (!stringIsCaseInsensitiveEqualToString([path pathExtension], @"lproj"))
- return NSMacOSRomanStringEncoding;
-
- NSString *directoryName = [[path stringByDeletingPathExtension] lastPathComponent];
- RetainPtr<CFStringRef> locale(AdoptCF, CFLocaleCreateCanonicalLocaleIdentifierFromString(NULL, (CFStringRef)directoryName));
- if (!locale)
- return NSMacOSRomanStringEncoding;
-
- LangCode lang;
- RegionCode region;
- error = LocaleStringToLangAndRegionCodes([(NSString *)locale.get() UTF8String], &lang, &region);
- if (error != noErr)
- return NSMacOSRomanStringEncoding;
-
- TextEncoding encoding;
- error = UpgradeScriptInfoToTextEncoding(kTextScriptDontCare, lang, region, NULL, &encoding);
- if (error != noErr)
- return NSMacOSRomanStringEncoding;
-
- return encoding;
-}
diff --git a/src/3rdparty/webkit/Source/WebCore/plugins/mac/PluginPackageMac.cpp b/src/3rdparty/webkit/Source/WebCore/plugins/mac/PluginPackageMac.cpp
index 865ea32..20bda8d 100644
--- a/src/3rdparty/webkit/Source/WebCore/plugins/mac/PluginPackageMac.cpp
+++ b/src/3rdparty/webkit/Source/WebCore/plugins/mac/PluginPackageMac.cpp
@@ -101,33 +101,6 @@ static WTF::RetainPtr<CFDictionaryRef> readPListFile(CFStringRef fileName, bool
return map;
}
-static Vector<String> stringListFromResourceId(SInt16 id)
-{
- Vector<String> list;
-
- Handle handle = Get1Resource('STR#', id);
- if (!handle)
- return list;
-
- CFStringEncoding encoding = stringEncodingForResource(handle);
-
- unsigned char* p = (unsigned char*)*handle;
- if (!p)
- return list;
-
- SInt16 count = *(SInt16*)p;
- p += sizeof(SInt16);
-
- for (SInt16 i = 0; i < count; ++i) {
- unsigned char length = *p;
- WTF::RetainPtr<CFStringRef> str = CFStringCreateWithPascalString(0, p, encoding);
- list.append(str.get());
- p += 1 + length;
- }
-
- return list;
-}
-
bool PluginPackage::fetchInfo()
{
if (!load())
@@ -202,36 +175,8 @@ bool PluginPackage::fetchInfo()
m_description = (CFStringRef)CFBundleGetValueForInfoDictionaryKey(m_module, CFSTR("WebPluginDescription"));
} else {
- int resFile = CFBundleOpenBundleResourceMap(m_module);
-
- UseResFile(resFile);
-
- Vector<String> mimes = stringListFromResourceId(MIMEListStringStringNumber);
-
- if (mimes.size() % 2 != 0)
- return false;
-
- Vector<String> descriptions = stringListFromResourceId(MIMEDescriptionStringNumber);
- if (descriptions.size() != mimes.size() / 2)
- return false;
-
- for (size_t i = 0; i < mimes.size(); i += 2) {
- String mime = mimes[i].lower();
- Vector<String> extensions;
- mimes[i + 1].lower().split(UChar(','), extensions);
-
- m_mimeToExtensions.set(mime, extensions);
-
- m_mimeToDescriptions.set(mime, descriptions[i / 2]);
- }
-
- Vector<String> names = stringListFromResourceId(PluginNameOrDescriptionStringNumber);
- if (names.size() == 2) {
- m_description = names[0];
- m_name = names[1];
- }
-
- CFBundleCloseBundleResourceMap(m_module, resFile);
+ LOG(Plugins, "Nix removed ancient code that relies on long-deprecated functionality that we don't want to support!");
+ return false;
}
LOG(Plugins, "PluginPackage::fetchInfo(): Found plug-in '%s'", m_name.utf8().data());
diff --git a/src/3rdparty/webkit/Source/WebKit2/Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm b/src/3rdparty/webkit/Source/WebKit2/Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm
index b206e48..669d442 100644
--- a/src/3rdparty/webkit/Source/WebKit2/Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm
+++ b/src/3rdparty/webkit/Source/WebKit2/Shared/Plugins/Netscape/mac/NetscapePluginModuleMac.mm
@@ -26,7 +26,6 @@
#import "config.h"
#import "NetscapePluginModule.h"
-#import <WebCore/WebCoreNSStringExtras.h>
#import <wtf/HashSet.h>
using namespace WebCore;
@@ -196,132 +195,6 @@ static bool getPluginInfoFromPropertyLists(CFBundleRef bundle, PluginInfo& plugi
return true;
}
-class ResourceMap {
-public:
- explicit ResourceMap(CFBundleRef bundle)
- : m_bundle(bundle)
- , m_currentResourceFile(CurResFile())
- , m_bundleResourceMap(CFBundleOpenBundleResourceMap(m_bundle))
- {
- UseResFile(m_bundleResourceMap);
- }
-
- ~ResourceMap()
- {
- // Close the resource map.
- CFBundleCloseBundleResourceMap(m_bundle, m_bundleResourceMap);
-
- // And restore the old resource.
- UseResFile(m_currentResourceFile);
- }
-
- bool isValid() const { return m_bundleResourceMap != -1; }
-
-private:
- CFBundleRef m_bundle;
- ResFileRefNum m_currentResourceFile;
- ResFileRefNum m_bundleResourceMap;
-};
-
-static bool getStringListResource(ResID resourceID, Vector<String>& stringList) {
- Handle stringListHandle = Get1Resource('STR#', resourceID);
- if (!stringListHandle || !*stringListHandle)
- return false;
-
- // Get the string list size.
- Size stringListSize = GetHandleSize(stringListHandle);
- if (stringListSize < static_cast<Size>(sizeof(UInt16)))
- return false;
-
- CFStringEncoding stringEncoding = stringEncodingForResource(stringListHandle);
-
- unsigned char* ptr = reinterpret_cast<unsigned char*>(*stringListHandle);
- unsigned char* end = ptr + stringListSize;
-
- // Get the number of strings in the string list.
- UInt16 numStrings = *reinterpret_cast<UInt16*>(ptr);
- ptr += sizeof(UInt16);
-
- for (UInt16 i = 0; i < numStrings; ++i) {
- // We're past the end of the string, bail.
- if (ptr >= end)
- return false;
-
- // Get the string length.
- unsigned char stringLength = *ptr++;
-
- RetainPtr<CFStringRef> cfString(AdoptCF, CFStringCreateWithBytesNoCopy(kCFAllocatorDefault, ptr, stringLength, stringEncoding, false, kCFAllocatorNull));
- if (!cfString.get())
- return false;
-
- stringList.append(cfString.get());
- ptr += stringLength;
- }
-
- if (ptr != end)
- return false;
-
- return true;
-}
-
-static const ResID PluginNameOrDescriptionStringNumber = 126;
-static const ResID MIMEDescriptionStringNumber = 127;
-static const ResID MIMEListStringStringNumber = 128;
-
-static bool getPluginInfoFromCarbonResources(CFBundleRef bundle, PluginInfo& pluginInfo)
-{
- ResourceMap resourceMap(bundle);
- if (!resourceMap.isValid())
- return false;
-
- // Get the description and name string list.
- Vector<String> descriptionAndName;
- if (!getStringListResource(PluginNameOrDescriptionStringNumber, descriptionAndName))
- return false;
-
- // Get the MIME types and extensions string list. This list needs to be a multiple of two.
- Vector<String> mimeTypesAndExtensions;
- if (!getStringListResource(MIMEListStringStringNumber, mimeTypesAndExtensions))
- return false;
-
- if (mimeTypesAndExtensions.size() % 2)
- return false;
-
- // Now get the MIME type descriptions string list. This string list needs to be the same length as the number of MIME types.
- Vector<String> mimeTypeDescriptions;
- if (!getStringListResource(MIMEDescriptionStringNumber, mimeTypeDescriptions))
- return false;
-
- // Add all MIME types.
- for (size_t i = 0; i < mimeTypesAndExtensions.size() / 2; ++i) {
- MimeClassInfo mimeClassInfo;
-
- const String& mimeType = mimeTypesAndExtensions[i * 2];
- String description;
- if (i < mimeTypeDescriptions.size())
- description = mimeTypeDescriptions[i];
-
- mimeClassInfo.type = mimeType.lower();
- mimeClassInfo.desc = description;
-
- Vector<String> extensions;
- mimeTypesAndExtensions[i * 2 + 1].split(',', extensions);
-
- for (size_t i = 0; i < extensions.size(); ++i)
- mimeClassInfo.extensions.append(extensions[i].lower());
-
- pluginInfo.mimes.append(mimeClassInfo);
- }
-
- // Set the description and name if they exist.
- if (descriptionAndName.size() > 0)
- pluginInfo.desc = descriptionAndName[0];
- if (descriptionAndName.size() > 1)
- pluginInfo.name = descriptionAndName[1];
-
- return true;
-}
-
bool NetscapePluginModule::getPluginInfo(const String& pluginPath, PluginInfoStore::Plugin& plugin)
{
RetainPtr<CFStringRef> bundlePath(AdoptCF, pluginPath.createCFString());
@@ -344,8 +217,7 @@ static bool getPluginInfoFromCarbonResources(CFBundleRef bundle, PluginInfo& plu
return false;
// Check that there's valid info for this plug-in.
- if (!getPluginInfoFromPropertyLists(bundle.get(), plugin.info) &&
- !getPluginInfoFromCarbonResources(bundle.get(), plugin.info))
+ if (!getPluginInfoFromPropertyLists(bundle.get(), plugin.info))
return false;
plugin.path = pluginPath;