-
Bug
-
Resolution: Out of scope
-
Not Evaluated
-
None
-
4.8.0, 4.8.4
-
None
-
Mac OS 10.7+, XCode 4.3+
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