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:
parent
72cfa07dd3
commit
2c51846728
@ -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;
|
||||
|
@ -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, ®ion);
|
||||
- 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;
|
Loading…
Reference in New Issue
Block a user