Build failure of Qt 5.2 on Mac OS 10.9 with Xcode 5.0.2 - can't find MacPorts ICU
-
Not to start a war or anything, is there any reason you are not using HomeBrew as opposed to MacPorts?
I have no insight, but HomeBrew seem to be the most up-to-date.
-Tom
-
I expect that there are a lot of reasons for me to continue to use MacPorts rather than switching to HomeBrew, but here isn't the place to discuss them :)
… except to say that with respect to the current thread regarding building Qt on Mac OS: "MacPorts package search":http://www.macports.org/ports.php?by=name&substr=icu indicates that MacPorts is currently at ICU version 51.2, which is the current release. "BrauMeister search (why not part of the main brew.sh site I wonder)":http://braumeister.org/search/icu indicates that HomeBrew is also at that version. So nothing to choose between them there :)
I'd expect either to work fine for providing ICU for Qt to build against (though I have no experience with HomeBrew so can't vouch for it). The problem here seems to be that Qt is not passing the include path supplied to its configure script to the build (or I've made an error in my configuration …)!
-
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.