Details
-
Bug
-
Resolution: Out of scope
-
Not Evaluated
-
None
-
4.8.0, 4.8.4
-
None
-
Mac OS 10.7+, XCode 4.3+
Description
when compiling against the 10.6sdk in Lion (now located by default in /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.6.sdk) QtWebKit compilation fails with
Undefined symbols for architecture i386: "__CFWebServicesCopyProviderInfo", referenced from: _WKCopyDefaultSearchProviderDisplayName in libWebKitSystemInterfaceLion.a(WebKitSystemInterface.o) "__NSRecommendedScrollerStyle", referenced from: _WKRecommendedScrollerStyle in libWebKitSystemInterfaceLion.a(WebKitSystemInterface.o) "_strndup", referenced from: _WKSandboxExtensionCreateFromSerializedFormat in libWebKitSystemInterfaceLion.a(WebKitSystemInterface.o) "_sandbox_release_fs_extension", referenced from: _WKSandboxExtensionInvalidate in libWebKitSystemInterfaceLion.a(WebKitSystemInterface.o) "_sandbox_consume_fs_extension", referenced from: _WKSandboxExtensionConsume in libWebKitSystemInterfaceLion.a(WebKitSystemInterface.o) "_sandbox_issue_fs_extension", referenced from: _WKSandboxExtensionCreate in libWebKitSystemInterfaceLion.a(WebKitSystemInterface.o) "_CFURLRequestSetRequestPriority", referenced from: _WKSetHTTPPipeliningPriority in libWebKitSystemInterfaceLion.a(WebKitSystemInterface.o) "_CFURLRequestGetRequestPriority", referenced from: _WKGetHTTPPipeliningPriority in libWebKitSystemInterfaceLion.a(WebKitSystemInterface.o) "_CTTypesetterCreateWithUniCharProviderAndOptions", referenced from: _WKCreateCTTypesetterWithUniCharProviderAndOptions in libWebKitSystemInterfaceLion.a(WebKitSystemInterface.o) "_CGIOSurfaceContextCreateImage", referenced from: _WKIOSurfaceContextCreateImage in libWebKitSystemInterfaceLion.a(WebKitSystemInterface.o) "_CGIOSurfaceContextCreate", referenced from: _WKIOSurfaceContextCreate in libWebKitSystemInterfaceLion.a(WebKitSystemInterface.o) "_SecTrustGetTrustResult", referenced from: _WKCopyNSURLResponseCertificateChain in libWebKitSystemInterfaceLion.a(WebKitSystemInterface.o) "_kCFWebServicesProviderDefaultDisplayNameKey", referenced from: _WKCopyDefaultSearchProviderDisplayName in libWebKitSystemInterfaceLion.a(WebKitSystemInterface.o) "_kCFWebServicesTypeWebSearch", referenced from: _WKCopyDefaultSearchProviderDisplayName in libWebKitSystemInterfaceLion.a(WebKitSystemInterface.o) "_kMDItemDownloadedDate", referenced from: _WKSetMetadataURL in libWebKitSystemInterfaceLion.a(WebKitSystemInterface.o) ld: symbol(s) not found for architecture i386 collect2: ld returned 1 exit status make[3]: *** [../../../../../../lib/libQtWebKit.4.9.0.dylib] Error 1 make[2]: *** [release-install] Error 2 make[1]: *** [sub-WebKit-qt-QtWebKit-pro-install_subtargets-ordered] Error 2
Upon investigating, you find in src/3rdparty/webkit/WebKit.pro:
# We can know the Mac OS version by using the Darwin major version DARWIN_VERSION = $$split(QMAKE_HOST.version, ".") DARWIN_MAJOR_VERSION = $$first(DARWIN_VERSION) equals(DARWIN_MAJOR_VERSION, "9") | contains(QMAKE_MAC_SDK, "/Developer/SDKs /MacOSX10.5.sdk") { LIBS += $$SOURCE_DIR/../WebKitLibraries/libWebKitSystemInterfaceLeopard. a } else: equals(DARWIN_MAJOR_VERSION, "10") | contains(QMAKE_MAC_SDK, "/Developer/SDKs/MacOSX10.6.sdk") { LIBS += $$SOURCE_DIR/../WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a } else: equals(DARWIN_MAJOR_VERSION, "11") | contains(QMAKE_MAC_SDK, "/Developer/SDKs/MacOSX10.7.sdk") { LIBS += $$SOURCE_DIR/../WebKitLibraries/libWebKitSystemInterfaceLion.a }
so for -sdk to work its argument must be equal to "/Developer/SDKs/MacOSX10.6.sdk". However, with XCode 4.3, this location do not exist anymore.
Instead of testing for the full path
this should be changed into:
# We can know the Mac OS version by using the Darwin major version DARWIN_VERSION = $$split(QMAKE_HOST.version, ".") DARWIN_MAJOR_VERSION = $$first(DARWIN_VERSION) equals(DARWIN_MAJOR_VERSION, "9") | contains(QMAKE_MAC_SDK, ".*MacOSX10.5.sdk") { LIBS += $$SOURCE_DIR/../WebKitLibraries/libWebKitSystemInterfaceLeopard. a } else: equals(DARWIN_MAJOR_VERSION, "10") | contains(QMAKE_MAC_SDK, ".*MacOSX10.6.sdk") { LIBS += $$SOURCE_DIR/../WebKitLibraries/libWebKitSystemInterfaceSnowLeopard.a } else: equals(DARWIN_MAJOR_VERSION, "11") | contains(QMAKE_MAC_SDK, ".*MacOSX10.7.sdk") { LIBS += $$SOURCE_DIR/../WebKitLibraries/libWebKitSystemInterfaceLion.a }
No need to test for the full path, only the actual name of the SDKs will do.
The same issue occur in other .pro file:
The same issue occurs in another .pro file.
One example is src/plugins/bearer/corewlan/corewlan.pro, just as in
ontains(QMAKE_MAC_SDK, "/Developer/SDKs/MacOSX10\.[67]\.sdk")
needs to be replaced with:
ontains(QMAKE_MAC_SDK, ".*MacOSX10\.[67]\.sdk")
as the SDK can now be located in different location than /Developer/SDKs
There may be others, for the time being, I simply run a script replacing them all