Build failure of Qt 5.2 on Mac OS 10.9 with Xcode 5.0.2 - can't find MacPorts ICU
-
I have same problem.
Please help solve this! -
and one more error:
@....
loader/FrameLoader.cpp:877:44: error: member access into incomplete type 'WebCore::Archive'
ArchiveResource* mainResource = archive->mainResource();
^
loader/FrameLoader.h:51:7: note: forward declaration of 'WebCore::Archive'
class Archive;
^
loader/FrameLoader.cpp:882:47: error: member access into incomplete type 'WebCore::ArchiveResource'
SubstituteData substituteData(mainResource->data(), mainResource->mimeType(), mainResource->textEncoding(), KURL());
^
loader/DocumentLoader.h:63:11: note: forward declaration of 'WebCore::ArchiveResource'
class ArchiveResource;
^
loader/FrameLoader.cpp:884:41: error: member access into incomplete type 'WebCore::ArchiveResource'
ResourceRequest request(mainResource->url());
^
loader/DocumentLoader.h:63:11: note: forward declaration of 'WebCore::ArchiveResource'
class ArchiveResource;
^
In file included from loader/FrameLoader.cpp:36:
In file included from loader/FrameLoader.h:38:
In file included from dom/IconURL.h:34:
In file included from platform/KURL.h:30:
In file included from ../WTF/wtf/HashMap.h:24:
In file included from ../WTF/wtf/HashTable.h:28:
In file included from ../WTF/wtf/HashTraits.h:24:
In file included from ../WTF/wtf/HashFunctions.h:24:
In file included from ../WTF/wtf/RefPtr.h:29:
../WTF/wtf/PassRefPtr.h:52:16: error: member access into incomplete type 'WebCore::Archive'
ptr->deref();
^
../WTF/wtf/PassRefPtr.h:67:39: note: in instantiation of function template specialization 'WTF::derefIfNotNullWebCore::Archive' requested here
ALWAYS_INLINE ~PassRefPtr() { derefIfNotNull(m_ptr); }
^
loader/FrameLoader.cpp:852:39: note: in instantiation of member function 'WTF::PassRefPtrWebCore::Archive::~PassRefPtr' requested here
RefPtr<Archive> subframeArchive = activeDocumentLoader()->popArchiveForSubframe(childFrame->tree()->uniqueName(), url);
^
loader/FrameLoader.h:51:7: note: forward declaration of 'WebCore::Archive'
class Archive;
^
In file included from loader/FrameLoader.cpp:36:
In file included from loader/FrameLoader.h:38:
In file included from dom/IconURL.h:34:
In file included from platform/KURL.h:30:
In file included from ../WTF/wtf/HashMap.h:24:
In file included from ../WTF/wtf/HashTable.h:28:
In file included from ../WTF/wtf/HashTraits.h:24:
In file included from ../WTF/wtf/HashFunctions.h:24:
../WTF/wtf/RefPtr.h:62:35: error: no matching function for call to 'derefIfNotNull'
ALWAYS_INLINE ~RefPtr() { derefIfNotNull(m_ptr); }
^~~~~~~~~~~~~~
loader/FrameLoader.cpp:852:39: note: in instantiation of member function 'WTF::RefPtrWebCore::Archive::~RefPtr' requested here
RefPtr<Archive> subframeArchive = activeDocumentLoader()->popArchiveForSubframe(childFrame->tree()->uniqueName(), url);
^
../WTF/wtf/PassRefPtr.h:49:48: note: candidate template ignored: substitution failure [with T = WebCore::Archive]
template<typename T> REF_DEREF_INLINE void derefIfNotNull(T* ptr)
^
../WTF/wtf/PassRefPtr.h:46:16: error: member access into incomplete type 'WebCore::Archive'
ptr->ref();
^
../WTF/wtf/PassRefPtr.h:60:43: note: in instantiation of function template specialization 'WTF::refIfNotNullWebCore::Archive' requested here
PassRefPtr(T* ptr) : m_ptr(ptr) { refIfNotNull(ptr); }
^
loader/FrameLoader.cpp:890:32: note: in instantiation of member function 'WTF::PassRefPtrWebCore::Archive::PassRefPtr' requested here
documentLoader->setArchive(archive.get());
^
loader/FrameLoader.h:51:7: note: forward declaration of 'WebCore::Archive'
class Archive;
^
6 errors generated.
make[3]: *** [.obj/debug/loader/FrameLoader.o] Error 1
make[2]: *** [debug-all] Error 2
make[1]: *** [sub-Target-pri-make_first-ordered] Error 2
make: *** [sub-Source-WebCore-WebCore-pro-make_first-ordered] Error 2
ZOleg-Mac:qtwebkit zoleg$
@ -
Any news from developers of Qt?
-
I am hitting this also. The root of the issue is that the file which is failing to compile is an objective-c file. The way the configure script is written, it is taking the include paths you specified and adding them to QMAKEs CFLAGS and CXXFLAGS. Unfortunately, when compiling objective-c, neither of these variables are included. I just kicked off my build after making a change to the configure script in qtbase/configure which I believe should fix it. I will post if this doesn't work ... builds take a long time.
Search for I_FLAGS in the configure file. Add a new flag called INC_FLAGS. In the case statement that is setting the I_FLAGS, add a line to set the INC_FLAGS ,but leave out the "-I". Then search for where the script is add the QMake variable (it will be QMakeVar add QMAKE_CXXFLAGS I_FLAGS). You will see that the script is setting the CFLAGS and CXXFLAGS. Instead of setting them, set the "INCLUDEPATH" (no QMAKE prefix) and pass INC_FLAGS. I use a new variable because INCLUDEPATH does not want "-I" and the I_FLAGS variable is used in many places and I didn't want to change them.
One thing to note is to make sure your install_name is correct for the ICU libraries. My ICU libraries were custom built in a temp directory and the install_name was not correct and at points in the build, they will try to load. Either fix the install_name or export DYLD_LIBRARY_PATH to get around it
HTH. This is definitely a bug in the qt build system. I don't know if the way I fixed it is the way they will eventually, but it seemed the most "correct"
-
Update ... my fix for the configure file to set INCLUDEPATH got me past most of the issues. Now I have hit an issue because Qt links to icucore, an internal (private) icu build for Mac. There is an interesting thread on this "here":https://bugreports.qt-project.org/browse/QTBUG-31419#comment-224370. To workaround this, also I have edited the following (I commented out the INCLUDEPATH because I added my own -I for my built ICU headers so they shouldn't be needed):
qtwebkit/Source/WebCore/Target.pri --
commented out "INCLUDEPATH += $$PWD/icu"qtwebkit/Source/WTF/WTF.pri --
commented out "INCLUDEPATH += $${ROOT_WEBKIT_DIR}/Source/WTF/icu"
changed "-licucore" to "-licui18n -licuuc -licudata"I will let you know if this works. If someone else has gotten past this, let me know.
-
Ok, thanks.
I already change qtwebkit/Source/WebCore/Target.pri and qtwebkit/Source/WebCore/Target.pri, but build stop with error as i posted above. -
I was able to eventually complete my build linking successfully to my icu binaries. I had to disable building WebKit2 and also the webkit/examples because they had issues that I don't think were related to icu. I don't care about WebKit2 yet so I moved forward. Let me know if you don't get past it.
-
Please post all your diffs to sources:
diff -ruN oldsrc newsrc >qt520.diff -
This is the set related to the ICU issue. There are also some changes but they are not related to ICU and it makes my post too long. Note, I also deleted the qtbase/examples and qtbase/tests.
HTH (Sorry I can't seem to get it formatted right so I am just pasting)
diff -rup /Users/lgraber/dev/third-party/qt/5.2/upstream/qtbase/configure /Users/lgraber/dev/third-party/qt/5.2/local/qtbase/configure
--- /Users/lgraber/dev/third-party/qt/5.2/upstream/qtbase/configure 2013-12-10 13:55:53.000000000 -0800
+++ /Users/lgraber/dev/third-party/qt/5.2/local/qtbase/configure 2013-12-19 23:29:03.000000000 -0800
@@ -695,6 +695,7 @@ CFG_FRAMEWORK=auto
DEFINES=
D_FLAGS=
I_FLAGS=
+INC_FLAGS=
L_FLAGS=
RPATH_FLAGS=
W_FLAGS=
@@ -1986,6 +1987,7 @@ while [ "$#" -gt 0 ]; do
;;
add_ipath)
I_FLAGS="$I_FLAGS -I\"${VAL}""- INC_FLAGS="$INC_FLAGS \"${VAL}""
;;
add_lpath)
L_FLAGS="$L_FLAGS -L\"${VAL}""
@@ -5885,10 +5887,9 @@ if [ "$CFG_RPATH" = "yes" ]; then
QT_CONFIG="$QT_CONFIG rpath"
fi
-if [ '!' -z "$I_FLAGS" ]; then
+if [ '!' -z "$INC_FLAGS" ]; then
# add the user define include paths- QMakeVar add QMAKE_CFLAGS "$I_FLAGS"
- QMakeVar add QMAKE_CXXFLAGS "$I_FLAGS"
- QMakeVar add INCLUDEPATH "$INC_FLAGS"
fi
if [ '!' -z "$W_FLAGS" ]; then
diff -rup /Users/lgraber/dev/third-party/qt/5.2/upstream/qtwebkit/Source/QtWebKit.pro /Users/lgraber/dev/third-party/qt/5.2/local/qtwebkit/Source/QtWebKit.pro
--- /Users/lgraber/dev/third-party/qt/5.2/upstream/qtwebkit/Source/QtWebKit.pro 2013-12-10 13:57:26.000000000 -0800
+++ /Users/lgraber/dev/third-party/qt/5.2/local/qtwebkit/Source/QtWebKit.pro 2013-12-20 14:29:51.000000000 -0800
@@ -39,8 +39,8 @@ build?(webkit1) {
SUBDIRS += tests
}- examples.file = WebKit/qt/examples/examples.pro
- examples.CONFIG += no_default_target
- examples.makefile = Makefile
- SUBDIRS += examples
+# examples.file = WebKit/qt/examples/examples.pro
+# examples.CONFIG += no_default_target
+# examples.makefile = Makefile
+# SUBDIRS += examples
}
diff -rup /Users/lgraber/dev/third-party/qt/5.2/upstream/qtwebkit/Source/WTF/WTF.pri /Users/lgraber/dev/third-party/qt/5.2/local/qtwebkit/Source/WTF/WTF.pri
--- /Users/lgraber/dev/third-party/qt/5.2/upstream/qtwebkit/Source/WTF/WTF.pri 2013-12-10 13:57:32.000000000 -0800
+++ /Users/lgraber/dev/third-party/qt/5.2/local/qtwebkit/Source/WTF/WTF.pri 2013-12-20 10:06:05.000000000 -0800
@@ -11,8 +11,10 @@ INCLUDEPATH += $$PWD
mac {Mac OS does ship libicu but not the associated header files.
Therefore WebKit provides adequate header files.
- INCLUDEPATH += $${ROOT_WEBKIT_DIR}/Source/WTF/icu
- LIBS += -licucore
-
Modifications since we are using our own ICU library
-
INCLUDEPATH += $${ROOT_WEBKIT_DIR}/Source/WTF/icu
- LIBS += -licui18n -licuuc -licudata
} else {
contains(QT_CONFIG,icu) {
win32: LIBS += -licuin -licuuc -licudt
diff -rup /Users/lgraber/dev/third-party/qt/5.2/upstream/qtwebkit/Source/WebCore/Target.pri /Users/lgraber/dev/third-party/qt/5.2/local/qtwebkit/Source/WebCore/Target.pri
--- /Users/lgraber/dev/third-party/qt/5.2/upstream/qtwebkit/Source/WebCore/Target.pri 2013-12-10 13:57:30.000000000 -0800
+++ /Users/lgraber/dev/third-party/qt/5.2/local/qtwebkit/Source/WebCore/Target.pri 2013-12-20 10:09:06.000000000 -0800
@@ -2981,7 +2981,9 @@ contains(QT_CONFIG,icu)|mac: SOURCES +=
mac {For Mac we use the same SmartReplace implementation as the Apple port.
SOURCES += editing/SmartReplaceCF.cpp
- INCLUDEPATH += $$PWD/icu
-
We are using our own ice headers
-
INCLUDEPATH += $$PWD/icu
} else {
SOURCES += editing/SmartReplaceICU.cpp
}
diff -rup /Users/lgraber/dev/third-party/qt/5.2/upstream/qtwebkit/Tools/qmake/mkspecs/features/configure.prf /Users/lgraber/dev/third-party/qt/5.2/local/qtwebkit/Tools/qmake/mkspecs/features/configure.prf
--- /Users/lgraber/dev/third-party/qt/5.2/upstream/qtwebkit/Tools/qmake/mkspecs/features/configure.prf 2013-12-10 13:57:33.000000000 -0800
+++ /Users/lgraber/dev/third-party/qt/5.2/local/qtwebkit/Tools/qmake/mkspecs/features/configure.prf 2013-12-20 12:43:22.000000000 -0800
@@ -49,7 +49,7 @@ defineTest(runConfigure) {WEBKIT_CONFIG += \ build_webkit1 \
-
build_webkit2 \
+# build_webkit2
build_tests
$$WEBKIT_TOOLS_CONFIG - INC_FLAGS="$INC_FLAGS \"${VAL}""
-
[quote author="lgraber" date="1387696476"]This is the set related to the ICU issue. There are also some changes but they are not related to ICU and it makes my post too long. Note, I also deleted the qtbase/examples and qtbase/tests.
HTH (Sorry I can't seem to get it formatted right so I am just pasting)
...
[/quote]Thanks!
-
again error:
@
...
loader/FrameLoader.cpp:877:44: error: member access into incomplete type 'WebCore::Archive'
ArchiveResource* mainResource = archive->mainResource();
^
loader/FrameLoader.h:51:7: note: forward declaration of 'WebCore::Archive'
class Archive;
^
loader/FrameLoader.cpp:882:47: error: member access into incomplete type 'WebCore::ArchiveResource'
SubstituteData substituteData(mainResource->data(), mainResource->mimeType(), mainResource->textEncoding(), KURL());
^
loader/DocumentLoader.h:63:11: note: forward declaration of 'WebCore::ArchiveResource'
class ArchiveResource;
^
loader/FrameLoader.cpp:884:41: error: member access into incomplete type 'WebCore::ArchiveResource'
ResourceRequest request(mainResource->url());
^
loader/DocumentLoader.h:63:11: note: forward declaration of 'WebCore::ArchiveResource'
class ArchiveResource;
^
In file included from loader/FrameLoader.cpp:36:
In file included from loader/FrameLoader.h:38:
In file included from dom/IconURL.h:34:
In file included from platform/KURL.h:30:
In file included from ../WTF/wtf/HashMap.h:24:
In file included from ../WTF/wtf/HashTable.h:28:
In file included from ../WTF/wtf/HashTraits.h:24:
In file included from ../WTF/wtf/HashFunctions.h:24:
In file included from ../WTF/wtf/RefPtr.h:29:
../WTF/wtf/PassRefPtr.h:52:16: error: member access into incomplete type 'WebCore::Archive'
ptr->deref();
^
../WTF/wtf/PassRefPtr.h:67:39: note: in instantiation of function template specialization 'WTF::derefIfNotNullWebCore::Archive' requested here
ALWAYS_INLINE ~PassRefPtr() { derefIfNotNull(m_ptr); }
^
loader/FrameLoader.cpp:852:39: note: in instantiation of member function 'WTF::PassRefPtrWebCore::Archive::~PassRefPtr' requested here
RefPtr<Archive> subframeArchive = activeDocumentLoader()->popArchiveForSubframe(childFrame->tree()->uniqueName(), url);
^
loader/FrameLoader.h:51:7: note: forward declaration of 'WebCore::Archive'
class Archive;
^
In file included from loader/FrameLoader.cpp:36:
In file included from loader/FrameLoader.h:38:
In file included from dom/IconURL.h:34:
In file included from platform/KURL.h:30:
In file included from ../WTF/wtf/HashMap.h:24:
In file included from ../WTF/wtf/HashTable.h:28:
In file included from ../WTF/wtf/HashTraits.h:24:
In file included from ../WTF/wtf/HashFunctions.h:24:
../WTF/wtf/RefPtr.h:62:35: error: no matching function for call to 'derefIfNotNull'
ALWAYS_INLINE ~RefPtr() { derefIfNotNull(m_ptr); }
^~~~~~~~~~~~~~
loader/FrameLoader.cpp:852:39: note: in instantiation of member function 'WTF::RefPtrWebCore::Archive::~RefPtr' requested here
RefPtr<Archive> subframeArchive = activeDocumentLoader()->popArchiveForSubframe(childFrame->tree()->uniqueName(), url);
^
../WTF/wtf/PassRefPtr.h:49:48: note: candidate template ignored: substitution failure [with T = WebCore::Archive]
template<typename T> REF_DEREF_INLINE void derefIfNotNull(T* ptr)
^
../WTF/wtf/PassRefPtr.h:46:16: error: member access into incomplete type 'WebCore::Archive'
ptr->ref();
^
../WTF/wtf/PassRefPtr.h:60:43: note: in instantiation of function template specialization 'WTF::refIfNotNullWebCore::Archive' requested here
PassRefPtr(T* ptr) : m_ptr(ptr) { refIfNotNull(ptr); }
^
loader/FrameLoader.cpp:890:32: note: in instantiation of member function 'WTF::PassRefPtrWebCore::Archive::PassRefPtr' requested here
documentLoader->setArchive(archive.get());
^
loader/FrameLoader.h:51:7: note: forward declaration of 'WebCore::Archive'
class Archive;
^
6 errors generated.
make[4]: *** [.obj/debug/loader/FrameLoader.o] Error 1
make[3]: *** [debug-all] Error 2
make[2]: *** [sub-Target-pri-make_first-ordered] Error 2
make[1]: *** [sub-Source-WebCore-WebCore-pro-make_first-ordered] Error 2
make: *** [module-qtwebkit-make_first] Error 2
bash-3.2$@ -
Hmmm ... I haven't seen those. What platform are you specifying for qt. I am using macx-clang. What is the version of clang you have on your machine ('clang - v'). I am running 4.2. I didn't have 5.0.2 of XCode but I just updated it and tried kicking off my build again to see if I can hit the errors you are seeing.