diff mbox

qt5: install headers into /usr/include/qt5

Message ID 1387868037-31734-1-git-send-email-fatih.asici@gmail.com
State Accepted
Headers show

Commit Message

Fatih Aşıcı Dec. 24, 2013, 6:53 a.m. UTC
There are places in Qt's source where headers included with the name of
the module subdirectory (e.g. #include <QtCore/QHash>). Therefore, the
build system passes the top header directory to the compiler; but this
results in a error when building host tools since sysroot/usr/include
directory includes architecture specific system headers.

In order to prevent this, install all Qt headers into a subdirectory in
/usr/include.

Fixes: http://autobuild.buildroot.net/results/4f1/4f16c0b38bdd6e40efcc781c12fae81c0bfabb72/

Signed-off-by: Fatih Aşıcı <fatih.asici@gmail.com>
---
 package/qt5/qt5base/qt5base.mk | 1 +
 1 file changed, 1 insertion(+)

Comments

Thomas Petazzoni Dec. 24, 2013, 7:47 a.m. UTC | #1
Dear Fatih Aşıcı,

On Tue, 24 Dec 2013 08:53:57 +0200, Fatih Aşıcı wrote:
> There are places in Qt's source where headers included with the name of
> the module subdirectory (e.g. #include <QtCore/QHash>). Therefore, the
> build system passes the top header directory to the compiler; but this
> results in a error when building host tools since sysroot/usr/include
> directory includes architecture specific system headers.
> 
> In order to prevent this, install all Qt headers into a subdirectory in
> /usr/include.
> 
> Fixes: http://autobuild.buildroot.net/results/4f1/4f16c0b38bdd6e40efcc781c12fae81c0bfabb72/
> 
> Signed-off-by: Fatih Aşıcı <fatih.asici@gmail.com>

With this change, what does the compilation command line of host tools
look like?

To me, this change seems more like work-arounding a problem in the Qt
build system rather than a real fix.

Best regards,

Thomas
Fatih Aşıcı Dec. 24, 2013, 8:15 a.m. UTC | #2
On Tuesday 24 December 2013 09:47:20 Thomas Petazzoni wrote:
> Dear Fatih Aşıcı,
> 
> On Tue, 24 Dec 2013 08:53:57 +0200, Fatih Aşıcı wrote:
> > There are places in Qt's source where headers included with the name of
> > the module subdirectory (e.g. #include <QtCore/QHash>). Therefore, the
> > build system passes the top header directory to the compiler; but this
> > results in a error when building host tools since sysroot/usr/include
> > directory includes architecture specific system headers.
> > 
> > In order to prevent this, install all Qt headers into a subdirectory in
> > /usr/include.
> > 
> > Fixes:
> > http://autobuild.buildroot.net/results/4f1/4f16c0b38bdd6e40efcc781c12fae
> > 81c0bfabb72/
> > 
> > Signed-off-by: Fatih Aşıcı <fatih.asici@gmail.com>
> 
> With this change, what does the compilation command line of host tools
> look like?

g++ -c -pipe -O2 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -fno-exceptions -Wall -W -D_REENTRANT -DQT_NO_LIBUDEV -DQT_NO_XCB -DQT_NO_XKBCOMMON -
DQT_BUILD_QMLDEVTOOLS_LIB -DQT_BUILDING_QT -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -
DQT_DISABLE_DEPRECATED_BEFORE=0x050000 -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_BOOTSTRAP_LIB -DQT_BOOTSTRAPPED -
DQT_LITE_UNICODE -DQT_NO_CAST_TO_ASCII -DQT_NO_CODECS -DQT_NO_DATASTREAM -DQT_NO_LIBRARY -DQT_NO_QOBJECT -DQT_NO_SYSTEMLOCALE -DQT_NO_THREAD -DQT_NO_UNICODETABLES -
DQT_NO_USING_NAMESPACE -DQT_NO_DEPRECATED -DQT_NO_TRANSLATION -DQT_QMAKE_LOCATION="/home/fatih/git/buildroot/output/build/qt5base-5.2.0/bin/qmake" -
I/home/fatih/git/buildroot/output/host/usr/mkspecs/linux-g++ -I. -I../../include -I../../include/QtQml -I../../include/QtQml/5.2.0 -I../../include/QtQml/5.2.0/QtQml 
-I/home/fatih/git/buildroot/output/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/include/qt5 -I/home/fatih/git/buildroot/output/host/usr/arm-buildroot-
linux-uclibcgnueabi/sysroot/usr/include/qt5/QtCore -I/home/fatih/git/buildroot/output/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/include/qt5/QtXml -
I/home/fatih/git/buildroot/output/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/include/qt5/QtCore/5.2.0 -I/home/fatih/git/buildroot/output/host/usr/arm-
buildroot-linux-uclibcgnueabi/sysroot/usr/include/qt5/QtCore/5.2.0/QtCore -I/home/fatih/git/buildroot/output/host/usr/arm-buildroot-linux-
uclibcgnueabi/sysroot/usr/include/qt5/QtXml/5.2.0 -I/home/fatih/git/buildroot/output/host/usr/arm-buildroot-linux-
uclibcgnueabi/sysroot/usr/include/qt5/QtXml/5.2.0/QtXml -o .obj/qqmljsparser.o ../qml/parser/qqmljsparser.cpp


> To me, this change seems more like work-arounding a problem in the Qt
> build system rather than a real fix.

Upstream states[1] that including qt headers from sysroot is not a problem
since they don't contain anything platform-specific.

[1] https://bugreports.qt-project.org/browse/QTBUG-35330?focusedCommentId=224486&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-224486
Thomas Petazzoni Dec. 24, 2013, 8:22 a.m. UTC | #3
Dear Fatih Aşıcı,

On Tue, 24 Dec 2013 10:15:24 +0200, Fatih Aşıcı wrote:

> g++ -c -pipe -O2 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -fno-exceptions -Wall -W -D_REENTRANT -DQT_NO_LIBUDEV -DQT_NO_XCB -DQT_NO_XKBCOMMON -
> DQT_BUILD_QMLDEVTOOLS_LIB -DQT_BUILDING_QT -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -
> DQT_DISABLE_DEPRECATED_BEFORE=0x050000 -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_BOOTSTRAP_LIB -DQT_BOOTSTRAPPED -
> DQT_LITE_UNICODE -DQT_NO_CAST_TO_ASCII -DQT_NO_CODECS -DQT_NO_DATASTREAM -DQT_NO_LIBRARY -DQT_NO_QOBJECT -DQT_NO_SYSTEMLOCALE -DQT_NO_THREAD -DQT_NO_UNICODETABLES -
> DQT_NO_USING_NAMESPACE -DQT_NO_DEPRECATED -DQT_NO_TRANSLATION -DQT_QMAKE_LOCATION="/home/fatih/git/buildroot/output/build/qt5base-5.2.0/bin/qmake" -
> I/home/fatih/git/buildroot/output/host/usr/mkspecs/linux-g++ -I. -I../../include -I../../include/QtQml -I../../include/QtQml/5.2.0 -I../../include/QtQml/5.2.0/QtQml 
> -I/home/fatih/git/buildroot/output/host/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/usr/include/qt5

This is still really ugly, as it is including target headers when doing
a compilation for the host. If they know what they are doing and know
that including Qt headers is fine and needed, then they should include
them from the Qt source tree and not from the Qt installation tree.

> > To me, this change seems more like work-arounding a problem in the Qt
> > build system rather than a real fix.
> 
> Upstream states[1] that including qt headers from sysroot is not a problem
> since they don't contain anything platform-specific.
> 
> [1] https://bugreports.qt-project.org/browse/QTBUG-35330?focusedCommentId=224486&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-224486

I don't really agree, but if that's what upstream recommends, then ok
for the patch.

Thanks!

Thomas
Thomas Petazzoni Dec. 25, 2013, 5:16 p.m. UTC | #4
Dear Fatih Aşıcı,

On Tue, 24 Dec 2013 08:53:57 +0200, Fatih Aşıcı wrote:
> There are places in Qt's source where headers included with the name of
> the module subdirectory (e.g. #include <QtCore/QHash>). Therefore, the
> build system passes the top header directory to the compiler; but this
> results in a error when building host tools since sysroot/usr/include
> directory includes architecture specific system headers.
> 
> In order to prevent this, install all Qt headers into a subdirectory in
> /usr/include.
> 
> Fixes: http://autobuild.buildroot.net/results/4f1/4f16c0b38bdd6e40efcc781c12fae81c0bfabb72/
> 
> Signed-off-by: Fatih Aşıcı <fatih.asici@gmail.com>
> ---
>  package/qt5/qt5base/qt5base.mk | 1 +
>  1 file changed, 1 insertion(+)

Applied, thanks!

Thomas
diff mbox

Patch

diff --git a/package/qt5/qt5base/qt5base.mk b/package/qt5/qt5base/qt5base.mk
index 1b753d3..e46bdeb 100644
--- a/package/qt5/qt5base/qt5base.mk
+++ b/package/qt5/qt5base/qt5base.mk
@@ -159,6 +159,7 @@  define QT5BASE_CONFIGURE_CMDS
 		-v \
 		-prefix /usr \
 		-hostprefix $(HOST_DIR)/usr \
+		-headerdir /usr/include/qt5 \
 		-sysroot $(STAGING_DIR) \
 		-plugindir /usr/lib/qt/plugins \
 		-no-rpath \