From patchwork Wed Jul 9 08:37:28 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Svend Aage Vedstesen X-Patchwork-Id: 368139 X-Patchwork-Delegate: chbs@prevas.dk Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from hugin.dotsrc.org (hugin.dotsrc.org [IPv6:2001:878:346::102]) by ozlabs.org (Postfix) with ESMTP id E1F75140117 for ; Wed, 9 Jul 2014 18:38:25 +1000 (EST) Received: from hugin.dotsrc.org (localhost [127.0.0.1]) by hugin.dotsrc.org (Postfix) with ESMTP id 39F6D3FD64 for ; Wed, 9 Jul 2014 10:38:24 +0200 (CEST) X-Original-To: dev@oe-lite.org Delivered-To: dev@oe-lite.org Received: from mail01.prevas.se (mail01.prevas.se [62.95.78.3]) by hugin.dotsrc.org (Postfix) with ESMTPS id 54E893F877 for ; Wed, 9 Jul 2014 10:38:23 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=prevas.dk; i=@prevas.dk; l=14742; q=dns/txt; s=ironport1; t=1404895103; x=1436431103; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=p83RF2Be34h0CYw1XDUDZqFW8gNalXedmZJCPwuSDvk=; b=GMdQshzIunDU2qORDbhOdvKpSkaqUAscJuDVbFg6ojVBJ1XeWBiRA29p lGpO5IdhomH2uCf2GsuRdFwsyK+28arfr8tJmiT6KJs/MYP6SSN2y6xVK m1dqkqSx5Q52CU4mTUqAnjeBk4RqajJtYRTyrA/9nXn//xOqP8AFbVgjn M=; X-IronPort-AV: E=Sophos;i="5.01,630,1400018400"; d="scan'208";a="4893724" Received: from vmprevas3.prevas.se (HELO smtp.prevas.se) ([172.16.8.103]) by ironport1.prevas.se with ESMTP/TLS/AES128-SHA; 09 Jul 2014 10:38:22 +0200 Received: from svav-VirtualBox.prevas.se (172.16.11.7) by smtp.prevas.se (172.16.8.105) with Microsoft SMTP Server (TLS) id 14.2.347.0; Wed, 9 Jul 2014 10:38:22 +0200 From: Svend Aage Vedstesen To: Subject: [PATCH 08/15] qmake5: mingw support Date: Wed, 9 Jul 2014 10:37:28 +0200 Message-ID: <6eb9da57648db0c969f64c77ec41acbcbe09cb7c.1404891982.git.Svend.Vedstesen@prevas.dk> X-Mailer: git-send-email 1.9.1 In-Reply-To: References: MIME-Version: 1.0 X-Originating-IP: [172.16.11.7] X-BeenThere: dev@oe-lite.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: OE-lite development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dev-bounces@oe-lite.org Errors-To: dev-bounces@oe-lite.org From: Christian Sørensen --- ...5-qmake-is-already-built-in-qtbase-native.patch | 30 ++++++ .../mingw-disable-vars-from-shell.patch | 104 +++++++++++++++++++++ .../qmake5-5.1.1/mingw-manually-enable-msys.patch | 11 +++ recipes/qt5/qmake5-5.1.1/mingw-spec.patch | 20 ++++ .../qtbug-33155-mingw-w64-compilation.patch | 43 +++++++++ recipes/qt5/qmake5.inc | 70 ++++++++++++-- 6 files changed, 271 insertions(+), 7 deletions(-) create mode 100644 recipes/qt5/qmake5-5.1.1/0005-qmake-is-already-built-in-qtbase-native.patch create mode 100644 recipes/qt5/qmake5-5.1.1/mingw-disable-vars-from-shell.patch create mode 100644 recipes/qt5/qmake5-5.1.1/mingw-manually-enable-msys.patch create mode 100644 recipes/qt5/qmake5-5.1.1/mingw-spec.patch create mode 100644 recipes/qt5/qmake5-5.1.1/qtbug-33155-mingw-w64-compilation.patch diff --git a/recipes/qt5/qmake5-5.1.1/0005-qmake-is-already-built-in-qtbase-native.patch b/recipes/qt5/qmake5-5.1.1/0005-qmake-is-already-built-in-qtbase-native.patch new file mode 100644 index 0000000..b2121cf --- /dev/null +++ b/recipes/qt5/qmake5-5.1.1/0005-qmake-is-already-built-in-qtbase-native.patch @@ -0,0 +1,30 @@ +From 7b37f7fa8c68c1807eeb45936154a42c34cda666 Mon Sep 17 00:00:00 2001 +From: Michael Krelin +Date: Mon, 29 Oct 2012 20:07:49 -0700 +Subject: [PATCH 05/16] qmake is already built in qtbase-native + +Ported from OE by: Yu Ke +Upstream-Status: Inappropriate [configuration] + +Signed-off-by: Mikko Levonmaa +Signed-off-by: Martin Jansa +--- + configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure b/configure +index 1ca5b4e..546bed2 100755 +--- a/configure ++++ b/configure +@@ -3667,7 +3667,7 @@ setBootstrapEvalVariable() + + + # build qmake +-if true; then ###[ '!' -f "$outpath/bin/qmake" ]; ++if false; then ###[ '!' -f "$outpath/bin/qmake" ]; + echo "Creating qmake..." + + mkdir -p "$outpath/qmake" || exit +-- +1.8.2.1 + diff --git a/recipes/qt5/qmake5-5.1.1/mingw-disable-vars-from-shell.patch b/recipes/qt5/qmake5-5.1.1/mingw-disable-vars-from-shell.patch new file mode 100644 index 0000000..f7a25b2 --- /dev/null +++ b/recipes/qt5/qmake5-5.1.1/mingw-disable-vars-from-shell.patch @@ -0,0 +1,104 @@ +--- qtbase-opensource-src-5.1.1/configure.old 2014-03-12 09:22:08.287336576 +0100 ++++ qtbase-opensource-src-5.1.1/configure 2014-03-12 09:23:56.919335001 +0100 +@@ -291,16 +291,6 @@ + getSingleQMakeVariable "$1" "$specvals" + } + +-# OE qmake.conf is reading some variables from shell env +-# read them from qmake.conf, replace qmake () syntax with shell and eval +-getQEvalMakeConf() +-{ +- VAL=`getQMakeConf "$1" | sed -n 's/$[(]\([0-9a-zA-Z_]*\)[)]/$\1/pg'` +- EVAL=`eval "echo ${VAL}"` +-# echo "Running getQEvalMakeConf: var='$1', val='`getQMakeConf \"$1\"`, val-sed='$VAL', eval='$EVAL'" >&2 +- eval "echo ${VAL}" +-} +- + getXQMakeConf() + { + if [ -z "$xspecvals" ]; then +@@ -310,16 +300,6 @@ + getSingleQMakeVariable "$1" "$xspecvals" + } + +-# OE qmake.conf is reading some variables from shell env +-# read them from qmake.conf, replace qmake () syntax with shell and eval +-getXQEvalMakeConf() +-{ +- VAL=`getXQMakeConf "$1" | sed -n 's/$[(]\([0-9a-zA-Z_]*\)[)]/$\1/pg'` +- EVAL=`eval "echo ${VAL}"` +-# echo "Running getXQEvalMakeConf: var='$1', val='`getXQMakeConf \"$1\"`, val-sed='$VAL', eval='$EVAL'" >&2 +- eval "echo ${VAL}" +-} +- + compilerSupportsFlag() + { + cat >conftest.cpp <&2 +-fi'` +- eval "$cmd" +-done +- + SYSTEM_VARIABLES="RANLIB STRIP OBJDUMP LD CC CXX CFLAGS CXXFLAGS LDFLAGS" + + # Use CC/CXX to run config.tests +@@ -2913,7 +2881,7 @@ + CFG_QGTKSTYLE=no + fi + +-QMAKE_CONF_COMPILER=`getXQEvalMakeConf QMAKE_CXX` ++QMAKE_CONF_COMPILER=`getXQMakeConf QMAKE_CXX` + + TEST_COMPILER=$QMAKE_CONF_COMPILER + +@@ -2948,7 +2916,7 @@ + exit 1 + fi + fi +-TEST_COMPILER_CXXFLAGS=`getXQEvalMakeConf QMAKE_CXXFLAGS` ++TEST_COMPILER_CXXFLAGS=`getXQMakeConf QMAKE_CXXFLAGS` + + GCC_MACHINE_DUMP= + case "$TEST_COMPILER" in *g++) GCC_MACHINE_DUMP=$($TEST_COMPILER -dumpmachine);; esac +@@ -3978,13 +3946,6 @@ + getQMakeConf "$1" | echo ${2-$1} = `if [ -n "$3" ]; then sed "$3"; else cat; fi` >> "$mkfile" + } + +-# OE qmake.conf is reading some variables from shell env +-# read them from qmake.conf, replace qmake () syntax with shell and eval +-setBootstrapEvalVariable() +-{ +- getQEvalMakeConf "$1" | echo ${2-$1} = `if [ -n "$3" ]; then sed "$3"; else cat; fi` >> "$mkfile" +-} +- + + # build qmake + if true; then ###[ '!' -f "$outpath/bin/qmake" ]; +@@ -4024,11 +3985,11 @@ + fi + + [ "$CFG_SILENT" = "yes" ] && CC_TRANSFORM='s,^,\@,' || CC_TRANSFORM= +- setBootstrapEvalVariable QMAKE_CC CC "$CC_TRANSFORM" +- setBootstrapEvalVariable QMAKE_CXX CXX "$CC_TRANSFORM" +- setBootstrapEvalVariable QMAKE_CFLAGS +- setBootstrapEvalVariable QMAKE_CXXFLAGS +- setBootstrapEvalVariable QMAKE_LFLAGS ++ setBootstrapVariable QMAKE_CC CC "$CC_TRANSFORM" ++ setBootstrapVariable QMAKE_CXX CXX "$CC_TRANSFORM" ++ setBootstrapVariable QMAKE_CFLAGS ++ setBootstrapVariable QMAKE_CXXFLAGS ++ setBootstrapVariable QMAKE_LFLAGS + + if [ "$CFG_RELEASE_QMAKE" = "yes" ]; then + setBootstrapVariable QMAKE_CFLAGS_RELEASE diff --git a/recipes/qt5/qmake5-5.1.1/mingw-manually-enable-msys.patch b/recipes/qt5/qmake5-5.1.1/mingw-manually-enable-msys.patch new file mode 100644 index 0000000..2c6bd3a --- /dev/null +++ b/recipes/qt5/qmake5-5.1.1/mingw-manually-enable-msys.patch @@ -0,0 +1,11 @@ +--- qtbase-opensource-src-5.1.1/configure.old 2014-03-11 13:41:46.362623481 +0100 ++++ qtbase-opensource-src-5.1.1/configure 2014-03-11 13:42:18.250624617 +0100 +@@ -445,7 +445,7 @@ + BUILD_ON_MAC=yes + PLATFORM_MAC=maybe + fi +-BUILD_ON_MSYS=no ++BUILD_ON_MSYS=yes + HOST_DIRLIST_SEP=":" + DEV_NULL=/dev/null + if [ "$OSTYPE" = "msys" ]; then diff --git a/recipes/qt5/qmake5-5.1.1/mingw-spec.patch b/recipes/qt5/qmake5-5.1.1/mingw-spec.patch new file mode 100644 index 0000000..78a024c --- /dev/null +++ b/recipes/qt5/qmake5-5.1.1/mingw-spec.patch @@ -0,0 +1,20 @@ +--- qtbase-opensource-src-5.1.1/mkspecs/win32-g++/qmake.conf~orig 2014-03-10 13:18:52.166561069 +0100 ++++ qtbase-opensource-src-5.1.1/mkspecs/win32-g++/qmake.conf 2014-03-10 13:18:50.222561071 +0100 +@@ -13,7 +13,7 @@ + QMAKE_PLATFORM = win32 mingw + CONFIG += debug_and_release debug_and_release_target precompile_header + DEFINES += UNICODE +-QMAKE_COMPILER_DEFINES += __GNUC__ WIN32 ++QMAKE_COMPILER_DEFINES += __GNUC__ WIN32 Q_OS_WIN + + QMAKE_EXT_OBJ = .o + QMAKE_EXT_RES = _res.o +@@ -25,7 +25,7 @@ + QMAKE_LEXFLAGS = + QMAKE_YACC = byacc + QMAKE_YACCFLAGS = -d +-QMAKE_CFLAGS = -pipe -fno-keep-inline-dllexport ++QMAKE_CFLAGS = -pipe -fno-keep-inline-dllexport -DUNICODE -D_UNICODE + QMAKE_CFLAGS_DEPS = -M + QMAKE_CFLAGS_WARN_ON = -Wall -Wextra + QMAKE_CFLAGS_WARN_OFF = -w diff --git a/recipes/qt5/qmake5-5.1.1/qtbug-33155-mingw-w64-compilation.patch b/recipes/qt5/qmake5-5.1.1/qtbug-33155-mingw-w64-compilation.patch new file mode 100644 index 0000000..9d1f1b3 --- /dev/null +++ b/recipes/qt5/qmake5-5.1.1/qtbug-33155-mingw-w64-compilation.patch @@ -0,0 +1,43 @@ +From e59a5f9fdcec5df2f54e88d75a75fcb4a2fe577b Mon Sep 17 00:00:00 2001 +From: Friedemann Kleint +Date: Mon, 26 Aug 2013 11:52:47 +0200 +Subject: [PATCH] Windows: Fix compilation with MinGW-64, gcc 4.8.1 + +A definition for FILE_ID_128 was added. + +Change-Id: Ifdfe5da1b15a90afdf5cf09d92838a04b1cf5c19 +Reviewed-by: Kai Koehne +--- + src/corelib/io/qfilesystemengine_win.cpp | 6 +++++- + 1 files changed, 5 insertions(+), 1 deletions(-) + +diff --git a/src/corelib/io/qfilesystemengine_win.cpp b/src/corelib/io/qfilesystemengine_win.cpp +index e8904b0..57231b5 100644 +--- a/src/corelib/io/qfilesystemengine_win.cpp ++++ b/src/corelib/io/qfilesystemengine_win.cpp +@@ -573,9 +573,12 @@ typedef enum { Q_FileIdInfo = 18 } Q_FILE_INFO_BY_HANDLE_CLASS; + + # if defined(Q_CC_MINGW) || (defined(Q_CC_MSVC) && _MSC_VER < 1700) + ++// MinGW-64 defines FILE_ID_128 as of gcc-4.8.1 along with FILE_SUPPORTS_INTEGRITY_STREAMS ++# if !(defined(Q_CC_MINGW) && defined(FILE_SUPPORTS_INTEGRITY_STREAMS)) + typedef struct _FILE_ID_128 { + BYTE Identifier[16]; + } FILE_ID_128, *PFILE_ID_128; ++# endif // !(Q_CC_MINGW && FILE_SUPPORTS_INTEGRITY_STREAMS) + + typedef struct _FILE_ID_INFO { + ULONGLONG VolumeSerialNumber; +@@ -614,7 +617,8 @@ QByteArray fileIdWin8(HANDLE handle) + &infoEx, sizeof(FILE_ID_INFO))) { + result = QByteArray::number(infoEx.VolumeSerialNumber, 16); + result += ':'; +- result += QByteArray((char *)infoEx.FileId.Identifier, sizeof(infoEx.FileId.Identifier)).toHex(); ++ // Note: MinGW-64's definition of FILE_ID_128 differs from the MSVC one. ++ result += QByteArray((char *)&infoEx.FileId, sizeof(infoEx.FileId)).toHex(); + } + } + return result; +-- +1.7.1 + diff --git a/recipes/qt5/qmake5.inc b/recipes/qt5/qmake5.inc index bb5034b..5797a9f 100644 --- a/recipes/qt5/qmake5.inc +++ b/recipes/qt5/qmake5.inc @@ -2,8 +2,10 @@ DESCRIPTION = "Native version of Qt/[X11|Mac|Embedded]" LICENSE = "GFDL-1.3 & LGPL-2.1 & GPL-3.0" DEPENDS = "zlib" -DEPENDS:>sdk = " libdl libpthread librt libm" -RDEPENDS_${PN}:>sdk = "libdl libphtread librt libm" +EXTRA_DEPENDS_SDK = "libdl librt" +EXTRA_DEPENDS_SDK:HOST_LIBC_mingw = "" +DEPENDS:>sdk = " libpthread libm ${EXTRA_DEPENDS_SDK} native:qmake5" +RDEPENDS_${PN}:>sdk = " libphtread libm ${EXTRA_DEPENDS_SDK}" HOMEPAGE = "http://qt-project.org" QT_MODULE = "qtbase" @@ -13,7 +15,7 @@ inherit c++ make require qmake5-5.1.1.inc #TBD: Bugs are seen with more more than 1 parallel maker -PARALLEL_MAKE:sdk = "" +#PARALLEL_MAKE:sdk = "" SRC_URI += " \ file://0001-Add-linux-oe-g-platform.patch \ @@ -27,6 +29,13 @@ SRC_URI += " \ file://always_build_uic.patch \ " +SRC_URI:>HOST_LIBC_mingw = "\ + file://qtbug-33155-mingw-w64-compilation.patch\ + file://mingw-spec.patch\ + file://mingw-manually-enable-msys.patch \ + file://mingw-disable-vars-from-shell.patch \ +" + QT_CONF_PATH = "${B}/qt.conf" EXTRA_OECONF = " \ @@ -62,8 +71,16 @@ EXTRA_OECONF = " \ -nomake examples \ -nomake tests \ -no-rpath \ - -platform linux-oe-g++ \ + -platform ${BUILD_PLATFORM} \ " +BUILD_PLATFORM = "linux-oe-g++" +BUILD_PLATFORM:HOST_LIBC_mingw = "win32-g++" +EXTRA_OECONF:>HOST_LIBC_mingw += " \ + -xplatform win32-g++ \ + -device-option CROSS_COMPILE=${HOST_PREFIX} \ + -qpa windows" + + # qtbase is exception, configure script is using our get(X)QEvalMakeConf and setBootstrapEvalVariable functions to read it from shell export OE_QMAKE_COMPILER export OE_QMAKE_CC @@ -75,21 +92,60 @@ export OE_QMAKE_LDFLAGS export OE_QMAKE_AR export OE_QMAKE_STRIP +CONFIGURE_MINGW_UTILS = "" +CONFIGURE_MINGW_UTILS:HOST_LIBC_mingw = "do_configure_mingw" +do_configure[prefuncs] += "${CONFIGURE_MINGW_UTILS}" +do_configure_mingw () { +#Use native tools to build instead of using the mingw tools + ln -sf ${STAGE_DIR}/native/bin/qmake ${S}/bin/qmake + ln -sf ${STAGE_DIR}/native/bin/moc ${S}/bin/moc.exe + ln -sf ${STAGE_DIR}/native/bin/rcc ${S}/bin/rcc.exe + ln -sf ${STAGE_DIR}/native/bin/uic ${S}/bin/uic.exe +} + +USE_MINGW_SPEC = "" +USE_MINGW_SPEC:HOST_LIBC_mingw = "-spec ${S}/mkspecs/win32-g++" + do_configure[prefuncs] += "do_configure_preqt" do_configure_preqt() { (echo o; echo yes) | ${S}/configure ${EXTRA_OECONF} || die "Configuring qt failed. EXTRA_OECONF was ${EXTRA_OECONF}" - bin/qmake ${OE_QMAKE_DEBUG_OUTPUT} ${S} -o Makefile || die "Configuring qt with qmake failed. EXTRA_OECONF was ${EXTRA_OECONF}" + bin/qmake ${USE_MINGW_SPEC} ${OE_QMAKE_DEBUG_OUTPUT} ${S} -o Makefile || die "Configuring qt with qmake failed. EXTRA_OECONF was ${EXTRA_OECONF}" +} + +CONFIGURE_BUILD_MINGW_UTILS = "" +CONFIGURE_BUILD_MINGW_UTILS:HOST_LIBC_mingw = "do_configure_mingw2" +do_configure[postfuncs] += "${CONFIGURE_BUILD_MINGW_UTILS}" +do_configure_mingw2 () { + #Set the build target to something else, so it does not overwrite + #the native tools + echo "TARGET = \"realmoc\"" >> ${S}/src/tools/moc/moc.pro + echo "TARGET = \"realrcc\"" >> ${S}/src/tools/rcc/rcc.pro + echo "TARGET = \"realuic\"" >> ${S}/src/tools/uic/uic.pro } -do_install() { +do_install() { oe_runmake install INSTALL_ROOT=${D} } +INSTALL_MINGW_UTILS = "" +INSTALL_MINGW_UTILS:HOST_LIBC_mingw = "do_install_mingw_fixup" +do_install[postfuncs] += "${INSTALL_MINGW_UTILS}" +do_install_mingw_fixup () { + #Set the correct name of the build mingw utils + rm ${D}${bindir}/qmake + install ${S}/bin/qmake.exe ${D}${bindir} + mv ${D}${bindir}/realmoc.exe ${D}${bindir}/moc.exe + mv ${D}${bindir}/realuic.exe ${D}${bindir}/uic.exe + mv ${D}${bindir}/realrcc.exe ${D}${bindir}/rcc.exe +} + FILES_${PN} += " ${libdir}" PACKAGES =+ " ${PN}-utilities " FILES_${PN}-utilities = "${bindir}" DEPENDS_${PN} += "${PN}-utilities" -RDEPENDS_${PN}-utilities = "librt libgcc libpthread libz libstdc++ libm" +EXTRA_RDEPENDS_UTILITIES = "librt" +EXTRA_RDEPENDS_UTILITIES:HOST_LIBC_mingw = "" +RDEPENDS_${PN}-utilities = "${EXTRA_RDEPENDS_UTILITIES} libgcc libpthread libz libstdc++ libm"