From 623c13a70f646e8200900c01ce2e409fc0f2fdec Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 18 Feb 2011 15:11:20 +0100 Subject: Renamed the symbian/linux-* mkspecs to symbian-*. This was done for a number of reasons: - In order to get better consistency with the other mkspecs, which have the target system name followed by a hyphen and the compiler name. - There is no real reason why we should have specific mkspecs for compiling Symbian under Linux, when it is equally likely to work under other operating systems. RevBy: Thomas Zander Conflicts: src/s60main/s60main.pro --- configure | 2 +- doc/src/snippets/code/doc_src_installation.qdoc | 4 +- mkspecs/features/symbian/do_not_build_as_thumb.prf | 2 +- mkspecs/features/symbian/symbian_building.prf | 18 ++--- mkspecs/symbian-armcc/features/default_post.prf | 5 ++ mkspecs/symbian-armcc/qmake.conf | 62 +++++++++++++++ mkspecs/symbian-armcc/qplatformdefs.h | 42 ++++++++++ mkspecs/symbian-gcce/features/default_post.prf | 5 ++ mkspecs/symbian-gcce/qmake.conf | 92 ++++++++++++++++++++++ mkspecs/symbian-gcce/qplatformdefs.h | 43 ++++++++++ .../symbian/linux-armcc/features/default_post.prf | 5 -- mkspecs/symbian/linux-armcc/qmake.conf | 62 --------------- mkspecs/symbian/linux-armcc/qplatformdefs.h | 42 ---------- .../symbian/linux-gcce/features/default_post.prf | 5 -- mkspecs/symbian/linux-gcce/qmake.conf | 92 ---------------------- mkspecs/symbian/linux-gcce/qplatformdefs.h | 43 ---------- src/corelib/global/global.pri | 2 +- src/s60main/s60main.pro | 2 +- 18 files changed, 264 insertions(+), 264 deletions(-) create mode 100644 mkspecs/symbian-armcc/features/default_post.prf create mode 100644 mkspecs/symbian-armcc/qmake.conf create mode 100644 mkspecs/symbian-armcc/qplatformdefs.h create mode 100644 mkspecs/symbian-gcce/features/default_post.prf create mode 100644 mkspecs/symbian-gcce/qmake.conf create mode 100644 mkspecs/symbian-gcce/qplatformdefs.h delete mode 100644 mkspecs/symbian/linux-armcc/features/default_post.prf delete mode 100644 mkspecs/symbian/linux-armcc/qmake.conf delete mode 100644 mkspecs/symbian/linux-armcc/qplatformdefs.h delete mode 100644 mkspecs/symbian/linux-gcce/features/default_post.prf delete mode 100644 mkspecs/symbian/linux-gcce/qmake.conf delete mode 100644 mkspecs/symbian/linux-gcce/qplatformdefs.h diff --git a/configure b/configure index dfbf9bd..6341dfb 100755 --- a/configure +++ b/configure @@ -761,7 +761,7 @@ L_FLAGS= RPATH_FLAGS= l_FLAGS= QCONFIG_FLAGS= -XPLATFORM= # This seems to be the QMAKESPEC, like "linux-g++" or "symbian/linux-gcce" +XPLATFORM= # This seems to be the QMAKESPEC, like "linux-g++" or "symbian-gcce" XPLATFORM_MINGW=no # Whether target platform is MinGW (win32-g++*) PLATFORM=$QMAKESPEC QT_CROSS_COMPILE=no diff --git a/doc/src/snippets/code/doc_src_installation.qdoc b/doc/src/snippets/code/doc_src_installation.qdoc index 1a87566..5aaa2b0 100644 --- a/doc/src/snippets/code/doc_src_installation.qdoc +++ b/doc/src/snippets/code/doc_src_installation.qdoc @@ -250,12 +250,12 @@ export PATH //! [38] cd /home/user/qt/%VERSION% -./configure -platform linux-g++ -xplatform symbian/linux-armcc +./configure -platform linux-g++ -xplatform symbian-armcc //! [38] //! [39] cd /home/user/qt/%VERSION% -./configure -platform linux-g++ -xplatform symbian/linux-gcce -no-webkit +./configure -platform linux-g++ -xplatform symbian-gcce -no-webkit //! [39] //! [40] diff --git a/mkspecs/features/symbian/do_not_build_as_thumb.prf b/mkspecs/features/symbian/do_not_build_as_thumb.prf index 60d9382..0f1fd9f 100644 --- a/mkspecs/features/symbian/do_not_build_as_thumb.prf +++ b/mkspecs/features/symbian/do_not_build_as_thumb.prf @@ -1,6 +1,6 @@ symbian-abld|symbian-sbsv2 { MMP_RULES += ALWAYS_BUILD_AS_ARM -} else:linux-armcc { +} else:symbian-armcc { QMAKE_CFLAGS -= --thumb QMAKE_CFLAGS += --arm QMAKE_CXXFLAGS -= --thumb diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf index 0d2e053..248c83f 100644 --- a/mkspecs/features/symbian/symbian_building.prf +++ b/mkspecs/features/symbian/symbian_building.prf @@ -1,7 +1,7 @@ -linux-armcc { +symbian-armcc { QMAKE_CFLAGS += $$QMAKE_CFLAGS.ARMCC QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS.ARMCC -} else:linux-gcce { +} else:symbian-gcce { QMAKE_CFLAGS += $$QMAKE_CFLAGS.GCCE QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS.GCCE } @@ -16,7 +16,7 @@ else:clean_TARGET = $$TARGET !contains(clean_TARGET, ".*[ -/].*"):eval(TMPVAR = \$\$QMAKE_$${clean_TARGET}_LFLAGS) !isEmpty(TMPVAR) { QMAKE_LFLAGS += $$TMPVAR -} else :linux-gcce { # lets provide a simple default. Without elf2e32 complains +} else :symbian-gcce { # lets provide a simple default. Without elf2e32 complains QMAKE_LFLAGS += -Ttext 0x80000 -Tdata 0x400000 } @@ -62,7 +62,7 @@ for(libToProcess, libsToProcess) { } else { qt_newLib = $$processSymbianLibrary($$qt_library) contains(qt_newLib, ".*\\.dso$")|contains(qt_newLib, ".*\\.lib$"):PRE_TARGETDEPS += $$qt_newLib - linux-gcce:qt_newLib = "-l:$$qt_newLib" + symbian-gcce:qt_newLib = "-l:$$qt_newLib" eval($$libToProcess += \$\$qt_newLib) } } @@ -142,10 +142,10 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) { QMAKE_CLEAN += $${symbianObjdir}/$${baseTarget}.dso QMAKE_CLEAN += $${symbianObjdir}/$${baseTarget}.def - linux-armcc: { + symbian-armcc: { LIBS += usrt2_2.lib dfpaeabi.dso dfprvct2_2.dso drtaeabi.dso scppnwdl.dso drtrvct2_2.dso h_t__uf.l\\(switch8.o\\) LIBS += -ledllstub.lib -ledll.lib\\(uc_dll_.o\\) - } else :linux-gcce { + } else :symbian-gcce { LIBS += \ -l:edllstub.lib \ -l:edll.lib \ @@ -185,7 +185,7 @@ contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") { QMAKE_DISTCLEAN += $${symbianDestdir}/$${baseTarget}.exe QMAKE_CLEAN += $${symbianDestdir}/$${baseTarget} - linux-armcc: { + symbian-armcc: { QMAKE_LIBS += usrt2_2.lib dfpaeabi.dso dfprvct2_2.dso drtaeabi.dso scppnwdl.dso drtrvct2_2.dso h_t__uf.l\\(switch8.o\\) QMAKE_LIBS += -leexe.lib\\(uc_exe_.o\\) contains(CONFIG, "qt") { @@ -195,7 +195,7 @@ contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") { QMAKE_LIBS -= $$QMAKE_LIBS_NO_QT_ENTRY QMAKE_LIBS += $$QMAKE_LIBS_NO_QT_ENTRY } - } else :linux-gcce { + } else :symbian-gcce { # notice that we can't merge these as ordering of arguments is important. QMAKE_LIBS += \ -l:eexe.lib \ @@ -225,7 +225,7 @@ contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") { } # Symbian resource files -linux-armcc: { +symbian-armcc: { SYMBIAN_RVCT22INC=$$(RVCT22INC) !isEmpty(SYMBIAN_RVCT22INC):symbian_resources_INCLUDES = -I$${SYMBIAN_RVCT22INC} } diff --git a/mkspecs/symbian-armcc/features/default_post.prf b/mkspecs/symbian-armcc/features/default_post.prf new file mode 100644 index 0000000..7aa1f4d --- /dev/null +++ b/mkspecs/symbian-armcc/features/default_post.prf @@ -0,0 +1,5 @@ +load(default_post.prf) + +# It is important that this config be executed last, +# and qmake does them in reverse order. +CONFIG = symbian_building $$CONFIG diff --git a/mkspecs/symbian-armcc/qmake.conf b/mkspecs/symbian-armcc/qmake.conf new file mode 100644 index 0000000..be6af39 --- /dev/null +++ b/mkspecs/symbian-armcc/qmake.conf @@ -0,0 +1,62 @@ +# +# qmake configuration for symbian-armcc +# + +include(../common/symbian/symbian-makefile.conf) + +include(../common/armcc.conf) + +QMAKE_RVCT_LINKSTYLE = 1 + +# notice that the middle part of the following set of vars matches the TARGET content of the libs + +#QMAKE_qtmain_CXXFLAGS = --arm +#QMAKE_QtCore_CXXFLAGS = +QMAKE_QtGui_LFLAGS = "--rw-base 0x800000" +#QMAKE_QtDBus_CXXFLAGS = +#QMAKE_QtDeclarative_CXXFLAGS = +#QMAKE_QtMultimedia_CXXFLAGS = +#QMAKE_QtNetwork_CXXFLAGS = +#QMAKE_QtOpenGL_CXXFLAGS = +#QMAKE_QtOpenVG_CXXFLAGS = +#QMAKE_phonon_CXXFLAGS = +#QMAKE_QtScript_CXXFLAGS = +#QMAKE_QtScriptTools_CXXFLAGS = +#QMAKE_QtSql_CXXFLAGS = +#QMAKE_QtSvg_CXXFLAGS = +#QMAKE_QtTest_CXXFLAGS = +#QMAKE_QtXmlPatterns_CXXFLAGS = +#QMAKE_QtXml_CXXFLAGS = +QMAKE_QtWebKit_CXXFLAGS = --arm +# Move RW-section base address to start from 0xE00000 instead of the toolchain default 0x400000. +QMAKE_QtWebKit_LFLAGS = --rw-base 0xE00000 + +QMAKE_CFLAGS += --dllimport_runtime --diag_suppress 186,611,654,1300 --thumb --fpu softvfp --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --no_vfe --apcs /inter +QMAKE_CXXFLAGS += $$QMAKE_CFLAGS +QMAKE_LFLAGS += --symver_soname --diag_suppress 6331,6780 --bpabi --reloc --datacompressor=off --split --dll --no_scanlib +QMAKE_LFLAGS_APP += --entry _E32Startup +QMAKE_LFLAGS_SHLIB += --entry _E32Dll +QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB + +DEFINES += EKA2 \ + __ARMCC__ \ + __ARMcc_2__ \ + __ARMCC_2_2__ + +QMAKE_LIBDIR += $${EPOCROOT}epoc32/release/armv5/lib +QMAKE_LIBDIR *= $$(RVCT22LIB) + +INCLUDEPATH = $${EPOCROOT}epoc32/include \ + $${EPOCROOT}epoc32/include/variant \ + $${EPOCROOT}epoc32/include/stdapis \ + $$INCLUDEPATH + +exists($${EPOCROOT}epoc32/include/rvct2_2) { + INCLUDEPATH += $${EPOCROOT}epoc32/include/rvct2_2 + QMAKE_CFLAGS += --preinclude rvct2_2.h + QMAKE_CXXFLAGS += --preinclude rvct2_2.h +} else { + INCLUDEPATH += $${EPOCROOT}epoc32/include/rvct + QMAKE_CFLAGS += --preinclude rvct.h + QMAKE_CXXFLAGS += --preinclude rvct.h +} diff --git a/mkspecs/symbian-armcc/qplatformdefs.h b/mkspecs/symbian-armcc/qplatformdefs.h new file mode 100644 index 0000000..0eb74ca --- /dev/null +++ b/mkspecs/symbian-armcc/qplatformdefs.h @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the mkspecs of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "../common/symbian/qplatformdefs.h" diff --git a/mkspecs/symbian-gcce/features/default_post.prf b/mkspecs/symbian-gcce/features/default_post.prf new file mode 100644 index 0000000..7aa1f4d --- /dev/null +++ b/mkspecs/symbian-gcce/features/default_post.prf @@ -0,0 +1,5 @@ +load(default_post.prf) + +# It is important that this config be executed last, +# and qmake does them in reverse order. +CONFIG = symbian_building $$CONFIG diff --git a/mkspecs/symbian-gcce/qmake.conf b/mkspecs/symbian-gcce/qmake.conf new file mode 100644 index 0000000..8de9f26 --- /dev/null +++ b/mkspecs/symbian-gcce/qmake.conf @@ -0,0 +1,92 @@ +# +# qmake configuration for symbian-gcce +# + +include(../common/symbian/symbian-makefile.conf) + +include(../common/g++.conf) + +QMAKE_CC = arm-none-symbianelf-gcc +QMAKE_CXX = arm-none-symbianelf-g++ +QMAKE_LINK = arm-none-symbianelf-ld +QMAKE_LINK_SHLIB = arm-none-symbianelf-ld +QMAKE_LINK_C = arm-none-symbianelf-ld +QMAKE_LINK_C_SHLIB = arm-none-symbianelf-ld +QMAKE_AR = arm-none-symbianelf-ar cqs + +# gcce defaults to 'arm' instruction set. Lets use the better 'thumb' if possible +# notice that the middle part of the following set of vars matches the TARGET content of the libs + +QMAKE_qtmain_CXXFLAGS = -mthumb +QMAKE_QtCore_CXXFLAGS = -mthumb +QMAKE_QtGui_LFLAGS = -Ttext 0x8000 -Tdata 0xE00000 +QMAKE_QtDBus_CXXFLAGS = -mthumb +QMAKE_QtDeclarative_CXXFLAGS = -mthumb +QMAKE_QtMultimedia_CXXFLAGS = -mthumb +QMAKE_QtNetwork_CXXFLAGS = -mthumb +QMAKE_QtOpenGL_CXXFLAGS = -mthumb +QMAKE_QtOpenVG_CXXFLAGS = -mthumb +QMAKE_phonon_CXXFLAGS = -mthumb +QMAKE_QtScript_CXXFLAGS = -mthumb +QMAKE_QtScriptTools_CXXFLAGS = -mthumb +QMAKE_QtSql_CXXFLAGS = -mthumb +QMAKE_QtSvg_CXXFLAGS = -mthumb +QMAKE_QtTest_CXXFLAGS = -mthumb +QMAKE_QtXmlPatterns_CXXFLAGS = -mthumb +QMAKE_QtXml_CXXFLAGS = -mthumb +#TODO fails with; arm-none-symbianelf-ld: section .data loaded at [00e00000,00e05973] overlaps section .text loaded at [00008000,00fe748b] +QMAKE_QtWebKit_LFLAGS = -Ttext 0x8000 -Tdata 0xE00000 + +# never use -fPIC, gcce-linker doesn't like it. +# g++ conf above adds it if the host platform is 64 bit, so we remove it again +QMAKE_CFLAGS_SHLIB -= -fPIC +QMAKE_CFLAGS_STATIC_LIB -= -fPIC +QMAKE_CXXFLAGS_SHLIB -= -fPIC +QMAKE_CXXFLAGS_STATIC_LIB -= -fPIC + +QMAKE_LFLAGS_SONAME = +#QMAKE_LFLAGS_THREAD += +QMAKE_LFLAGS_NOUNDEF = +QMAKE_LFLAGS_RPATH = --rpath= + +DEFINES += __GCCE__ \ + UNICODE + +QMAKE_LFLAGS_APP += --entry=_E32Startup -u _E32Startup +QMAKE_LFLAGS_SHLIB += --default-symver --entry=_E32Dll -u _E32Dll +QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB + +gcceExtraFlags = --include=${EPOCROOT}/epoc32/include/gcce/gcce.h -march=armv5t -mapcs -mthumb-interwork -nostdinc -c -msoft-float -T script +QMAKE_CFLAGS += $${gcceExtraFlags} +QMAKE_CXXFLAGS += $${gcceExtraFlags} -x c++ -fexceptions -fno-unit-at-a-time -fvisibility-inlines-hidden +#If we are not going to link to Qt or qtmain.lib, we need to include this at least once. +isEmpty(QT):contains(TEMPLATE, app) { + QMAKE_CXXFLAGS += --include=${EPOCROOT}/epoc32/include/stdapis/staticlibinit_gcce.h +} + +QMAKE_LFLAGS += --target1-abs \ + --no-undefined \ + --nostdlib + +QMAKE_LIBDIR += ${EPOCROOT}/epoc32/release/armv5/udeb/ + +# g++ knows the path to the gcc-shipped-libs, ld doesn't. So cache the full path in the generate Makefile +QMAKE_GCC_SEARCH_DIRS =$$system($$QMAKE_CXX -print-search-dirs) +for(line, QMAKE_GCC_SEARCH_DIRS) { + contains(line, "libraries:") { + foundIt="1" + } else { + contains(foundIt, "1") { + QMAKE_LFLAGS += $$replace(line, "[=:]", " -L") + } + } +} + +QMAKE_LIBDIR += $${EPOCROOT}/epoc32/release/armv5/lib + +INCLUDEPATH = ${EPOCROOT}/epoc32/include/ \ + $${EPOCROOT}/epoc32/include/variant \ + $${EPOCROOT}/epoc32/include/stdapis \ + $${EPOCROOT}/epoc32/include/gcce \ + $$INCLUDEPATH + diff --git a/mkspecs/symbian-gcce/qplatformdefs.h b/mkspecs/symbian-gcce/qplatformdefs.h new file mode 100644 index 0000000..9d95a37 --- /dev/null +++ b/mkspecs/symbian-gcce/qplatformdefs.h @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the mkspecs of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "../common/symbian/qplatformdefs.h" + diff --git a/mkspecs/symbian/linux-armcc/features/default_post.prf b/mkspecs/symbian/linux-armcc/features/default_post.prf deleted file mode 100644 index 7aa1f4d..0000000 --- a/mkspecs/symbian/linux-armcc/features/default_post.prf +++ /dev/null @@ -1,5 +0,0 @@ -load(default_post.prf) - -# It is important that this config be executed last, -# and qmake does them in reverse order. -CONFIG = symbian_building $$CONFIG diff --git a/mkspecs/symbian/linux-armcc/qmake.conf b/mkspecs/symbian/linux-armcc/qmake.conf deleted file mode 100644 index f058421..0000000 --- a/mkspecs/symbian/linux-armcc/qmake.conf +++ /dev/null @@ -1,62 +0,0 @@ -# -# qmake configuration for symbian/linux-armcc -# - -include(../../common/symbian/symbian-makefile.conf) - -include(../../common/armcc.conf) - -QMAKE_RVCT_LINKSTYLE = 1 - -# notice that the middle part of the following set of vars matches the TARGET content of the libs - -#QMAKE_qtmain_CXXFLAGS = --arm -#QMAKE_QtCore_CXXFLAGS = -QMAKE_QtGui_LFLAGS = "--rw-base 0x800000" -#QMAKE_QtDBus_CXXFLAGS = -#QMAKE_QtDeclarative_CXXFLAGS = -#QMAKE_QtMultimedia_CXXFLAGS = -#QMAKE_QtNetwork_CXXFLAGS = -#QMAKE_QtOpenGL_CXXFLAGS = -#QMAKE_QtOpenVG_CXXFLAGS = -#QMAKE_phonon_CXXFLAGS = -#QMAKE_QtScript_CXXFLAGS = -#QMAKE_QtScriptTools_CXXFLAGS = -#QMAKE_QtSql_CXXFLAGS = -#QMAKE_QtSvg_CXXFLAGS = -#QMAKE_QtTest_CXXFLAGS = -#QMAKE_QtXmlPatterns_CXXFLAGS = -#QMAKE_QtXml_CXXFLAGS = -QMAKE_QtWebKit_CXXFLAGS = --arm -# Move RW-section base address to start from 0xE00000 instead of the toolchain default 0x400000. -QMAKE_QtWebKit_LFLAGS = --rw-base 0xE00000 - -QMAKE_CFLAGS += --dllimport_runtime --diag_suppress 186,611,654,1300 --thumb --fpu softvfp --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --no_vfe --apcs /inter -QMAKE_CXXFLAGS += $$QMAKE_CFLAGS -QMAKE_LFLAGS += --symver_soname --diag_suppress 6331,6780 --bpabi --reloc --datacompressor=off --split --dll --no_scanlib -QMAKE_LFLAGS_APP += --entry _E32Startup -QMAKE_LFLAGS_SHLIB += --entry _E32Dll -QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB - -DEFINES += EKA2 \ - __ARMCC__ \ - __ARMcc_2__ \ - __ARMCC_2_2__ - -QMAKE_LIBDIR += $${EPOCROOT}epoc32/release/armv5/lib -QMAKE_LIBDIR *= $$(RVCT22LIB) - -INCLUDEPATH = $${EPOCROOT}epoc32/include \ - $${EPOCROOT}epoc32/include/variant \ - $${EPOCROOT}epoc32/include/stdapis \ - $$INCLUDEPATH - -exists($${EPOCROOT}epoc32/include/rvct2_2) { - INCLUDEPATH += $${EPOCROOT}epoc32/include/rvct2_2 - QMAKE_CFLAGS += --preinclude rvct2_2.h - QMAKE_CXXFLAGS += --preinclude rvct2_2.h -} else { - INCLUDEPATH += $${EPOCROOT}epoc32/include/rvct - QMAKE_CFLAGS += --preinclude rvct.h - QMAKE_CXXFLAGS += --preinclude rvct.h -} diff --git a/mkspecs/symbian/linux-armcc/qplatformdefs.h b/mkspecs/symbian/linux-armcc/qplatformdefs.h deleted file mode 100644 index 19c97ff..0000000 --- a/mkspecs/symbian/linux-armcc/qplatformdefs.h +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the mkspecs of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "../../common/symbian/qplatformdefs.h" diff --git a/mkspecs/symbian/linux-gcce/features/default_post.prf b/mkspecs/symbian/linux-gcce/features/default_post.prf deleted file mode 100644 index 7aa1f4d..0000000 --- a/mkspecs/symbian/linux-gcce/features/default_post.prf +++ /dev/null @@ -1,5 +0,0 @@ -load(default_post.prf) - -# It is important that this config be executed last, -# and qmake does them in reverse order. -CONFIG = symbian_building $$CONFIG diff --git a/mkspecs/symbian/linux-gcce/qmake.conf b/mkspecs/symbian/linux-gcce/qmake.conf deleted file mode 100644 index 62cc9ae..0000000 --- a/mkspecs/symbian/linux-gcce/qmake.conf +++ /dev/null @@ -1,92 +0,0 @@ -# -# qmake configuration for symbian/linux-gcce -# - -include(../../common/symbian/symbian-makefile.conf) - -include(../../common/g++.conf) - -QMAKE_CC = arm-none-symbianelf-gcc -QMAKE_CXX = arm-none-symbianelf-g++ -QMAKE_LINK = arm-none-symbianelf-ld -QMAKE_LINK_SHLIB = arm-none-symbianelf-ld -QMAKE_LINK_C = arm-none-symbianelf-ld -QMAKE_LINK_C_SHLIB = arm-none-symbianelf-ld -QMAKE_AR = arm-none-symbianelf-ar cqs - -# gcce defaults to 'arm' instruction set. Lets use the better 'thumb' if possible -# notice that the middle part of the following set of vars matches the TARGET content of the libs - -QMAKE_qtmain_CXXFLAGS = -mthumb -QMAKE_QtCore_CXXFLAGS = -mthumb -QMAKE_QtGui_LFLAGS = -Ttext 0x8000 -Tdata 0xE00000 -QMAKE_QtDBus_CXXFLAGS = -mthumb -QMAKE_QtDeclarative_CXXFLAGS = -mthumb -QMAKE_QtMultimedia_CXXFLAGS = -mthumb -QMAKE_QtNetwork_CXXFLAGS = -mthumb -QMAKE_QtOpenGL_CXXFLAGS = -mthumb -QMAKE_QtOpenVG_CXXFLAGS = -mthumb -QMAKE_phonon_CXXFLAGS = -mthumb -QMAKE_QtScript_CXXFLAGS = -mthumb -QMAKE_QtScriptTools_CXXFLAGS = -mthumb -QMAKE_QtSql_CXXFLAGS = -mthumb -QMAKE_QtSvg_CXXFLAGS = -mthumb -QMAKE_QtTest_CXXFLAGS = -mthumb -QMAKE_QtXmlPatterns_CXXFLAGS = -mthumb -QMAKE_QtXml_CXXFLAGS = -mthumb -#TODO fails with; arm-none-symbianelf-ld: section .data loaded at [00e00000,00e05973] overlaps section .text loaded at [00008000,00fe748b] -QMAKE_QtWebKit_LFLAGS = -Ttext 0x8000 -Tdata 0xE00000 - -# never use -fPIC, gcce-linker doesn't like it. -# g++ conf above adds it if the host platform is 64 bit, so we remove it again -QMAKE_CFLAGS_SHLIB -= -fPIC -QMAKE_CFLAGS_STATIC_LIB -= -fPIC -QMAKE_CXXFLAGS_SHLIB -= -fPIC -QMAKE_CXXFLAGS_STATIC_LIB -= -fPIC - -QMAKE_LFLAGS_SONAME = -#QMAKE_LFLAGS_THREAD += -QMAKE_LFLAGS_NOUNDEF = -QMAKE_LFLAGS_RPATH = --rpath= - -DEFINES += __GCCE__ \ - UNICODE - -QMAKE_LFLAGS_APP += --entry=_E32Startup -u _E32Startup -QMAKE_LFLAGS_SHLIB += --default-symver --entry=_E32Dll -u _E32Dll -QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB - -gcceExtraFlags = --include=${EPOCROOT}/epoc32/include/gcce/gcce.h -march=armv5t -mapcs -mthumb-interwork -nostdinc -c -msoft-float -T script -QMAKE_CFLAGS += $${gcceExtraFlags} -QMAKE_CXXFLAGS += $${gcceExtraFlags} -x c++ -fexceptions -fno-unit-at-a-time -fvisibility-inlines-hidden -#If we are not going to link to Qt or qtmain.lib, we need to include this at least once. -isEmpty(QT):contains(TEMPLATE, app) { - QMAKE_CXXFLAGS += --include=${EPOCROOT}/epoc32/include/stdapis/staticlibinit_gcce.h -} - -QMAKE_LFLAGS += --target1-abs \ - --no-undefined \ - --nostdlib - -QMAKE_LIBDIR += ${EPOCROOT}/epoc32/release/armv5/udeb/ - -# g++ knows the path to the gcc-shipped-libs, ld doesn't. So cache the full path in the generate Makefile -QMAKE_GCC_SEARCH_DIRS =$$system($$QMAKE_CXX -print-search-dirs) -for(line, QMAKE_GCC_SEARCH_DIRS) { - contains(line, "libraries:") { - foundIt="1" - } else { - contains(foundIt, "1") { - QMAKE_LFLAGS += $$replace(line, "[=:]", " -L") - } - } -} - -QMAKE_LIBDIR += $${EPOCROOT}/epoc32/release/armv5/lib - -INCLUDEPATH = ${EPOCROOT}/epoc32/include/ \ - $${EPOCROOT}/epoc32/include/variant \ - $${EPOCROOT}/epoc32/include/stdapis \ - $${EPOCROOT}/epoc32/include/gcce \ - $$INCLUDEPATH - diff --git a/mkspecs/symbian/linux-gcce/qplatformdefs.h b/mkspecs/symbian/linux-gcce/qplatformdefs.h deleted file mode 100644 index ae46e15..0000000 --- a/mkspecs/symbian/linux-gcce/qplatformdefs.h +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the mkspecs of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "../../common/symbian/qplatformdefs.h" - diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri index 86800ef..65de6e0 100644 --- a/src/corelib/global/global.pri +++ b/src/corelib/global/global.pri @@ -19,7 +19,7 @@ INCLUDEPATH += $$QT_BUILD_TREE/src/corelib/global # Only used on platforms with CONFIG += precompile_header PRECOMPILED_HEADER = global/qt_pch.h -linux*:!static:!linux-armcc:!linux-gcce { +linux*:!static:!symbian-armcc:!symbian-gcce { QMAKE_LFLAGS += -Wl,-e,qt_core_boilerplate prog=$$quote(if (/program interpreter: (.*)]/) { print $1; }) DEFINES += ELF_INTERPRETER=\\\"$$system(readelf -l /bin/ls | perl -n -e \'$$prog\')\\\" diff --git a/src/s60main/s60main.pro b/src/s60main/s60main.pro index 8ab3bd3..1e3e06a 100644 --- a/src/s60main/s60main.pro +++ b/src/s60main/s60main.pro @@ -30,7 +30,7 @@ symbian { # Having MMP_RULES_DONT_EXPORT_ALL_CLASS_IMPEDIMENTA will cause s60main.lib be unlinkable # against GCCE apps, so remove it MMP_RULES -= $$MMP_RULES_DONT_EXPORT_ALL_CLASS_IMPEDIMENTA - linux-armcc:QMAKE_CXXFLAGS *= --export_all_vtbl + symbian-armcc:QMAKE_CXXFLAGS *= --export_all_vtbl # Flag if exports are not frozen to avoid lookup of qtcore allocator creation function by ordinal contains(CONFIG, def_files_disabled): DEFINES += QT_EXPORTS_NOT_FROZEN -- cgit v0.12 From 342cd591f5a702b1bff2a72cf6894da191cd0f10 Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 8 Oct 2010 15:38:10 +0200 Subject: Fixed various quotation problems when porting to Windows. These should work for both Windows and UNIX platforms. RevBy: Thomas Zander --- mkspecs/common/symbian/symbian-makefile.conf | 4 ++-- mkspecs/features/symbian/symbian_building.prf | 17 +++++++++++------ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/mkspecs/common/symbian/symbian-makefile.conf b/mkspecs/common/symbian/symbian-makefile.conf index e51de1d..899f8c2 100644 --- a/mkspecs/common/symbian/symbian-makefile.conf +++ b/mkspecs/common/symbian/symbian-makefile.conf @@ -25,9 +25,9 @@ QMAKE_PREFIX_STATICLIB = QMAKE_SYMBIAN_SHLIB = 1 is_using_gnupoc { - DEFINES *= __PRODUCT_INCLUDE__=\\<$${EPOCROOT}epoc32/include/variant/symbian_os.hrh\\> + DEFINES *= __PRODUCT_INCLUDE__=\"<$${EPOCROOT}epoc32/include/variant/symbian_os.hrh>\" } else { - DEFINES *= __PRODUCT_INCLUDE__=\\<$${EPOCROOT}epoc32/include/variant/Symbian_OS.hrh\\> + DEFINES *= __PRODUCT_INCLUDE__=\"<$${EPOCROOT}epoc32/include/variant/Symbian_OS.hrh>\" } DEFINES *= \ __SYMBIAN32__ \ diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf index 248c83f..f5df68b 100644 --- a/mkspecs/features/symbian/symbian_building.prf +++ b/mkspecs/features/symbian/symbian_building.prf @@ -129,7 +129,7 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) { --tmpdso=$${symbianObjdir}/$${baseTarget}.dso \ --dso=$${symbianDestdir}/$${baseTarget}.dso \ --defoutput=$$symbianObjdir/$${baseTarget}.def \ - --linkas=$${baseTarget}\\{$${hexVersion}\\}\\[$${intUid3}\\].dll \ + --linkas=\"$${baseTarget}{$${hexVersion}}[$${intUid3}].dll\" \ --heap=$$epoc_heap_size \ --stack=$$TARGET.EPOCSTACKSIZE \ $$elf2e32_LIBPATH \ @@ -143,8 +143,13 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) { QMAKE_CLEAN += $${symbianObjdir}/$${baseTarget}.def symbian-armcc: { - LIBS += usrt2_2.lib dfpaeabi.dso dfprvct2_2.dso drtaeabi.dso scppnwdl.dso drtrvct2_2.dso h_t__uf.l\\(switch8.o\\) - LIBS += -ledllstub.lib -ledll.lib\\(uc_dll_.o\\) + LIBS += usrt2_2.lib dfpaeabi.dso dfprvct2_2.dso drtaeabi.dso scppnwdl.dso drtrvct2_2.dso + # Quotation unfortunately is different on Windows and unix. + contains(QMAKE_HOST.os, Windows) { + LIBS += \"h_t__uf.l(switch8.o)\" edllstub.lib \"edll.lib(uc_dll_.o)\" + } else { + LIBS += h_t__uf.l\\(switch8.o\\) edllstub.lib edll.lib\\(uc_dll_.o\\) + } } else :symbian-gcce { LIBS += \ -l:edllstub.lib \ @@ -157,7 +162,7 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) { -lgcc } - QMAKE_LFLAGS += --soname $${baseTarget}\\{$${hexVersion}\\}\\[$${intUid3}\\].dll + QMAKE_LFLAGS += --soname \"$${baseTarget}{$${hexVersion}}[$${intUid3}].dll\" DEFINES += __DLL__ } @@ -172,7 +177,7 @@ contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") { --targettype=EXE \ --elfinput=$${symbianDestdir}/$${baseTarget}.sym \ --output=$${symbianDestdir}/$${baseTarget}.exe \ - --linkas=$${baseTarget}\\{$${hexVersion}\\}\\[$${intUid3}\\].exe \ + --linkas=\"$${baseTarget}{$${hexVersion}}[$${intUid3}].exe\" \ --heap=$$epoc_heap_size \ --stack=$$TARGET.EPOCSTACKSIZE \ $$elf2e32_LIBPATH \ @@ -220,7 +225,7 @@ contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") { QMAKE_LFLAGS += --shared } - QMAKE_LFLAGS += --soname $${baseTarget}\\{$${hexVersion}\\}\\[$${intUid3}\\].exe + QMAKE_LFLAGS += --soname \"$${baseTarget}{$${hexVersion}}[$${intUid3}].exe\" DEFINES += __EXE__ } -- cgit v0.12 From c2773ce6b4efb3f8f8d516c29750dd25c802f60b Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 18 Feb 2011 15:20:00 +0100 Subject: Changed various qmake constructs to support Windows. RevBy: Thomas Zander Conflicts: mkspecs/features/symbian/symbian_building.prf --- mkspecs/features/symbian/def_files.prf | 18 ++++++++++++++++-- mkspecs/features/symbian/symbian_building.prf | 19 ++++++++++++------- .../sqldrivers/sqlite_symbian/sqlite_symbian.pri | 10 ++++++++-- 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/mkspecs/features/symbian/def_files.prf b/mkspecs/features/symbian/def_files.prf index 4a59116..746de6a 100644 --- a/mkspecs/features/symbian/def_files.prf +++ b/mkspecs/features/symbian/def_files.prf @@ -7,6 +7,18 @@ CONFIG -= def_files_disabled equals(QMAKE_TARGET_PRODUCT, Qt4)|equals(QMAKE_TARGET_PRODUCT, QTestLib):clean_TARGET = $$replace(TARGET, "$${QT_LIBINFIX}$", "") else:clean_TARGET = $$TARGET +defineTest(qtTestIfDirExists) { + contains(QMAKE_HOST.os,Windows) { + dirToTest = $$1 + $$dirToTest ~= s,/,\\, + # Windows trick. Test for existence of nul, which every directory has. + retValue = $$system("if exist $$dirToTest\\nul echo true") + contains(retValue, true):return(true)|return(false) + } else { + system("test -d $$1"):return(true)|return(false) + } +} + symbian-abld|symbian-sbsv2 { # Firstly, if the MMP_RULES already contain a defBlock variable, don't generate another one # (this bit is slightly magic, because it depends upon everyone creating their DEFFILE statements @@ -52,9 +64,11 @@ symbian-abld|symbian-sbsv2 { } else { defFile = . } - system("$$QMAKE_CHK_DIR_EXISTS $$_PRO_FILE_PWD_/$$defFile") { + qtTestIfDirExists($$_PRO_FILE_PWD_/$$defFile) { !exists("$$_PRO_FILE_PWD_/$$defFile/eabi") { - system("$$QMAKE_MKDIR $$_PRO_FILE_PWD_/$$defFile/eabi") + dirToCreate = $$_PRO_FILE_PWD_/$$defFile/eabi + contains(QMAKE_HOST.os,Windows):dirToCreate ~= s,/,\\, + system("$$QMAKE_MKDIR $$dirToCreate") } elf2e32FileToAdd = $$_PRO_FILE_PWD_/$$defFile/eabi/$$basename(clean_TARGET)u.def } else { diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf index f5df68b..8a0cc9b 100644 --- a/mkspecs/features/symbian/symbian_building.prf +++ b/mkspecs/features/symbian/symbian_building.prf @@ -89,12 +89,13 @@ count(splitVersion, 0) { decVersion = "10.0" } else { count(splitVersion, 3) { - hexVersion = $$system("sh -c 'printf %02x $$member(splitVersion, 0)'") - hexPart2 = $$system("sh -c 'printf %02x $$member(splitVersion, 1)'") - hexPart2 = $$hexPart2$$system("sh -c 'printf %02x $$member(splitVersion, 2)'") - decVersion = $$system("sh -c 'printf %1d 0x$$hexVersion'"). + hexVersion = $$system("perl -e \"printf (\\\"%02x\\\", $$member(splitVersion, 0))\"") + hexPart2 = $$system("perl -e \"printf (\\\"%02x\\\", $$member(splitVersion, 1))\"") + hexPart2 = $$hexPart2$$system("perl -e \"printf (\\\"%02x\\\", $$member(splitVersion, 2))\"") + decVersion = $$system("perl -e \"printf (\\\"%1d\\\", 0x$$hexVersion)\""). hexVersion = $$hexVersion$$hexPart2 - decVersion = $$decVersion$$system("sh -c 'printf %d 0x$$hexPart2'") + decVersion = $$decVersion$$system("perl -e \"printf (\\\"%d\\\", 0x$$hexPart2)\"") + !contains(hexVersion, "[0-9a-f]{8}"):hexVersion = "00$${hexVersion}" } else { # app code may have different numbering... hexVersion = $$VERSION @@ -117,7 +118,9 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) { contains(CONFIG, plugin):QMAKE_ELF2E32_FLAGS += --definput=plugin_commonu.def !isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK = $$escape_expand(\\n\\t)$$QMAKE_POST_LINK - QMAKE_POST_LINK = $$QMAKE_MOVE $$symbianDestdir/$${baseTarget}.dll $$symbianDestdir/$${baseTarget}.sym \ + moveCmd = $$QMAKE_MOVE $$symbianDestdir/$${baseTarget}.dll $$symbianDestdir/$${baseTarget}.sym + contains(QMAKE_HOST.os,Windows):moveCmd = $$replace(moveCmd, /, \\) + QMAKE_POST_LINK = $$moveCmd \ && $$QMAKE_ELF2E32_WRAPPER --version=$$decVersion \ --sid=$$TARGET.SID \ --uid1=0x10000079 \ @@ -168,7 +171,9 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) { contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") { !isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK = $$escape_expand(\\n\\t)$$QMAKE_POST_LINK - QMAKE_POST_LINK = $$QMAKE_MOVE $$symbianDestdir/$${baseTarget} $$symbianDestdir/$${baseTarget}.sym \ + moveCmd = $$QMAKE_MOVE $$symbianDestdir/$${baseTarget} $$symbianDestdir/$${baseTarget}.sym + contains(QMAKE_HOST.os,Windows):moveCmd = $$replace(moveCmd, /, \\) + QMAKE_POST_LINK = $$moveCmd \ && $$QMAKE_ELF2E32_WRAPPER --version $$decVersion \ --sid=$$TARGET.SID \ --uid1=0x1000007a \ diff --git a/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri b/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri index 494c64c..ebeccc9 100644 --- a/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri +++ b/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri @@ -1,6 +1,12 @@ # We just want to include the sqlite3 binaries for Symbian for platforms that do not have them. !symbian-abld:!symbian-sbsv2 { !symbian_no_export_sqlite:!exists($${EPOCROOT}epoc32/release/armv5/lib/sqlite3.dso) { + contains(QMAKE_HOST.os,Windows) { + # Trick on Windows to do a touch on the file, since copy keeps the timestamp. + copyWithTouch = copy /y /b NUL+ + } else { + copyWithTouch = "$$QMAKE_COPY " + } symbian_sqlite3_zip_file = $$PWD/SQLite3_v9.2.zip # The QMAKE_COPY section is to update timestamp on the file. @@ -10,7 +16,7 @@ symbian_sqlite3_header.CONFIG = combine no_link symbian_sqlite3_header.dependency_type = TYPE_C symbian_sqlite3_header.commands = $$QMAKE_UNZIP -j ${QMAKE_FILE_NAME} epoc32/include/stdapis/${QMAKE_FILE_OUT_BASE}.h \ - && $$QMAKE_COPY ${QMAKE_FILE_OUT_BASE}.h ${QMAKE_FILE_OUT}.tmp \ + && $${copyWithTouch}${QMAKE_FILE_OUT_BASE}.h ${QMAKE_FILE_OUT}.tmp \ && $$QMAKE_DEL_FILE ${QMAKE_FILE_OUT_BASE}.h \ && $$QMAKE_MOVE ${QMAKE_FILE_OUT}.tmp ${QMAKE_FILE_OUT} silent:symbian_sqlite3_header.commands = @echo unzipping $@ && $$symbian_sqlite3_header.commands @@ -22,7 +28,7 @@ !isEmpty(OBJECTS_DIR):symbian_sqlite3_dso.output = $$OBJECTS_DIR/$$symbian_sqlite3_dso.output symbian_sqlite3_dso.CONFIG = combine no_link target_predeps symbian_sqlite3_dso.commands = $$QMAKE_UNZIP -j ${QMAKE_FILE_NAME} epoc32/release/armv5/lib/${QMAKE_FILE_OUT_BASE}.dso \ - && $$QMAKE_COPY ${QMAKE_FILE_OUT_BASE}.dso ${QMAKE_FILE_OUT}.tmp \ + && $${copyWithTouch}${QMAKE_FILE_OUT_BASE}.dso ${QMAKE_FILE_OUT}.tmp \ && $$QMAKE_DEL_FILE ${QMAKE_FILE_OUT_BASE}.dso \ && $$QMAKE_MOVE ${QMAKE_FILE_OUT}.tmp ${QMAKE_FILE_OUT} silent:symbian_sqlite3_dso.commands = @echo unzipping $@ && $$symbian_sqlite3_dso.commands -- cgit v0.12 From bfc7893b55e83e174474809861fa53d77e5f3165 Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 8 Oct 2010 15:57:30 +0200 Subject: Added wrapper for the elf2e32_qtwrapper script. This is needed to call the script on Windows. RevBy: Trust me --- bin/elf2e32_qtwrapper | 148 +--------------------------------------------- bin/elf2e32_qtwrapper.bat | 3 + bin/elf2e32_qtwrapper.pl | 145 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 151 insertions(+), 145 deletions(-) create mode 100644 bin/elf2e32_qtwrapper.bat create mode 100644 bin/elf2e32_qtwrapper.pl diff --git a/bin/elf2e32_qtwrapper b/bin/elf2e32_qtwrapper index 694d54a..a3a4065 100755 --- a/bin/elf2e32_qtwrapper +++ b/bin/elf2e32_qtwrapper @@ -1,145 +1,3 @@ -#!/usr/bin/perl -w - -# A script to get around some shortcomings in elf2e32, namely: -# - Returning 0 even when there are errors. -# - Excluding symbols from the dso file even when they are present in the ELF file. -# - Including symbols in the the dso file even when they are not present in the ELF file. -# - Overwriting the old dso file even when there are no changes (increases build time). - -use File::Copy; - -my @args = (); -my @definput; -my @defoutput; -my @dso; -my @tmpdso; -foreach (@ARGV) { - if (/^--definput/o) { - @definput = split('=', $_); - } elsif (/^--defoutput/o) { - @defoutput = split('=', $_); - } elsif (/^--dso/o) { - @dso = split('=', $_); - } elsif (/^--tmpdso/o) { - @tmpdso = split('=', $_); - $tmpdso[0] = "--dso"; - } else { - push(@args, $_); - } -} - -@definput = () if (!@definput || ! -e $definput[1]); - -if (@dso && !@tmpdso || !@dso && @tmpdso) { - print("--dso and --tmpdso must be used together.\n"); - exit 1; -} - -my $buildingLibrary = (@defoutput && @dso) ? 1 : 0; - -my $fixupFile = ""; -my $runCount = 0; -my $returnCode = 0; - -while (1) { - if (++$runCount > 2) { - print("Internal error in $0, link succeeded, but exports may be wrong.\n"); - last; - } - - my $elf2e32Pipe; - my $elf2e32Cmd = "elf2e32 @args" - . " " . join("=", @definput) - . " " . join("=", @defoutput) - . " " . join("=", @tmpdso); - open($elf2e32Pipe, "$elf2e32Cmd 2>&1 |") or die ("Could not run elf2e32"); - - my %fixupSymbols; - my $foundBrokenSymbols = 0; - my $errors = 0; - while (<$elf2e32Pipe>) { - print; - if (/Error:/io) { - $errors = 1; - } elsif (/symbol ([a-z0-9_]+) absent in the DEF file, but present in the ELF file/io) { - $fixupSymbols{$1} = 1; - $foundBrokenSymbols = 1; - } elsif (/[0-9]+ Frozen Export\(s\) missing from the ELF file/io) { - $foundBrokenSymbols = 1; - } - } - close($elf2e32Pipe); - - if ($errors) { - $returnCode = 1; - last; - } - - if ($buildingLibrary) { - my $tmpDefFile; - my $defFile; - open($defFile, "< $defoutput[1]") or die("Could not open $defoutput[1]"); - open($tmpDefFile, "> $defoutput[1].tmp") or die("Could not open $defoutput[1].tmp"); - $fixupFile = "$defoutput[1].tmp"; - while (<$defFile>) { - s/\r//; - s/\n//; - next if (/; NEW:/); - if (/([a-z0-9_]+) @/i) { - if (exists($fixupSymbols{$1})) { - s/ ABSENT//; - } elsif (s/; MISSING://) { - s/$/ ABSENT/; - } - } - print($tmpDefFile "$_\n"); - } - close($defFile); - close($tmpDefFile); - - $definput[1] = "$defoutput[1].tmp"; - - if (!$foundBrokenSymbols || $errors) { - last; - } - - print("Rerunning elf2e32 due to DEF file / ELF file mismatch\n"); - } else { - last; - } -}; - -if ($fixupFile) { - unlink($defoutput[1]); - move($fixupFile, $defoutput[1]); -} - -exit $returnCode if ($returnCode != 0); - -if ($buildingLibrary) { - my $differenceFound = 0; - - if (-e $dso[1]) { - my $dsoFile; - my $tmpdsoFile; - my $dsoBuf; - my $tmpdsoBuf; - open($dsoFile, "< $dso[1]") or die("Could not open $dso[1]"); - open($tmpdsoFile, "< $tmpdso[1]") or die("Could not open $tmpdso[1]"); - binmode($dsoFile); - binmode($tmpdsoFile); - while(read($dsoFile, $dsoBuf, 4096) && read($tmpdsoFile, $tmpdsoBuf, 4096)) { - if ($dsoBuf ne $tmpdsoBuf) { - $differenceFound = 1; - } - } - close($tmpdsoFile); - close($dsoFile); - } else { - $differenceFound = 1; - } - - if ($differenceFound) { - copy($tmpdso[1], $dso[1]); - } -} +#!/bin/sh +scriptpath=`dirname $0` +perl $scriptpath/elf2e32_qtwrapper.pl "$@" diff --git a/bin/elf2e32_qtwrapper.bat b/bin/elf2e32_qtwrapper.bat new file mode 100644 index 0000000..52910df --- /dev/null +++ b/bin/elf2e32_qtwrapper.bat @@ -0,0 +1,3 @@ +@echo off +set scriptpath=%~dp0 +perl %scriptpath%elf2e32_qtwrapper.pl %* diff --git a/bin/elf2e32_qtwrapper.pl b/bin/elf2e32_qtwrapper.pl new file mode 100644 index 0000000..694d54a --- /dev/null +++ b/bin/elf2e32_qtwrapper.pl @@ -0,0 +1,145 @@ +#!/usr/bin/perl -w + +# A script to get around some shortcomings in elf2e32, namely: +# - Returning 0 even when there are errors. +# - Excluding symbols from the dso file even when they are present in the ELF file. +# - Including symbols in the the dso file even when they are not present in the ELF file. +# - Overwriting the old dso file even when there are no changes (increases build time). + +use File::Copy; + +my @args = (); +my @definput; +my @defoutput; +my @dso; +my @tmpdso; +foreach (@ARGV) { + if (/^--definput/o) { + @definput = split('=', $_); + } elsif (/^--defoutput/o) { + @defoutput = split('=', $_); + } elsif (/^--dso/o) { + @dso = split('=', $_); + } elsif (/^--tmpdso/o) { + @tmpdso = split('=', $_); + $tmpdso[0] = "--dso"; + } else { + push(@args, $_); + } +} + +@definput = () if (!@definput || ! -e $definput[1]); + +if (@dso && !@tmpdso || !@dso && @tmpdso) { + print("--dso and --tmpdso must be used together.\n"); + exit 1; +} + +my $buildingLibrary = (@defoutput && @dso) ? 1 : 0; + +my $fixupFile = ""; +my $runCount = 0; +my $returnCode = 0; + +while (1) { + if (++$runCount > 2) { + print("Internal error in $0, link succeeded, but exports may be wrong.\n"); + last; + } + + my $elf2e32Pipe; + my $elf2e32Cmd = "elf2e32 @args" + . " " . join("=", @definput) + . " " . join("=", @defoutput) + . " " . join("=", @tmpdso); + open($elf2e32Pipe, "$elf2e32Cmd 2>&1 |") or die ("Could not run elf2e32"); + + my %fixupSymbols; + my $foundBrokenSymbols = 0; + my $errors = 0; + while (<$elf2e32Pipe>) { + print; + if (/Error:/io) { + $errors = 1; + } elsif (/symbol ([a-z0-9_]+) absent in the DEF file, but present in the ELF file/io) { + $fixupSymbols{$1} = 1; + $foundBrokenSymbols = 1; + } elsif (/[0-9]+ Frozen Export\(s\) missing from the ELF file/io) { + $foundBrokenSymbols = 1; + } + } + close($elf2e32Pipe); + + if ($errors) { + $returnCode = 1; + last; + } + + if ($buildingLibrary) { + my $tmpDefFile; + my $defFile; + open($defFile, "< $defoutput[1]") or die("Could not open $defoutput[1]"); + open($tmpDefFile, "> $defoutput[1].tmp") or die("Could not open $defoutput[1].tmp"); + $fixupFile = "$defoutput[1].tmp"; + while (<$defFile>) { + s/\r//; + s/\n//; + next if (/; NEW:/); + if (/([a-z0-9_]+) @/i) { + if (exists($fixupSymbols{$1})) { + s/ ABSENT//; + } elsif (s/; MISSING://) { + s/$/ ABSENT/; + } + } + print($tmpDefFile "$_\n"); + } + close($defFile); + close($tmpDefFile); + + $definput[1] = "$defoutput[1].tmp"; + + if (!$foundBrokenSymbols || $errors) { + last; + } + + print("Rerunning elf2e32 due to DEF file / ELF file mismatch\n"); + } else { + last; + } +}; + +if ($fixupFile) { + unlink($defoutput[1]); + move($fixupFile, $defoutput[1]); +} + +exit $returnCode if ($returnCode != 0); + +if ($buildingLibrary) { + my $differenceFound = 0; + + if (-e $dso[1]) { + my $dsoFile; + my $tmpdsoFile; + my $dsoBuf; + my $tmpdsoBuf; + open($dsoFile, "< $dso[1]") or die("Could not open $dso[1]"); + open($tmpdsoFile, "< $tmpdso[1]") or die("Could not open $tmpdso[1]"); + binmode($dsoFile); + binmode($tmpdsoFile); + while(read($dsoFile, $dsoBuf, 4096) && read($tmpdsoFile, $tmpdsoBuf, 4096)) { + if ($dsoBuf ne $tmpdsoBuf) { + $differenceFound = 1; + } + } + close($tmpdsoFile); + close($dsoFile); + } else { + $differenceFound = 1; + } + + if ($differenceFound) { + copy($tmpdso[1], $dso[1]); + } +} -- cgit v0.12 From 4ae3fa3f2a912343b50472c6085ba46b8c6d1e7b Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 8 Oct 2010 16:08:09 +0200 Subject: Got rid of some "duplicate library" warnings. RevBy: Trust me --- mkspecs/features/symbian/symbian_building.prf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf index 8a0cc9b..7f8570e 100644 --- a/mkspecs/features/symbian/symbian_building.prf +++ b/mkspecs/features/symbian/symbian_building.prf @@ -63,7 +63,7 @@ for(libToProcess, libsToProcess) { qt_newLib = $$processSymbianLibrary($$qt_library) contains(qt_newLib, ".*\\.dso$")|contains(qt_newLib, ".*\\.lib$"):PRE_TARGETDEPS += $$qt_newLib symbian-gcce:qt_newLib = "-l:$$qt_newLib" - eval($$libToProcess += \$\$qt_newLib) + eval($$libToProcess *= \$\$qt_newLib) } } } -- cgit v0.12 From 553a35e8ec823da981faf5119a4305268839ecb2 Mon Sep 17 00:00:00 2001 From: axis Date: Mon, 21 Feb 2011 16:14:10 +0100 Subject: Support to build Qt for Symbian on Mac OS X with gcce compiler. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RevBy: axis RevBy: Morten Johan Sørvig Conflicts: configure --- configure | 155 +++++++++++++++++++++---------------------- src/corelib/global/qglobal.h | 2 +- 2 files changed, 77 insertions(+), 80 deletions(-) diff --git a/configure b/configure index 6341dfb..fb1ee4c 100755 --- a/configure +++ b/configure @@ -763,6 +763,8 @@ l_FLAGS= QCONFIG_FLAGS= XPLATFORM= # This seems to be the QMAKESPEC, like "linux-g++" or "symbian-gcce" XPLATFORM_MINGW=no # Whether target platform is MinGW (win32-g++*) +XPLATFORM_SYMBIAN=no # Whether target platform is SYMBIAN (*symbian*) +XPLATFORM_SYMBIAN_SBSV2=no # Whether target platform is SYMBIAN_SBSV2 (symbian-sbsv2) PLATFORM=$QMAKESPEC QT_CROSS_COMPILE=no OPT_CONFIRM_LICENSE=no @@ -1458,6 +1460,8 @@ while [ "$#" -gt 0 ]; do xplatform) XPLATFORM="$VAL" case `basename "$XPLATFORM"` in win32-g++*) XPLATFORM_MINGW=yes;; esac + case "$XPLATFORM" in *symbian*) XPLATFORM_SYMBIAN=yes;; esac + case "$XPLATFORM" in symbian-sbsv2) XPLATFORM_SYMBIAN_SBSV2=yes;; esac ;; debug-and-release) if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then @@ -2735,6 +2739,8 @@ fi [ -z "$XPLATFORM" ] && XPLATFORM="$PLATFORM" case `basename "$XPLATFORM"` in win32-g++*) XPLATFORM_MINGW=yes;; esac +case "$XPLATFORM" in *symbian*) XPLATFORM_SYMBIAN=yes;; esac +case "$XPLATFORM" in symbian-sbsv2) XPLATFORM_SYMBIAN_SBSV2=yes;; esac if [ -d "$PLATFORM" ]; then QMAKESPEC="$PLATFORM" @@ -3010,7 +3016,7 @@ if [ "$PLATFORM" != "$XPLATFORM" -a "$CFG_EMBEDDED" != "no" ]; then esac elif [ "$XPLATFORM_MINGW" = "yes" ]; then [ -z "$CFG_ARCH" ] && CFG_ARCH="windows" -elif echo "$XPLATFORM" | grep symbian > /dev/null; then +elif [ "$XPLATFORM_SYMBIAN" = "yes" ]; then CFG_ARCH=symbian elif [ "$PLATFORM_MAC" = "yes" ] || [ -z "$CFG_ARCH" ]; then CFG_ARCH=$CFG_HOST_ARCH @@ -3138,7 +3144,7 @@ QMAKE_CONF_COMPILER=`getQMakeConf "$XQMAKESPEC" | grep "^QMAKE_CXX[^_A-Z0-9]" | TEST_COMPILER="$CXX" [ -z "$TEST_COMPILER" ] && TEST_COMPILER=$QMAKE_CONF_COMPILER -if [ "$XPLATFORM" != "symbian-sbsv2" ]; then +if [ "$XPLATFORM_SYMBIAN_SBSV2" = "no" ]; then #for Symbian we don't need this checking if [ -z "$TEST_COMPILER" ]; then echo "ERROR: Cannot set the compiler for the configuration tests" @@ -3305,16 +3311,18 @@ if [ -z "$QT_INSTALL_PREFIX" ]; then if [ "$PLATFORM" != "$XPLATFORM" ]; then QT_INSTALL_PREFIX="${QT_INSTALL_PREFIX}-${CFG_ARCH}" fi - elif [ -d "$EPOCROOT" ] && echo $XPLATFORM | grep symbian > /dev/null; then - QT_INSTALL_PREFIX="$EPOCROOT/epoc32/" - QT_INSTALL_LIBS="$EPOCROOT/epoc32/release/armv5/lib/" + elif [ -d "$EPOCROOT" ]; then + if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then + QT_INSTALL_PREFIX="$EPOCROOT/epoc32/" + QT_INSTALL_LIBS="$EPOCROOT/epoc32/release/armv5/lib/" + fi else QT_INSTALL_PREFIX="/usr/local/Trolltech/Qt-${QT_VERSION}" # the default install prefix is /usr/local/Trolltech/Qt-$QT_VERSION fi fi QT_INSTALL_PREFIX=`"$relpath/config.tests/unix/makeabs" "$QT_INSTALL_PREFIX"` -if echo $XPLATFORM | grep symbian > /dev/null; then +if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then [ -z "$QT_HOST_PREFIX" ] && QT_HOST_PREFIX="$QT_INSTALL_PREFIX" [ -z "$QT_INSTALL_DOCS" ] && QT_INSTALL_DOCS= [ -z "$QT_INSTALL_HEADERS" ] && QT_INSTALL_HEADERS= @@ -4172,7 +4180,7 @@ if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_X11" = "yes" ]; then EOF fi -case "$XPLATFORM" in *symbian*) +if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then cat << EOF Qt for Symbian only: @@ -4184,9 +4192,7 @@ Qt for Symbian only: -no-usedeffiles .... Disable the usage of DEF files. * -usedeffiles ....... Enable the usage of DEF files. EOF -;; -esac - +fi [ "x$ERROR" = "xyes" ] && exit 1 exit 0 fi # Help @@ -4198,10 +4204,10 @@ fi # Help if [ "$PLATFORM_QWS" = "yes" ]; then Platform="Qt for Embedded Linux" +elif [ "$XPLATFORM_SYMBIAN" = "yes" ]; then + Platform="Qt for Symbian" elif [ "$PLATFORM_MAC" = "yes" ]; then Platform="Qt for Mac OS X" -elif echo "$XPLATFORM" | grep "symbian" > /dev/null ; then - Platform="Qt for Symbian" elif [ "$XPLATFORM_MINGW" = "yes" ]; then Platform="Qt for Windows" elif [ '!' -z "`getQMakeConf \"$XQMAKESPEC\" | grep QMAKE_LIBS_X11 | awk '{print $3;}'`" ]; then @@ -4586,7 +4592,7 @@ if true; then ###[ '!' -f "$outpath/bin/qmake" ]; #mkspecs/default is used as a (gasp!) default mkspec so QMAKESPEC needn't be set once configured rm -rf mkspecs/default - if echo "$XPLATFORM" | grep "symbian-sbsv2" > /dev/null ; then + if [ "$XPLATFORM_SYMBIAN_SBSV2" = "yes" ]; then #Link is not supported for Symbian build system cp -a mkspecs/`echo $XQMAKESPEC | sed "s,^${relpath}/mkspecs/,,"` mkspecs/default else @@ -4838,33 +4844,12 @@ if ( [ "$CFG_ARCH" = "arm" ] || [ "$CFG_ARCH" = "armv6" ] ) && [ "${CFG_NEON}" = fi fi -# detect zlib -if [ "$CFG_ZLIB" = "no" ]; then - # Note: Qt no longer support builds without zlib - # So we force a "no" to be "auto" here. - # If you REALLY really need no zlib support, you can still disable - # it by doing the following: - # add "no-zlib" to mkspecs/qconfig.pri - # #define QT_NO_COMPRESS (probably by adding to src/corelib/global/qconfig.h) - # - # There's no guarantee that Qt will build under those conditions - - CFG_ZLIB=auto - ZLIB_FORCED=yes -fi -if [ "$CFG_ZLIB" = "auto" ]; then - if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/zlib "zlib" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then - CFG_ZLIB=system - else - CFG_ZLIB=yes - fi -fi - [ "$XPLATFORM_MINGW" = "yes" ] && QMakeVar add styles "windowsxp windowsvista" -case "$XPLATFORM" in *symbian*) +if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then QMakeVar set styles "windows s60" #overwrite previous default CFG_LIBFREETYPE=no + CFG_ZLIB=yes if [ "$CFG_LARGEFILE" = auto ]; then CFG_LARGEFILE=no @@ -4882,7 +4867,7 @@ case "$XPLATFORM" in *symbian*) exit 1 fi - if ! echo $XPLATFORM | grep symbian-sbsv2 > /dev/null; then + if [ "$XPLATFORM_SYMBIAN_SBSV2" = "no" ]; then # Raptor does not support configure tests. # the main commands needed to compile; @@ -4906,8 +4891,29 @@ case "$XPLATFORM" in *symbian*) exit 1; fi fi - ;; -esac +fi + +# detect zlib +if [ "$CFG_ZLIB" = "no" ]; then + # Note: Qt no longer support builds without zlib + # So we force a "no" to be "auto" here. + # If you REALLY really need no zlib support, you can still disable + # it by doing the following: + # add "no-zlib" to mkspecs/qconfig.pri + # #define QT_NO_COMPRESS (probably by adding to src/corelib/global/qconfig.h) + # + # There's no guarantee that Qt will build under those conditions + + CFG_ZLIB=auto + ZLIB_FORCED=yes +fi +if [ "$CFG_ZLIB" = "auto" ]; then + if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/zlib "zlib" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then + CFG_ZLIB=system + else + CFG_ZLIB=yes + fi +fi if [ "$CFG_LARGEFILE" = "auto" ]; then #Large files should be enabled for all Linux systems @@ -4916,7 +4922,7 @@ fi if [ "$CFG_S60" = "auto" ]; then - if echo "$XPLATFORM" | grep symbian > /dev/null; then + if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then CFG_S60=yes else CFG_S60=no @@ -4924,7 +4930,7 @@ if [ "$CFG_S60" = "auto" ]; then fi if [ "$CFG_QS60STYLE" = "auto" ]; then - if echo "$XPLATFORM" | grep symbian > /dev/null; then + if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then CFG_QS60STYLE=qt else CFG_QS60STYLE=no @@ -4932,7 +4938,7 @@ if [ "$CFG_QS60STYLE" = "auto" ]; then fi if [ "$CFG_SYMBIAN_DEFFILES" = "auto" ]; then - if echo "$XPLATFORM" | grep symbian > /dev/null && [ "$CFG_DEV" = "no" ]; then + if [ "$XPLATFORM_SYMBIAN" = "yes" ] && [ "$CFG_DEV" = "no" ]; then CFG_SYMBIAN_DEFFILES=yes else CFG_SYMBIAN_DEFFILES=no @@ -5011,14 +5017,12 @@ fi # detect accessibility if [ "$CFG_ACCESSIBILITY" = "auto" ]; then - case "$XPLATFORM" in - symbian*) + if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then # accessibility is currently unsupported CFG_ACCESSIBILITY=no - ;; - *) + else CFG_ACCESSIBILITY=yes - esac + fi fi # auto-detect SQL-modules support @@ -5230,15 +5234,13 @@ for _SQLDR in $CFG_SQL_AVAILABLE; do ;; sqlite) if [ "$CFG_SQL_sqlite" = "auto" ]; then # the default - case "$XPLATFORM" in - symbian*) + if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then # sqlite on symbian is typically not build in Qt but deployed as a pre-existing sis file and should be marked as driver. # Configuration parameters should be set CFG_SQL_sqlite=qt QT_LFLAGS_SQLITE=-lsqlite3 QMAKE_CONFIG="$QMAKE_CONFIG system-sqlite" - ;; - esac + fi fi if [ "$CFG_SQL_sqlite" != "no" ]; then SQLITE_AUTODETECT_FAILED="no" @@ -6103,10 +6105,10 @@ fi if [ "$CFG_ENDIAN" = "auto" ]; then if [ "$XPLATFORM_MINGW" = "yes" ]; then CFG_ENDIAN="Q_LITTLE_ENDIAN" - elif [ "$PLATFORM_MAC" = "yes" ]; then - true #leave as auto - elif [ "$XPLATFORM" = "symbian-sbsv2" ]; then + elif [ "$XPLATFORM_SYMBIAN_SBSV2" = "yes" ]; then CFG_ENDIAN="Q_LITTLE_ENDIAN" + elif [ "$PLATFORM_MAC" = "yes" ] && [ "$XPLATFORM_SYMBIAN" = "no" ]; then + true #leave as auto else "$unixtests/endian.test" "$XQMAKESPEC" $OPT_VERBOSE "$relpath" "$outpath" F="$?" @@ -6192,7 +6194,7 @@ if [ "$CFG_DOUBLEFORMAT" = "auto" ]; then fi HAVE_STL=no -if echo "$XPLATFORM" | grep symbian > /dev/null || "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/stl "STL" $L_FLAGS $I_FLAGS $l_FLAGS; then +if [ "$XPLATFORM_SYMBIAN" = "yes" ] || "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/stl "STL" $L_FLAGS $I_FLAGS $l_FLAGS; then HAVE_STL=yes fi @@ -6219,7 +6221,7 @@ if [ "$CFG_IPV6" != "no" ]; then # Therefore for 4.7.1 and following we disable it until OpenC either supports it or we have the native Qt # symbian socket engine. # - if echo "$XPLATFORM" | grep symbian > /dev/null; then + if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then CFG_IPV6=no elif "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/ipv6 "IPv6" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then CFG_IPV6=yes @@ -6334,7 +6336,7 @@ if [ "$CFG_GETIFADDRS" != "no" ]; then fi # detect OpenSSL -if [ "$CFG_OPENSSL" != "no" ] && [ "$XPLATFORM" != "symbian-sbsv2" ]; then +if [ "$CFG_OPENSSL" != "no" ] && [ "$XPLATFORM_SYMBIAN_SBSV2" = "no" ]; then if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/openssl "OpenSSL" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then if [ "$CFG_OPENSSL" = "auto" ]; then CFG_OPENSSL=yes @@ -6351,14 +6353,14 @@ if [ "$CFG_OPENSSL" != "no" ] && [ "$XPLATFORM" != "symbian-sbsv2" ]; then fi fi else - if [ "$CFG_OPENSSL" = "auto" ] && [ "$XPLATFORM" = "symbian-sbsv2" ]; then + if [ "$CFG_OPENSSL" = "auto" ] && [ "$XPLATFORM_SYMBIAN_SBSV2" = "yes" ]; then #OpenSSl should be enabled for Symbian release CFG_OPENSSL=yes fi fi # detect OpenVG support -if [ "$CFG_OPENVG" != "no" ] && [ "$XPLATFORM" != "symbian-sbsv2" ]; then +if [ "$CFG_OPENVG" != "no" ] && [ "$XPLATFORM_SYMBIAN_SBSV2" = "no" ]; then if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" "config.tests/unix/openvg" "OpenVG" $L_FLAGS $I_FLAGS $l_FLAGS $CONFIG_ARG; then if [ "$CFG_OPENVG" = "auto" ]; then CFG_OPENVG=yes @@ -6415,13 +6417,13 @@ if [ "$CFG_PTMALLOC" != "no" ]; then QMakeVar add QMAKE_LFLAGS "$outpath/lib/libptmalloc3.a" fi -if [ "$CFG_ALSA" = "auto" ] && [ "$XPLATFORM" != "symbian-sbsv2" ]; then +if [ "$CFG_ALSA" = "auto" ] && [ "$XPLATFORM_SYMBIAN_SBSV2" = "no" ]; then if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/alsa "alsa" $L_FLAGS $I_FLAGS $l_FLAGS; then CFG_ALSA=yes else CFG_ALSA=no fi -elif [ "$XPLATFORM" = "symbian-sbsv2" ]; then +elif [ "$XPLATFORM_SYMBIAN_SBSV2" = "yes" ]; then # Disabled for Symbian release CFG_ALSA=no fi @@ -6442,7 +6444,7 @@ elif [ "$CFG_JAVASCRIPTCORE_JIT" = "no" ]; then fi if [ "$CFG_AUDIO_BACKEND" = "auto" ]; then - if echo "$XPLATFORM" | grep symbian > /dev/null 2>&1; then + if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then if "$symbiantests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/symbian/audio "audio" $L_FLAGS $I_FLAGS $l_FLAGS ; then CFG_AUDIO_BACKEND=yes fi @@ -6454,7 +6456,7 @@ fi if [ "$CFG_LARGEFILE" != "yes" ] && [ "$XPLATFORM_MINGW" = "yes" ]; then echo "Warning: largefile support cannot be disabled for win32." CFG_LARGEFILE="yes" -elif [ "$CFG_LARGEFILE" != "no" ] && echo "$XPLATFORM" | grep "symbian" > /dev/null; then +elif [ "$CFG_LARGEFILE" != "no" ] && [ "$XPLATFORM_SYMBIAN" = "yes" ]; then echo "Warning: largefile support cannot be enabled for symbian." CFG_LARGEFILE="no" fi @@ -6561,8 +6563,9 @@ if [ "$PLATFORM_MAC" = "yes" ]; then fi fi -# but disable Cocoa if cross-building for mingw +# but disable Cocoa if cross-building for mingw and symbian [ "$XPLATFORM_MINGW" = "yes" ] && CFG_MAC_COCOA="no" +[ "$XPLATFORM_SYMBIAN" = "yes" ] && CFG_MAC_COCOA="no" # set the global Mac deployment target. This is overridden on an arch-by-arch basis # in some cases, see code further down @@ -6640,13 +6643,11 @@ else fi # Just check if OpenGL is not set by command argumets for Symbian. -case "$XPLATFORM" in - symbian*) +if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then if [ "$CFG_OPENGL" = "auto" ]; then CFG_OPENGL="no" fi - ;; -esac +fi # enable opengl if [ "$CFG_OPENGL" = "no" ]; then @@ -6830,7 +6831,7 @@ else fi -if [ "x$PLATFORM_MAC" = "xyes" ] && [ "$XPLATFORM_MINGW" != "yes" ]; then +if [ "x$PLATFORM_MAC" = "xyes" ] && [ "$XPLATFORM_MINGW" != "yes" ] && [ "$XPLATFORM_SYMBIAN" != "yes" ]; then #On Mac we implicitly link against libz, so we #never use the 3rdparty stuff. [ "$CFG_ZLIB" = "yes" ] && CFG_ZLIB="system" @@ -7469,14 +7470,11 @@ rm -f .options BUILD_OPTIONS="$BUILD_CONFIG $BUILD_OPTIONS" # extract the operating system from the XPLATFORM TARGET_OPERATING_SYSTEM=`echo $XPLATFORM | cut -f 2- -d/ | cut -f -1 -d-` -case "$XPLATFORM" in -symbian*) +if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then QT_BUILD_KEY_SYSTEM_PART="Symbian" - ;; -*) +else QT_BUILD_KEY_SYSTEM_PART="$CFG_ARCH $TARGET_OPERATING_SYSTEM $COMPILER" - ;; -esac +fi # when cross-compiling, don't include build-host information (build key is target specific) QT_BUILD_KEY="$CFG_USER_BUILD_KEY $QT_BUILD_KEY_SYSTEM_PART $BUILD_OPTIONS" @@ -7808,8 +7806,7 @@ fi [ '!' -z "$AWK" ] && QCONFIG_FLAGS=`echo $QCONFIG_FLAGS | $AWK '{ gsub(" ", "\n"); print }' | sort | uniq` QCONFIG_FLAGS=`echo $QCONFIG_FLAGS` -if echo $XPLATFORM | grep symbian >/dev/null -then +if [ "$XPLATFORM_SYMBIAN" = "yes" ]; then # Enable Symbian DLLs and export rules. # We cannot use Linux's default export rules since they export everything. QCONFIG_FLAGS="$QCONFIG_FLAGS QT_DLL" @@ -7889,7 +7886,7 @@ else mv "$outpath/src/corelib/global/qconfig.h.new" "$outpath/src/corelib/global/qconfig.h" chmod -w "$outpath/src/corelib/global/qconfig.h" for conf in "$outpath/include/QtCore/qconfig.h" "$outpath/include/Qt/qconfig.h"; do - if echo "$XPLATFORM" | grep "symbian-sbsv2" > /dev/null 2>&1 ; then + if [ "$XPLATFORM_SYMBIAN_SBSV2" = "yes" ]; then [ -e "$conf" ] && rm -rf "$conf" cp -a "$outpath/src/corelib/global/qconfig.h" "$conf" elif [ '!' -f "$conf" ]; then @@ -8568,7 +8565,7 @@ for file in .projects .projects.3; do fi SPEC=$XQMAKESPEC ;; *s60main/s60main.pro) - if [ "$CFG_NOPROCESS" = "yes" ] || ! echo "$XPLATFORM" | grep "symbian" >/dev/null; then + if [ "$CFG_NOPROCESS" = "yes" ] || [ "$XPLATFORM_SYMBIAN" != "yes" ]; then continue fi;; *examples/activeqt/*) continue ;; diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index c2fb16c..d90f455 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -284,7 +284,7 @@ namespace QT_NAMESPACE {} # endif #endif -#if defined(Q_OS_MAC64) && !defined(QT_MAC_USE_COCOA) && !defined(QT_BUILD_QMAKE) +#if defined(Q_OS_MAC64) && !defined(QT_MAC_USE_COCOA) && !defined(QT_BUILD_QMAKE) && !defined(QT_BOOTSTRAPPED) #error "You are building a 64-bit application, but using a 32-bit version of Qt. Check your build configuration." #endif -- cgit v0.12 From d2f833db2323a1ca13b4f293b169a8401cd30ace Mon Sep 17 00:00:00 2001 From: axis Date: Mon, 21 Feb 2011 16:17:57 +0100 Subject: Fix some build issues for building Qt for Symbian on Mac OS X. Need to add edllstub.lib and change a bit because some refactored work for mkspecs in 86636e0c4ab91bfb60be1e18d6daff34d41a5927. RevBy: axis Conflicts: mkspecs/symbian-gcce/qmake.conf --- mkspecs/symbian-gcce/qmake.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mkspecs/symbian-gcce/qmake.conf b/mkspecs/symbian-gcce/qmake.conf index 8de9f26..4b54421 100644 --- a/mkspecs/symbian-gcce/qmake.conf +++ b/mkspecs/symbian-gcce/qmake.conf @@ -4,6 +4,7 @@ include(../common/symbian/symbian-makefile.conf) +include(../common/gcc-base.conf) include(../common/g++.conf) QMAKE_CC = arm-none-symbianelf-gcc @@ -53,7 +54,7 @@ DEFINES += __GCCE__ \ UNICODE QMAKE_LFLAGS_APP += --entry=_E32Startup -u _E32Startup -QMAKE_LFLAGS_SHLIB += --default-symver --entry=_E32Dll -u _E32Dll +QMAKE_LFLAGS_SHLIB += -shared --default-symver --entry _E32Dll -u _E32Dll QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB gcceExtraFlags = --include=${EPOCROOT}/epoc32/include/gcce/gcce.h -march=armv5t -mapcs -mthumb-interwork -nostdinc -c -msoft-float -T script -- cgit v0.12 From 92afb21fb194a1bfa2d0529307d329b6ca941281 Mon Sep 17 00:00:00 2001 From: axis Date: Wed, 27 Oct 2010 14:48:25 +0200 Subject: Fixed a bug in the elf2e32_qtwrapper script. It did not handle missing symbols in all cases, most notably when elf2e32 decides to omit it from the produced def file. This required us to start reading the original def file as well, to find out what the original symbols was. Task: QTBUG-11839 RevBy: Thomas Zander --- bin/elf2e32_qtwrapper.pl | 104 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 90 insertions(+), 14 deletions(-) mode change 100644 => 100755 bin/elf2e32_qtwrapper.pl diff --git a/bin/elf2e32_qtwrapper.pl b/bin/elf2e32_qtwrapper.pl old mode 100644 new mode 100755 index 694d54a..c51c409 --- a/bin/elf2e32_qtwrapper.pl +++ b/bin/elf2e32_qtwrapper.pl @@ -75,26 +75,102 @@ while (1) { last; } - if ($buildingLibrary) { + if ($buildingLibrary && $runCount == 1) { my $tmpDefFile; - my $defFile; - open($defFile, "< $defoutput[1]") or die("Could not open $defoutput[1]"); + my $newDefFile; + my $origDefFile; + my $savedNewDefFileLine = ""; + open($origDefFile, "< $definput[1]") or die("Could not open $definput[1]"); + open($newDefFile, "< $defoutput[1]") or die("Could not open $defoutput[1]"); open($tmpDefFile, "> $defoutput[1].tmp") or die("Could not open $defoutput[1].tmp"); + print($tmpDefFile "EXPORTS\n"); $fixupFile = "$defoutput[1].tmp"; - while (<$defFile>) { - s/\r//; - s/\n//; - next if (/; NEW:/); - if (/([a-z0-9_]+) @/i) { - if (exists($fixupSymbols{$1})) { - s/ ABSENT//; - } elsif (s/; MISSING://) { - s/$/ ABSENT/; + while (1) { + my $origDefLine; + my $origSym; + my $origOrdinal; + my $origExtraData; + my $newDefLine; + my $newSym; + my $newOrdinal; + my $newExtraData; + my $defLine; + my $sym; + my $ordinal; + my $extraData; + # Read from original def file, and skip non-symbol lines + while (1) { + $origDefLine = <$origDefFile>; + if (defined($origDefLine)) { + $origDefLine =~ s/[\n\r]//; + if ($origDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i) { + $origSym = $1; + $origOrdinal = $2; + $origExtraData = $3; + last; + } + } else { + last; } } - print($tmpDefFile "$_\n"); + + if ($savedNewDefFileLine) { + # This happens if the new def file was missing an entry. + $newDefLine = $savedNewDefFileLine; + $newDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i or die("$0: Shouldn't happen"); + $newSym = $1; + $newOrdinal = $2; + $newExtraData = $3; + } else { + # Read from new def file, and skip non-symbol lines + while (1) { + $newDefLine = <$newDefFile>; + if (defined($newDefLine)) { + $newDefLine =~ s/[\n\r]//; + if ($newDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i) { + $newSym = $1; + $newOrdinal = $2; + $newExtraData = $3; + last; + } + } else { + last; + } + } + } + $savedNewDefFileLine = ""; + last if (!defined($origDefLine) && !defined($newDefLine)); + + if (defined($origOrdinal) && (!defined($newOrdinal) || $origOrdinal != $newOrdinal)) { + # If the symbol is missing from the new def file, use the original symbol. + $savedNewDefFileLine = $newDefLine; + $defLine = $origDefLine; + $sym = $origSym; + $ordinal = $origOrdinal; + $extraData = $origExtraData; + } else { + $defLine = $newDefLine; + $sym = $newSym; + $ordinal = $newOrdinal; + if ($newExtraData =~ /ABSENT/) { + # Special case to keep "DATA [0-9]+" data in absent entries. + $extraData = $origExtraData; + } else { + $extraData = $newExtraData; + } + } + if (exists($fixupSymbols{$sym})) { + # Fix symbols that have returned after first being marked ABSENT. + $extraData =~ s/ ABSENT//; + } elsif ($defLine =~ s/; MISSING://) { + # Auto-absent symbols. + $extraData .= " ABSENT"; + } + print($tmpDefFile "\t$sym \@ $ordinal $extraData\n"); } - close($defFile); + print($tmpDefFile "\n"); + close($origDefFile); + close($newDefFile); close($tmpDefFile); $definput[1] = "$defoutput[1].tmp"; -- cgit v0.12 From b3fe4cfad7815cb5acefad6edd88b773f2461ef8 Mon Sep 17 00:00:00 2001 From: axis Date: Thu, 4 Nov 2010 13:51:44 +0100 Subject: Fixed elf2e32_qtwrapper when not using def files. RevBy: Liang Qi Task: QTBUG-14952 --- bin/elf2e32_qtwrapper.pl | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/bin/elf2e32_qtwrapper.pl b/bin/elf2e32_qtwrapper.pl index c51c409..4eeb098 100755 --- a/bin/elf2e32_qtwrapper.pl +++ b/bin/elf2e32_qtwrapper.pl @@ -80,7 +80,9 @@ while (1) { my $newDefFile; my $origDefFile; my $savedNewDefFileLine = ""; - open($origDefFile, "< $definput[1]") or die("Could not open $definput[1]"); + if ($definput[1]) { + open($origDefFile, "< $definput[1]") or die("Could not open $definput[1]"); + } open($newDefFile, "< $defoutput[1]") or die("Could not open $defoutput[1]"); open($tmpDefFile, "> $defoutput[1].tmp") or die("Could not open $defoutput[1].tmp"); print($tmpDefFile "EXPORTS\n"); @@ -98,19 +100,21 @@ while (1) { my $sym; my $ordinal; my $extraData; - # Read from original def file, and skip non-symbol lines - while (1) { - $origDefLine = <$origDefFile>; - if (defined($origDefLine)) { - $origDefLine =~ s/[\n\r]//; - if ($origDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i) { - $origSym = $1; - $origOrdinal = $2; - $origExtraData = $3; + if ($definput[1]) { + # Read from original def file, and skip non-symbol lines + while (1) { + $origDefLine = <$origDefFile>; + if (defined($origDefLine)) { + $origDefLine =~ s/[\n\r]//; + if ($origDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i) { + $origSym = $1; + $origOrdinal = $2; + $origExtraData = $3; + last; + } + } else { last; } - } else { - last; } } @@ -169,7 +173,7 @@ while (1) { print($tmpDefFile "\t$sym \@ $ordinal $extraData\n"); } print($tmpDefFile "\n"); - close($origDefFile); + close($origDefFile) if ($definput[1]); close($newDefFile); close($tmpDefFile); -- cgit v0.12 From 4c06d1956cc072f5bc52ed8128cf19d4cd7f8715 Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 4 Mar 2011 11:29:18 +0100 Subject: Moved the default dependency targets to default_post.prf. The file that they were in would not be parsed if CONFIG -= qt, but it always needs to be parsed, otherwise apps that don't use Qt will fail the sis file creation. RevBy: Miikka Heikkinen Conflicts: mkspecs/features/symbian/default_post.prf --- mkspecs/features/symbian/default_post.prf | 47 +++++++++++++++++++++++++++++++ mkspecs/features/symbian/qt.prf | 47 ------------------------------- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/mkspecs/features/symbian/default_post.prf b/mkspecs/features/symbian/default_post.prf index 126981e..a17e760 100644 --- a/mkspecs/features/symbian/default_post.prf +++ b/mkspecs/features/symbian/default_post.prf @@ -53,6 +53,53 @@ isEmpty(TARGET.UID2) { } } +# Allow .pro files to specify include path(s) to be prepended to the list. +# +# This allows the project to override the default ordering, whereby paths +# relative to $$QMAKE_INCDIR_QT always come first. This ordering can cause +# problems when both the epoc32/include tree and a Qt include directory +# contain a header of the same name - in this case, the Qt header is always +# included by virtue of its path appearing first in the SYSTEMINCLUDE +# directives in the generated MMP file. +# +# To work around this situation, the following line can be added to the .pro +# file: +# PREPEND_INCLUDEPATH = /epoc32/include +# +INCLUDEPATH = $$PREPEND_INCLUDEPATH $$INCLUDEPATH + +# Add dependency to Qt package to all other projects besides Qt libs. +# Note: Qt libs package with full capabilities has UID3 of 0x2001E61C, +# while self-signed version typically has temporary UID3 of 0xE001E61C. +contains(CONFIG, qt):!contains(TARGET.UID3, 0x2001E61C):!contains(TARGET.UID3, 0xE001E61C):isEmpty(QT_LIBINFIX) { + qt_pkg_name = Qt + pkg_depends_qt += \ + "; Default dependency to Qt libraries" \ + "(0x2001E61C), $${QT_MAJOR_VERSION}, $${QT_MINOR_VERSION}, $${QT_PATCH_VERSION}, {$$addLanguageDependentPkgItem(qt_pkg_name)}" + + # Projects linking to webkit need dependency to webkit + contains(QT, webkit): { + # these can be overridden by mkspecs/modules/qt_webkit.pri + isEmpty(QT_WEBKIT_MAJOR_VERSION) { + QT_WEBKIT_MAJOR_VERSION = $${QT_MAJOR_VERSION} + QT_WEBKIT_MINOR_VERSION = $${QT_MINOR_VERSION} + QT_WEBKIT_PATCH_VERSION = $${QT_PATCH_VERSION} + } + + webkit_pkg_name = QtWebKit + pkg_depends_webkit += \ + "; Dependency to Qt Webkit" \ + "(0x200267C2), $${QT_WEBKIT_MAJOR_VERSION}, $${QT_WEBKIT_MINOR_VERSION}, $${QT_WEBKIT_PATCH_VERSION}, {$$addLanguageDependentPkgItem(webkit_pkg_name)}" + } else { + default_deployment.pkg_prerules -= pkg_depends_webkit + } +} else { + default_deployment.pkg_prerules -= pkg_depends_webkit pkg_depends_qt +} + +isEmpty(TARGET.EPOCSTACKSIZE):TARGET.EPOCSTACKSIZE = 0x14000 +isEmpty(TARGET.EPOCHEAPSIZE):TARGET.EPOCHEAPSIZE = 0x020000 0x800000 + # Supports Symbian^3 and Symbian^4 by default and also S60 3.1, 3.2, and 5.0 if built against any of those. platform_product_id = S60ProductID platform_product_id = $$addLanguageDependentPkgItem(platform_product_id) diff --git a/mkspecs/features/symbian/qt.prf b/mkspecs/features/symbian/qt.prf index c8f97aa..c376b64 100644 --- a/mkspecs/features/symbian/qt.prf +++ b/mkspecs/features/symbian/qt.prf @@ -6,53 +6,6 @@ CONFIG += qtmain load(qt) -# Allow .pro files to specify include path(s) to be prepended to the list. -# -# This allows the project to override the default ordering, whereby paths -# relative to $$QMAKE_INCDIR_QT always come first. This ordering can cause -# problems when both the epoc32/include tree and a Qt include directory -# contain a header of the same name - in this case, the Qt header is always -# included by virtue of its path appearing first in the SYSTEMINCLUDE -# directives in the generated MMP file. -# -# To work around this situation, the following line can be added to the .pro -# file: -# PREPEND_INCLUDEPATH = /epoc32/include -# -INCLUDEPATH = $$PREPEND_INCLUDEPATH $$INCLUDEPATH - -# Add dependency to Qt package to all other projects besides Qt libs. -# Note: Qt libs package with full capabilities has UID3 of 0x2001E61C, -# while self-signed version typically has temporary UID3 of 0xE001E61C. -contains(CONFIG, qt):!contains(TARGET.UID3, 0x2001E61C):!contains(TARGET.UID3, 0xE001E61C):isEmpty(QT_LIBINFIX) { - qt_pkg_name = Qt - pkg_depends_qt += \ - "; Default dependency to Qt libraries" \ - "(0x2001E61C), $${QT_MAJOR_VERSION}, $${QT_MINOR_VERSION}, $${QT_PATCH_VERSION}, {$$addLanguageDependentPkgItem(qt_pkg_name)}" - - # Projects linking to webkit need dependency to webkit - contains(QT, webkit): { - # these can be overridden by mkspecs/modules/qt_webkit.pri - isEmpty(QT_WEBKIT_MAJOR_VERSION) { - QT_WEBKIT_MAJOR_VERSION = $${QT_MAJOR_VERSION} - QT_WEBKIT_MINOR_VERSION = $${QT_MINOR_VERSION} - QT_WEBKIT_PATCH_VERSION = $${QT_PATCH_VERSION} - } - - webkit_pkg_name = QtWebKit - pkg_depends_webkit += \ - "; Dependency to Qt Webkit" \ - "(0x200267C2), $${QT_WEBKIT_MAJOR_VERSION}, $${QT_WEBKIT_MINOR_VERSION}, $${QT_WEBKIT_PATCH_VERSION}, {$$addLanguageDependentPkgItem(webkit_pkg_name)}" - } else { - default_deployment.pkg_prerules -= pkg_depends_webkit - } -} else { - default_deployment.pkg_prerules -= pkg_depends_webkit pkg_depends_qt -} - -isEmpty(TARGET.EPOCSTACKSIZE):TARGET.EPOCSTACKSIZE = 0x14000 -isEmpty(TARGET.EPOCHEAPSIZE):TARGET.EPOCHEAPSIZE = 0x020000 0x800000 - # Workaround for the fact that Gnupoc and Symbian chose different approaches to # the letter casing of headers. contains(CONFIG, is_using_gnupoc) { -- cgit v0.12 From 5db6d32c57bad7da554363bc7e1e71e24e05c2fa Mon Sep 17 00:00:00 2001 From: axis Date: Tue, 21 Dec 2010 10:46:26 +0100 Subject: Fixed PREPEND_INCLUDEPATH being executed too early. It used to be carried out inside qt.prf, but was moved to default_post.prf. However, since qt.prf is executed after default_post.prf, it would still prepend its own include paths at the very front, which is wrong. Fixed by introducing a new feature profile for PREPEND_INCLUDEPATH, which is run after qt.prf (features in $$CONFIG are executed in reverse order). RevBy: Miikka Heikkinen --- mkspecs/common/symbian/symbian.conf | 2 +- mkspecs/features/symbian/default_post.prf | 15 --------------- mkspecs/features/symbian/prepend_includepath.prf | 14 ++++++++++++++ 3 files changed, 15 insertions(+), 16 deletions(-) create mode 100644 mkspecs/features/symbian/prepend_includepath.prf diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf index 0bb3a29..e733ade 100644 --- a/mkspecs/common/symbian/symbian.conf +++ b/mkspecs/common/symbian/symbian.conf @@ -3,7 +3,7 @@ # TEMPLATE = app -CONFIG += qt warn_on release incremental link_prl sis_targets run_on_phone +CONFIG += prepend_includepath qt warn_on release incremental link_prl sis_targets run_on_phone QT += core gui QMAKE_INCREMENTAL_STYLE = sublib diff --git a/mkspecs/features/symbian/default_post.prf b/mkspecs/features/symbian/default_post.prf index a17e760..a05ff25 100644 --- a/mkspecs/features/symbian/default_post.prf +++ b/mkspecs/features/symbian/default_post.prf @@ -53,21 +53,6 @@ isEmpty(TARGET.UID2) { } } -# Allow .pro files to specify include path(s) to be prepended to the list. -# -# This allows the project to override the default ordering, whereby paths -# relative to $$QMAKE_INCDIR_QT always come first. This ordering can cause -# problems when both the epoc32/include tree and a Qt include directory -# contain a header of the same name - in this case, the Qt header is always -# included by virtue of its path appearing first in the SYSTEMINCLUDE -# directives in the generated MMP file. -# -# To work around this situation, the following line can be added to the .pro -# file: -# PREPEND_INCLUDEPATH = /epoc32/include -# -INCLUDEPATH = $$PREPEND_INCLUDEPATH $$INCLUDEPATH - # Add dependency to Qt package to all other projects besides Qt libs. # Note: Qt libs package with full capabilities has UID3 of 0x2001E61C, # while self-signed version typically has temporary UID3 of 0xE001E61C. diff --git a/mkspecs/features/symbian/prepend_includepath.prf b/mkspecs/features/symbian/prepend_includepath.prf new file mode 100644 index 0000000..d9fd4fe --- /dev/null +++ b/mkspecs/features/symbian/prepend_includepath.prf @@ -0,0 +1,14 @@ +# Allow .pro files to specify include path(s) to be prepended to the list. +# +# This allows the project to override the default ordering, whereby paths +# relative to $$QMAKE_INCDIR_QT always come first. This ordering can cause +# problems when both the epoc32/include tree and a Qt include directory +# contain a header of the same name - in this case, the Qt header is always +# included by virtue of its path appearing first in the SYSTEMINCLUDE +# directives in the generated MMP file. +# +# To work around this situation, the following line can be added to the .pro +# file: +# PREPEND_INCLUDEPATH = /epoc32/include +# +INCLUDEPATH = $$PREPEND_INCLUDEPATH $$INCLUDEPATH -- cgit v0.12 From b83cbadc80b24107433709f4827e1619a0e7561b Mon Sep 17 00:00:00 2001 From: axis Date: Thu, 20 Jan 2011 16:39:41 +0100 Subject: Made the translations dependency work for shadow builds. RevBy: Miikka Heikkinen --- mkspecs/common/symbian/symbian.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf index e733ade..9a0287a 100644 --- a/mkspecs/common/symbian/symbian.conf +++ b/mkspecs/common/symbian/symbian.conf @@ -238,7 +238,7 @@ defineTest(matchSymbianLanguages) { language = $$replace(translation, "^(.*/)?[^/]+_(([^_]{2,3}_)?[^_]{2,3})\\.ts$", \\2) contains(SYMBIAN_SUPPORTED_LANGUAGES, $$language) { SYMBIAN_MATCHED_LANGUAGES += $$language - SYMBIAN_MATCHED_TRANSLATIONS += $$translation + SYMBIAN_MATCHED_TRANSLATIONS += $$_PRO_FILE_PWD_/$$translation } } -- cgit v0.12 From 2ad80c0149477a6ca7dd69a7243c2055d208c98d Mon Sep 17 00:00:00 2001 From: axis Date: Thu, 20 Jan 2011 10:41:11 +0100 Subject: Added Symbian deployment localization for makefile build system. This is a complement to the 16575f7aef840b6aae0dc767468ab713fbcfd7a6 commit, which adds localization based on TRANSLATIONS keywords for Raptor and abld. In addition, since the __PRODUCT_INCLUDE__ define was creating a lot of trouble regarding < and >, it was refactored into its own source file, which is automatically included before every source file. Task: QTBUG-15292 RevBy: Miikka Heikkinen --- mkspecs/common/symbian/symbian-makefile.conf | 12 ++- mkspecs/common/symbian/symbianincludes.h | 17 ++++ mkspecs/features/symbian/symbian_building.prf | 124 +++++++++++++++++--------- mkspecs/symbian-armcc/qmake.conf | 5 +- qmake/generators/symbian/symbiancommon.cpp | 3 +- 5 files changed, 108 insertions(+), 53 deletions(-) create mode 100644 mkspecs/common/symbian/symbianincludes.h diff --git a/mkspecs/common/symbian/symbian-makefile.conf b/mkspecs/common/symbian/symbian-makefile.conf index 899f8c2..f429c1a 100644 --- a/mkspecs/common/symbian/symbian-makefile.conf +++ b/mkspecs/common/symbian/symbian-makefile.conf @@ -25,9 +25,15 @@ QMAKE_PREFIX_STATICLIB = QMAKE_SYMBIAN_SHLIB = 1 is_using_gnupoc { - DEFINES *= __PRODUCT_INCLUDE__=\"<$${EPOCROOT}epoc32/include/variant/symbian_os.hrh>\" -} else { - DEFINES *= __PRODUCT_INCLUDE__=\"<$${EPOCROOT}epoc32/include/variant/Symbian_OS.hrh>\" + DEFINES *= __QT_PRODUCT_INCLUDE_IS_LOWERCASE__ +} +QMAKE_SYMBIAN_INCLUDES = $$[QT_INSTALL_DATA]/mkspecs/common/symbian/symbianincludes.h +symbian-armcc { + QMAKE_CFLAGS += --preinclude $$QMAKE_SYMBIAN_INCLUDES + QMAKE_CXXFLAGS += --preinclude $$QMAKE_SYMBIAN_INCLUDES +} else:symbian-gcce { + QMAKE_CFLAGS += -include $$QMAKE_SYMBIAN_INCLUDES + QMAKE_CXXFLAGS += -include $$QMAKE_SYMBIAN_INCLUDES } DEFINES *= \ __SYMBIAN32__ \ diff --git a/mkspecs/common/symbian/symbianincludes.h b/mkspecs/common/symbian/symbianincludes.h new file mode 100644 index 0000000..4c0ffa6 --- /dev/null +++ b/mkspecs/common/symbian/symbianincludes.h @@ -0,0 +1,17 @@ +#ifndef __PRODUCT_INCLUDE__ +# ifdef __QT_PRODUCT_INCLUDE_IS_LOWERCASE__ +# define __PRODUCT_INCLUDE__ +# else +# define __PRODUCT_INCLUDE__ +# endif +#endif + +#ifndef __QT_SYMBIAN_RESOURCE__ +# if defined(__ARMCC__) || defined(__CC_ARM) +# ifdef __QT_RVCT_HEADER_IS_2_2__ +# include +# else +# include +# endif +# endif +#endif diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf index 7f8570e..545cb81 100644 --- a/mkspecs/features/symbian/symbian_building.prf +++ b/mkspecs/features/symbian/symbian_building.prf @@ -242,6 +242,7 @@ symbian-armcc: { symbian_resources_INCLUDES = $$replace(symbian_resources_INCLUDES, ",", " -I") symbian_resources_INCLUDES += $$join(INCLUDEPATH, " -I", "-I") symbian_resources_DEFINES = $$join(DEFINES, " -D", "-D") +symbian_resources_DEFINES += -D__QT_SYMBIAN_RESOURCE__ symbian_resources_RCC_DIR = $$replace(RCC_DIR, "/$", "") symbian_resources_INCLUDES += "-I$$symbian_resources_RCC_DIR" @@ -256,6 +257,7 @@ for(symbian_resource, SYMBIAN_RESOURCES) { symbianresources.input = SYMBIAN_RESOURCES symbianresources.output = $$symbian_resources_RCC_DIR/${QMAKE_FILE_BASE}$${QT_LIBINFIX}.rsg symbianresources.commands = cpp -nostdinc -undef \ + -include $$QMAKE_SYMBIAN_INCLUDES \ $$symbian_resources_INCLUDES \ $$symbian_resources_DEFINES \ ${QMAKE_FILE_NAME} \ @@ -271,46 +273,79 @@ symbianresources.CONFIG = no_link target_predeps QMAKE_EXTRA_COMPILERS += symbianresources +# This section generates the rsg and rsc files for symbian. contains(TEMPLATE, "app"):!contains(CONFIG, "no_icon") { - # Make our own extra target in order to get dependencies for generated - # files right. This also avoids the warning about files not found. - symbianGenResource.target = $${symbian_resources_RCC_DIR}/$${baseTarget}.rsg - symbianGenResource.commands = cpp -nostdinc -undef \ - $$symbian_resources_INCLUDES \ - $$symbian_resources_DEFINES \ - $${baseTarget}.rss \ - > $${symbian_resources_RCC_DIR}/$${baseTarget}.rpp \ - && rcomp -u -m045,046,047 \ - -s$${symbian_resources_RCC_DIR}/$${baseTarget}.rpp \ - -o$${symbianDestdir}/$${baseTarget}.rsc \ - -h$${symbian_resources_RCC_DIR}/$${baseTarget}.rsg \ - -i$${baseTarget}.rss - silent:symbianGenResource.commands = @echo rcomp $${baseTarget}.rss && $$symbianGenResource.commands - symbianGenResource.depends = $${baseTarget}.rss - PRE_TARGETDEPS += $${symbian_resources_RCC_DIR}/$${baseTarget}.rsg - QMAKE_CLEAN += $${symbian_resources_RCC_DIR}/$${baseTarget}.rsg - QMAKE_CLEAN += $${symbian_resources_RCC_DIR}/$${baseTarget}.rpp - QMAKE_DISTCLEAN += $${baseTarget}.rss - QMAKE_DISTCLEAN += $${symbianDestdir}/$${baseTarget}.rsc - - symbianGenRegResource.target = $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rsg - symbianGenRegResource.commands = cpp -nostdinc -undef \ - $$symbian_resources_INCLUDES \ - $$symbian_resources_DEFINES \ - $${baseTarget}_reg.rss \ - > $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rpp \ - && rcomp -u -m045,046,047 \ - -s$${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rpp \ - -o$${symbianDestdir}/$${baseTarget}_reg.rsc \ - -h$${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rsg \ - -i$${baseTarget}_reg.rss - silent:symbianGenRegResource.commands = @echo rcomp $${baseTarget}_reg.rss && $$symbianGenRegResource.commands - symbianGenRegResource.depends = $${baseTarget}_reg.rss $${symbian_resources_RCC_DIR}/$${baseTarget}.rsg - PRE_TARGETDEPS += $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rsg - QMAKE_CLEAN += $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rsg - QMAKE_CLEAN += $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rpp - QMAKE_DISTCLEAN += $${baseTarget}_reg.rss - QMAKE_DISTCLEAN += $${symbianDestdir}/$${baseTarget}_reg.rsc + # Look for extra languages for the resources, and then generate a target for each one. + localize_deployment:symbianGenResourceLanguages = $$SYMBIAN_MATCHED_LANGUAGES default + else:symbianGenResourceLanguages = default + for(language, symbianGenResourceLanguages) { + # Special languages get their language number appended to the filename. + contains(language, default) { + symbianGenResource_DEFINES = $$symbian_resources_DEFINES + rpp = $${symbian_resources_RCC_DIR}/$${baseTarget}.rpp + rsc = $${symbianDestdir}/$${baseTarget}.rsc + rsg = $${symbian_resources_RCC_DIR}/$${baseTarget}.rsg + } else { + languageNo = $$eval(SYMBIAN_LANG.$$language) + symbianGenResource_DEFINES = $$symbian_resources_DEFINES -DLANGUAGE_$${languageNo} + rpp = $${symbian_resources_RCC_DIR}/$${baseTarget}_$${languageNo}.rpp + rsc = $${symbianDestdir}/$${baseTarget}.r$${languageNo} + rsg = $${symbian_resources_RCC_DIR}/$${baseTarget}_$${languageNo}.rsg + } + + # Make our own extra target in order to get dependencies for generated + # files right. This also avoids the warning about files not found. + eval(symbianGenResource_$${language}.target = $$rsg) + eval(symbianGenResource_$${language}.commands = cpp -nostdinc -undef \ + -include $$QMAKE_SYMBIAN_INCLUDES \ + $$symbian_resources_INCLUDES \ + $$symbianGenResource_DEFINES \ + $${baseTarget}.rss \ + > $$rpp \ + && rcomp -u -m045,046,047 \ + -s$$rpp \ + -o$$rsc \ + -h$$rsg \ + -i$${baseTarget}.rss) + silent:eval(symbianGenResource_$${language}.commands = @echo rcomp $${baseTarget}.rss && $$eval(symbianGenResource_$${language}.commands)) + eval(symbianGenResource_$${language}.depends = $${baseTarget}.rss) + PRE_TARGETDEPS += $$rsg + QMAKE_CLEAN += $$rsg $$rpp + QMAKE_DISTCLEAN += $$rsc + + QMAKE_EXTRA_TARGETS += symbianGenResource_$${language} + + # Note that we depend on the base rsg file, even if dealing with a specific language. + # hence we don't use $$rsg on the next line. + eval(symbianGenRegResource_$${language}.depends = $${baseTarget}_reg.rss $${symbian_resources_RCC_DIR}/$${baseTarget}.rsg) + contains(language, default) { + rpp = $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rpp + rsc = $${symbianDestdir}/$${baseTarget}_reg.rsc + rsg = $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rsg + } else { + rpp = $${symbian_resources_RCC_DIR}/$${baseTarget}_reg_$${languageNo}.rpp + rsc = $${symbianDestdir}/$${baseTarget}_reg.r$${languageNo} + rsg = $${symbian_resources_RCC_DIR}/$${baseTarget}_reg_$${languageNo}.rsg + } + eval(symbianGenRegResource_$${language}.target = $$rsg) + eval(symbianGenRegResource_$${language}.commands = cpp -nostdinc -undef \ + -include $$QMAKE_SYMBIAN_INCLUDES \ + $$symbian_resources_INCLUDES \ + $$symbianGenResource_DEFINES \ + $${baseTarget}_reg.rss \ + > $$rpp \ + && rcomp -u -m045,046,047 \ + -s$$rpp \ + -o$$rsc \ + -h$$rsg \ + -i$${baseTarget}_reg.rss) + silent:eval(symbianGenRegResource_$${language}.commands = @echo rcomp $${baseTarget}_reg.rss && $$eval(symbianGenRegResource_$${language}.commands)) + PRE_TARGETDEPS += $$rsg + QMAKE_CLEAN += $$rsg $$rpp + QMAKE_DISTCLEAN += $$rsc + + QMAKE_EXTRA_TARGETS += symbianGenRegResource_$${language} + } # Trick to get qmake to create the RCC_DIR for us. symbianRccDirCreation.input = SOURCES @@ -318,14 +353,15 @@ contains(TEMPLATE, "app"):!contains(CONFIG, "no_icon") { symbianRccDirCreation.output = $${symbian_resources_RCC_DIR}/symbian_resource_dummy symbianRccDirCreation.CONFIG = no_link combine - QMAKE_EXTRA_TARGETS += symbianGenResource symbianGenRegResource QMAKE_EXTRA_COMPILERS += symbianRccDirCreation - QMAKE_DISTCLEAN += $${baseTarget}.loc + QMAKE_DISTCLEAN += $${baseTarget}.rss \ + $${baseTarget}_reg.rss \ + $${baseTarget}.loc } # Generated pkg files -QMAKE_DISTCLEAN += $${baseTarget}_template.pkg -QMAKE_DISTCLEAN += $${baseTarget}_installer.pkg -QMAKE_DISTCLEAN += $${baseTarget}_stub.pkg +QMAKE_DISTCLEAN += $${baseTarget}_template.pkg \ + $${baseTarget}_installer.pkg \ + $${baseTarget}_stub.pkg diff --git a/mkspecs/symbian-armcc/qmake.conf b/mkspecs/symbian-armcc/qmake.conf index be6af39..77a1966 100644 --- a/mkspecs/symbian-armcc/qmake.conf +++ b/mkspecs/symbian-armcc/qmake.conf @@ -53,10 +53,7 @@ INCLUDEPATH = $${EPOCROOT}epoc32/include \ exists($${EPOCROOT}epoc32/include/rvct2_2) { INCLUDEPATH += $${EPOCROOT}epoc32/include/rvct2_2 - QMAKE_CFLAGS += --preinclude rvct2_2.h - QMAKE_CXXFLAGS += --preinclude rvct2_2.h + DEFINES *= __QT_RVCT_HEADER_IS_2_2__ } else { INCLUDEPATH += $${EPOCROOT}epoc32/include/rvct - QMAKE_CFLAGS += --preinclude rvct.h - QMAKE_CXXFLAGS += --preinclude rvct.h } diff --git a/qmake/generators/symbian/symbiancommon.cpp b/qmake/generators/symbian/symbiancommon.cpp index 96d7725..c0afaaf 100644 --- a/qmake/generators/symbian/symbiancommon.cpp +++ b/qmake/generators/symbian/symbiancommon.cpp @@ -394,8 +394,7 @@ void SymbianCommonGenerator::generatePkgFile(const QString &iconFile, t << manufacturerStr << endl; } - // ### FIXME: remove epocBuild check once makefile based mkspecs support localized resource generation - if (epocBuild && symbianLocalizationList.size()) { + if (symbianLocalizationList.size()) { // Add localized resources to DEPLOYMENT if default resource deployment is done addLocalizedResourcesToDeployment("default_resource_deployment.sources", symbianLocalizationList); addLocalizedResourcesToDeployment("default_reg_deployment.sources", symbianLocalizationList); -- cgit v0.12 From 38e094fd2b333e960ca76cf9c86429ec29a07a29 Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 4 Mar 2011 11:35:54 +0100 Subject: Unified the usage of $${EPOCROOT} for symbian. RevBy: Miikka Heikkinen Conflicts: mkspecs/symbian-gcce/qmake.conf --- mkspecs/features/symbian/qt_config.prf | 2 +- mkspecs/symbian-gcce/qmake.conf | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/mkspecs/features/symbian/qt_config.prf b/mkspecs/features/symbian/qt_config.prf index 2f446dc..82c1862 100644 --- a/mkspecs/features/symbian/qt_config.prf +++ b/mkspecs/features/symbian/qt_config.prf @@ -3,7 +3,7 @@ load(qt_config) !contains(QMAKE_HOST.os, "Windows") { # Test for the existence of lower cased headers, a sign of using Gnupoc. # Note that the qmake "exists" test won't do because it is case insensitive. - system("test -f $${EPOCROOT}/epoc32/include/akndoc.h") { + system("test -f $${EPOCROOT}epoc32/include/akndoc.h") { CONFIG += is_using_gnupoc } } diff --git a/mkspecs/symbian-gcce/qmake.conf b/mkspecs/symbian-gcce/qmake.conf index 4b54421..5d0deb7 100644 --- a/mkspecs/symbian-gcce/qmake.conf +++ b/mkspecs/symbian-gcce/qmake.conf @@ -57,19 +57,19 @@ QMAKE_LFLAGS_APP += --entry=_E32Startup -u _E32Startup QMAKE_LFLAGS_SHLIB += -shared --default-symver --entry _E32Dll -u _E32Dll QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB -gcceExtraFlags = --include=${EPOCROOT}/epoc32/include/gcce/gcce.h -march=armv5t -mapcs -mthumb-interwork -nostdinc -c -msoft-float -T script +gcceExtraFlags = --include=$${EPOCROOT}epoc32/include/gcce/gcce.h -march=armv5t -mapcs -mthumb-interwork -nostdinc -c -msoft-float -T script QMAKE_CFLAGS += $${gcceExtraFlags} QMAKE_CXXFLAGS += $${gcceExtraFlags} -x c++ -fexceptions -fno-unit-at-a-time -fvisibility-inlines-hidden #If we are not going to link to Qt or qtmain.lib, we need to include this at least once. isEmpty(QT):contains(TEMPLATE, app) { - QMAKE_CXXFLAGS += --include=${EPOCROOT}/epoc32/include/stdapis/staticlibinit_gcce.h + QMAKE_CXXFLAGS += --include=$${EPOCROOT}epoc32/include/stdapis/staticlibinit_gcce.h } QMAKE_LFLAGS += --target1-abs \ --no-undefined \ --nostdlib -QMAKE_LIBDIR += ${EPOCROOT}/epoc32/release/armv5/udeb/ +QMAKE_LIBDIR += $${EPOCROOT}epoc32/release/armv5/udeb/ # g++ knows the path to the gcc-shipped-libs, ld doesn't. So cache the full path in the generate Makefile QMAKE_GCC_SEARCH_DIRS =$$system($$QMAKE_CXX -print-search-dirs) @@ -83,11 +83,11 @@ for(line, QMAKE_GCC_SEARCH_DIRS) { } } -QMAKE_LIBDIR += $${EPOCROOT}/epoc32/release/armv5/lib +QMAKE_LIBDIR += $${EPOCROOT}epoc32/release/armv5/lib -INCLUDEPATH = ${EPOCROOT}/epoc32/include/ \ - $${EPOCROOT}/epoc32/include/variant \ - $${EPOCROOT}/epoc32/include/stdapis \ - $${EPOCROOT}/epoc32/include/gcce \ +INCLUDEPATH = $${EPOCROOT}epoc32/include/ \ + $${EPOCROOT}epoc32/include/variant \ + $${EPOCROOT}epoc32/include/stdapis \ + $${EPOCROOT}epoc32/include/gcce \ $$INCLUDEPATH -- cgit v0.12 From 3afec58f28a6fbe1cd23fc5bbb5a2f71844a0cfa Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 28 Jan 2011 09:13:01 +0100 Subject: Added missing header. --- mkspecs/common/symbian/symbianincludes.h | 41 ++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/mkspecs/common/symbian/symbianincludes.h b/mkspecs/common/symbian/symbianincludes.h index 4c0ffa6..5d7f488 100644 --- a/mkspecs/common/symbian/symbianincludes.h +++ b/mkspecs/common/symbian/symbianincludes.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the mkspecs of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef __PRODUCT_INCLUDE__ # ifdef __QT_PRODUCT_INCLUDE_IS_LOWERCASE__ # define __PRODUCT_INCLUDE__ -- cgit v0.12 From 5b3f54a344a6e228389989ecf4fc9e770287db3a Mon Sep 17 00:00:00 2001 From: axis Date: Thu, 23 Dec 2010 15:52:38 +0100 Subject: Fixed a bug in elf2e32_qtwrapper regarding spaces in def files. It would not parse the line correctly if a space was missing between the "@" and the ordinal number. RevBy: Trust me --- bin/elf2e32_qtwrapper.pl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/elf2e32_qtwrapper.pl b/bin/elf2e32_qtwrapper.pl index 4eeb098..64d485b 100755 --- a/bin/elf2e32_qtwrapper.pl +++ b/bin/elf2e32_qtwrapper.pl @@ -106,7 +106,7 @@ while (1) { $origDefLine = <$origDefFile>; if (defined($origDefLine)) { $origDefLine =~ s/[\n\r]//; - if ($origDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i) { + if ($origDefLine =~ /([a-z0-9_]+) +\@ *([0-9]+) (.*)/i) { $origSym = $1; $origOrdinal = $2; $origExtraData = $3; @@ -121,7 +121,7 @@ while (1) { if ($savedNewDefFileLine) { # This happens if the new def file was missing an entry. $newDefLine = $savedNewDefFileLine; - $newDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i or die("$0: Shouldn't happen"); + $newDefLine =~ /([a-z0-9_]+) +\@ *([0-9]+) (.*)/i or die("$0: Shouldn't happen"); $newSym = $1; $newOrdinal = $2; $newExtraData = $3; @@ -131,7 +131,7 @@ while (1) { $newDefLine = <$newDefFile>; if (defined($newDefLine)) { $newDefLine =~ s/[\n\r]//; - if ($newDefLine =~ /([a-z0-9_]+) +\@ ([0-9]+) (.*)/i) { + if ($newDefLine =~ /([a-z0-9_]+) +\@ *([0-9]+) (.*)/i) { $newSym = $1; $newOrdinal = $2; $newExtraData = $3; -- cgit v0.12 From dfa811b18b588b09ec7b5c648c7b143d54ddc825 Mon Sep 17 00:00:00 2001 From: axis Date: Tue, 19 Oct 2010 08:47:29 +0200 Subject: Fixed some tools definitions and properties in symbian profiles. This is needed for Symbian development on Windows using makefiles. RevBy: Trust me --- mkspecs/common/armcc.conf | 1 + mkspecs/common/symbian/symbian.conf | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mkspecs/common/armcc.conf b/mkspecs/common/armcc.conf index 2c765bc..4f178d7 100644 --- a/mkspecs/common/armcc.conf +++ b/mkspecs/common/armcc.conf @@ -37,5 +37,6 @@ QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB QMAKE_LFLAGS_THREAD += QMAKE_AR = armar --create +QMAKE_LIB = armar --create QMAKE_RANLIB = diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf index 9a0287a..c59f751 100644 --- a/mkspecs/common/symbian/symbian.conf +++ b/mkspecs/common/symbian/symbian.conf @@ -117,11 +117,11 @@ contains(QMAKE_HOST.os,Windows) { } QMAKE_IDL = midl -QMAKE_LIB = ar -ru -QMAKE_RC = windres QMAKE_ZIP = zip -r -9 QMAKE_UNZIP = unzip -o +QMAKE_WRITE_DEFAULT_RC = 1 + QMAKE_TAR = tar -cf QMAKE_GZIP = gzip -9f -- cgit v0.12 From bd07beb56cda3d6c37c0d0f9204247f16586cd27 Mon Sep 17 00:00:00 2001 From: axis Date: Tue, 19 Oct 2010 08:51:04 +0200 Subject: Added Symbian makefile building support using MinGW backend. RevBy: Oswald Buddenhagen --- mkspecs/common/symbian/symbian-makefile.conf | 6 +++++- qmake/generators/metamakefile.cpp | 4 +++- qmake/generators/win32/mingw_make.h | 4 ++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/mkspecs/common/symbian/symbian-makefile.conf b/mkspecs/common/symbian/symbian-makefile.conf index f429c1a..4fc5812 100644 --- a/mkspecs/common/symbian/symbian-makefile.conf +++ b/mkspecs/common/symbian/symbian-makefile.conf @@ -2,7 +2,11 @@ # qmake configuration for makefile based symbian # -MAKEFILE_GENERATOR = SYMBIAN_UNIX +contains(QMAKE_HOST.os,Windows) { + MAKEFILE_GENERATOR = SYMBIAN_MINGW +} else { + MAKEFILE_GENERATOR = SYMBIAN_UNIX +} include(symbian.conf) diff --git a/qmake/generators/metamakefile.cpp b/qmake/generators/metamakefile.cpp index 6c43b6f..26d587d 100644 --- a/qmake/generators/metamakefile.cpp +++ b/qmake/generators/metamakefile.cpp @@ -488,6 +488,8 @@ MetaMakefileGenerator::createMakefileGenerator(QMakeProject *proj, bool noIO) mkfile = new SymbianSbsv2MakefileGenerator; } else if(gen == "SYMBIAN_UNIX") { mkfile = new SymbianMakefileTemplate; + } else if(gen == "SYMBIAN_MINGW") { + mkfile = new SymbianMakefileTemplate; } else { fprintf(stderr, "Unknown generator specified: %s\n", gen.toLatin1().constData()); } @@ -544,7 +546,7 @@ MetaMakefileGenerator::modesForGenerator(const QString &gen, } else if (gen == "PROJECTBUILDER" || gen == "XCODE") { *host_mode = Option::HOST_MACX_MODE; *target_mode = Option::TARG_MACX_MODE; - } else if (gen == "SYMBIAN_ABLD" || gen == "SYMBIAN_SBSV2" || gen == "SYMBIAN_UNIX") { + } else if (gen == "SYMBIAN_ABLD" || gen == "SYMBIAN_SBSV2" || gen == "SYMBIAN_UNIX" || gen == "SYMBIAN_MINGW") { #if defined(Q_OS_MAC) *host_mode = Option::HOST_MACX_MODE; #elif defined(Q_OS_UNIX) diff --git a/qmake/generators/win32/mingw_make.h b/qmake/generators/win32/mingw_make.h index 007b48b..5bc9c7b 100644 --- a/qmake/generators/win32/mingw_make.h +++ b/qmake/generators/win32/mingw_make.h @@ -54,17 +54,17 @@ public: protected: QString escapeDependencyPath(const QString &path) const; QString getLibTarget(); + bool writeMakefile(QTextStream &); + void init(); private: bool isWindowsShell() const; void writeMingwParts(QTextStream &); void writeIncPart(QTextStream &t); void writeLibsPart(QTextStream &t); void writeLibDirPart(QTextStream &t); - bool writeMakefile(QTextStream &); void writeObjectsPart(QTextStream &t); void writeBuildRulesPart(QTextStream &t); void writeRcFilePart(QTextStream &t); - void init(); void processPrlVariable(const QString &var, const QStringList &l); QStringList &findDependencies(const QString &file); -- cgit v0.12 From 153b79efac39c33e528650cca35f832e47f7302b Mon Sep 17 00:00:00 2001 From: axis Date: Tue, 19 Oct 2010 10:10:08 +0200 Subject: Added object script support to RVCT when using MinGW qmake generator. RevBy: Oswald Buddenhagen --- mkspecs/common/symbian/symbian-makefile.conf | 2 ++ qmake/generators/win32/mingw_make.cpp | 46 +++++++++++++++++++++++----- 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/mkspecs/common/symbian/symbian-makefile.conf b/mkspecs/common/symbian/symbian-makefile.conf index 4fc5812..cffc859 100644 --- a/mkspecs/common/symbian/symbian-makefile.conf +++ b/mkspecs/common/symbian/symbian-makefile.conf @@ -28,6 +28,8 @@ CONFIG *= no_plugin_name_prefix QMAKE_PREFIX_STATICLIB = QMAKE_SYMBIAN_SHLIB = 1 +QMAKE_LINK_OBJECT_SCRIPT = objects + is_using_gnupoc { DEFINES *= __QT_PRODUCT_INCLUDE_IS_LOWERCASE__ } diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp index ea9e9e1..006a7d5 100644 --- a/qmake/generators/win32/mingw_make.cpp +++ b/qmake/generators/win32/mingw_make.cpp @@ -199,6 +199,23 @@ void createArObjectScriptFile(const QString &fileName, const QString &target, co } } +void createRvctObjectScriptFile(const QString &fileName, const QStringList &objList) +{ + QString filePath = Option::output_dir + QDir::separator() + fileName; + QFile file(filePath); + if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { + QTextStream t(&file); + for (QStringList::ConstIterator it = objList.constBegin(); it != objList.constEnd(); ++it) { + if (QDir::isRelativePath(*it)) + t << "./" << *it << endl; + else + t << *it << endl; + } + t.flush(); + file.close(); + } +} + void MingwMakefileGenerator::writeMingwParts(QTextStream &t) { writeStandardParts(t); @@ -367,20 +384,33 @@ void MingwMakefileGenerator::writeObjectsPart(QTextStream &t) if (!var("BUILD_NAME").isEmpty()) { ar_script_file += "." + var("BUILD_NAME"); } - createArObjectScriptFile(ar_script_file, var("DEST_TARGET"), project->values("OBJECTS")); // QMAKE_LIB is used for win32, including mingw, whereas QMAKE_AR is used on Unix. - // Strip off any options since the ar commands will be read from file. - QString ar_cmd = var("QMAKE_LIB").section(" ", 0, 0);; - if (ar_cmd.isEmpty()) - ar_cmd = "ar"; - objectsLinkLine = ar_cmd + " -M < " + ar_script_file; + if (project->isActiveConfig("rvct_linker")) { + createRvctObjectScriptFile(ar_script_file, project->values("OBJECTS")); + QString ar_cmd = project->values("QMAKE_LIB").join(" "); + if (ar_cmd.isEmpty()) + ar_cmd = "armar --create"; + objectsLinkLine = ar_cmd + " " + var("DEST_TARGET") + " --via " + ar_script_file; + } else { + // Strip off any options since the ar commands will be read from file. + QString ar_cmd = var("QMAKE_LIB").section(" ", 0, 0);; + if (ar_cmd.isEmpty()) + ar_cmd = "ar"; + createArObjectScriptFile(ar_script_file, var("DEST_TARGET"), project->values("OBJECTS")); + objectsLinkLine = ar_cmd + " -M < " + ar_script_file; + } } else { QString ld_script_file = var("QMAKE_LINK_OBJECT_SCRIPT") + "." + var("TARGET"); if (!var("BUILD_NAME").isEmpty()) { ld_script_file += "." + var("BUILD_NAME"); } - createLdObjectScriptFile(ld_script_file, project->values("OBJECTS")); - objectsLinkLine = ld_script_file; + if (project->isActiveConfig("rvct_linker")) { + createRvctObjectScriptFile(ld_script_file, project->values("OBJECTS")); + objectsLinkLine = QString::fromLatin1("--via ") + ld_script_file; + } else { + createLdObjectScriptFile(ld_script_file, project->values("OBJECTS")); + objectsLinkLine = ld_script_file; + } } Win32MakefileGenerator::writeObjectsPart(t); } -- cgit v0.12 From 5624b39aff84ddde76a4f42ab6fad9d6a90d8526 Mon Sep 17 00:00:00 2001 From: axis Date: Thu, 23 Dec 2010 16:24:06 +0100 Subject: Fixed include in network module on Symbian. --- src/network/kernel/qnetworkinterface_symbian.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/kernel/qnetworkinterface_symbian.cpp b/src/network/kernel/qnetworkinterface_symbian.cpp index 03133d0..8e5db3c 100644 --- a/src/network/kernel/qnetworkinterface_symbian.cpp +++ b/src/network/kernel/qnetworkinterface_symbian.cpp @@ -43,7 +43,7 @@ #include "qnetworkinterface.h" #include "qnetworkinterface_p.h" -#include "../corelib/kernel/qcore_symbian_p.h" +#include #ifndef QT_NO_NETWORKINTERFACE -- cgit v0.12 From a298545dfbd9bbfeac67ff17547d40acae8480a9 Mon Sep 17 00:00:00 2001 From: axis Date: Thu, 23 Dec 2010 16:24:57 +0100 Subject: Fixed a build library deployment issue in sqlite. Make did not understand that sqlite3.dso, which the link relies on, is the same as $$OBJECTS_DIR/sqlite3.dso, which is extracted by the profile. RevBy: Trust me --- src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri b/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri index ebeccc9..b7a87f3 100644 --- a/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri +++ b/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pri @@ -34,6 +34,12 @@ silent:symbian_sqlite3_dso.commands = @echo unzipping $@ && $$symbian_sqlite3_dso.commands QMAKE_EXTRA_COMPILERS += symbian_sqlite3_dso + # Workaround for the fact that make doesn't understand that sqlite3.dso + # is the same as $OBJECTS_DIR/sqlite3.dso + symbian_sqlite3_dso_standalone.target = sqlite3.dso + symbian_sqlite3_dso_standalone.depends = $$symbian_sqlite3_dso.output + QMAKE_EXTRA_TARGETS += symbian_sqlite3_dso_standalone + symbian_sqlite3_ver_dso.input = symbian_sqlite3_zip_file symbian_sqlite3_ver_dso.output = sqlite3{00060003}.dso !isEmpty(OBJECTS_DIR):symbian_sqlite3_ver_dso.output = $$OBJECTS_DIR/$$symbian_sqlite3_ver_dso.output -- cgit v0.12 From bc627fbe248c2efe9b05784182bf0da3b9c486d7 Mon Sep 17 00:00:00 2001 From: axis Date: Thu, 11 Nov 2010 13:52:28 +0100 Subject: Fixed a typo in src profile. RevBy: Trust me --- src/src.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/src.pro b/src/src.pro index 060f48b..868e22f 100644 --- a/src/src.pro +++ b/src/src.pro @@ -108,7 +108,7 @@ src_webkit_declarative.target = sub-webkitdeclarative src_phonon.depends = src_gui src_multimedia.depends = src_gui contains(QT_CONFIG, opengl):src_multimedia.depends += src_opengl - src_tools_activeqt.depends = src_tools_idc src_gui + src_activeqt.depends = src_tools_idc src_gui src_declarative.depends = src_gui src_script src_network src_plugins.depends = src_gui src_sql src_svg contains(QT_CONFIG, multimedia):src_plugins.depends += src_multimedia -- cgit v0.12 From c9704566aa9186369bfdabd835b0f6723839310b Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 7 Jan 2011 07:39:08 +0100 Subject: Stopped honoring the RVCT22INC variable on symbian-armcc mkspec. This usually points to the RVCT include directory, but those headers are not appropriate for Symbian. RevBy: Trust me --- mkspecs/features/symbian/symbian_building.prf | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf index 545cb81..28046b4 100644 --- a/mkspecs/features/symbian/symbian_building.prf +++ b/mkspecs/features/symbian/symbian_building.prf @@ -1,6 +1,11 @@ symbian-armcc { QMAKE_CFLAGS += $$QMAKE_CFLAGS.ARMCC QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS.ARMCC + # This is to prevent inclusion of the shipped RVCT headers, which are often in the + # environment variable RVCTxxINC by default. -J prevents the searching of that location, + # but needs a path, so just specify somewhere guaranteed not to contain header files. + QMAKE_CFLAGS += -J$${EPOCROOT}epoc32/ignore_this_path + QMAKE_CXXFLAGS += -J$${EPOCROOT}epoc32/ignore_this_path } else:symbian-gcce { QMAKE_CFLAGS += $$QMAKE_CFLAGS.GCCE QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS.GCCE @@ -235,12 +240,7 @@ contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") { } # Symbian resource files -symbian-armcc: { - SYMBIAN_RVCT22INC=$$(RVCT22INC) - !isEmpty(SYMBIAN_RVCT22INC):symbian_resources_INCLUDES = -I$${SYMBIAN_RVCT22INC} -} -symbian_resources_INCLUDES = $$replace(symbian_resources_INCLUDES, ",", " -I") -symbian_resources_INCLUDES += $$join(INCLUDEPATH, " -I", "-I") +symbian_resources_INCLUDES = $$join(INCLUDEPATH, " -I", "-I") symbian_resources_DEFINES = $$join(DEFINES, " -D", "-D") symbian_resources_DEFINES += -D__QT_SYMBIAN_RESOURCE__ symbian_resources_RCC_DIR = $$replace(RCC_DIR, "/$", "") -- cgit v0.12 From 775f98e2fe20cf381f9df3a4ff3aca3910c7d05c Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 7 Jan 2011 07:47:12 +0100 Subject: Added .lib/.dso dependency tracking to Symbian with MinGW generator. This is just a mirror of the way the UNIX generator does it. See commits aaf189b084f52 and bdff51768dfe. RevBy: Oswald Buddenhagen --- qmake/generators/win32/mingw_make.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp index 006a7d5..fc8cfa0 100644 --- a/qmake/generators/win32/mingw_make.cpp +++ b/qmake/generators/win32/mingw_make.cpp @@ -218,6 +218,12 @@ void createRvctObjectScriptFile(const QString &fileName, const QStringList &objL void MingwMakefileGenerator::writeMingwParts(QTextStream &t) { + if (!project->isEmpty("QMAKE_SYMBIAN_SHLIB")) { + t << "vpath %.dso " << project->values("QMAKE_LIBDIR").join(";") << endl; + t << "vpath %.lib " << project->values("QMAKE_LIBDIR").join(";") << endl; + t << "\n\n"; + } + writeStandardParts(t); if (!preCompHeaderOut.isEmpty()) { -- cgit v0.12 From 7dacac5ad465fe5c3aea8e2e09d7910a1ed58079 Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 7 Jan 2011 07:53:13 +0100 Subject: Avoided some MinGW specific codepaths when building Symbian libs. RevBy: Trust me --- qmake/generators/win32/mingw_make.cpp | 4 ++-- qmake/generators/win32/winmakefile.cpp | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp index fc8cfa0..a772b38 100644 --- a/qmake/generators/win32/mingw_make.cpp +++ b/qmake/generators/win32/mingw_make.cpp @@ -290,7 +290,7 @@ void MingwMakefileGenerator::init() if(configs.indexOf("qt") == -1) configs.append("qt"); - if(project->isActiveConfig("dll")) { + if(project->isActiveConfig("dll") && project->values("QMAKE_SYMBIAN_SHLIB").isEmpty()) { QString destDir = ""; if(!project->first("DESTDIR").isEmpty()) destDir = Option::fixPathToTargetOS(project->first("DESTDIR") + Option::dir_sep, false, false); @@ -299,7 +299,7 @@ void MingwMakefileGenerator::init() project->values("QMAKE_LFLAGS").append(QString("-Wl,--out-implib,") + project->first("MINGW_IMPORT_LIB")); } - if(!project->values("DEF_FILE").isEmpty()) + if(!project->values("DEF_FILE").isEmpty() && project->values("QMAKE_SYMBIAN_SHLIB").isEmpty()) project->values("QMAKE_LFLAGS").append(QString("-Wl,") + project->first("DEF_FILE")); MakefileGenerator::init(); diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp index d92eb69..f2bf7d4 100644 --- a/qmake/generators/win32/winmakefile.cpp +++ b/qmake/generators/win32/winmakefile.cpp @@ -303,7 +303,8 @@ void Win32MakefileGenerator::processVars() // TARGET_VERSION_EXT will be used to add a version number onto the target name if (project->values("TARGET_VERSION_EXT").isEmpty() - && !project->values("VER_MAJ").isEmpty()) + && !project->values("VER_MAJ").isEmpty() + && project->values("QMAKE_SYMBIAN_SHLIB").isEmpty()) project->values("TARGET_VERSION_EXT").append(project->values("VER_MAJ").first()); if(project->isEmpty("QMAKE_COPY_FILE")) -- cgit v0.12 From 85005fb1ee135b33ef2e97396d469112845f3e6c Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 7 Jan 2011 07:56:19 +0100 Subject: Added support for rvct_linker config in qmake's MinGW generator. RevBy: Trust me --- qmake/generators/win32/mingw_make.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp index a772b38..f1043bc 100644 --- a/qmake/generators/win32/mingw_make.cpp +++ b/qmake/generators/win32/mingw_make.cpp @@ -368,17 +368,25 @@ void MingwMakefileGenerator::writeLibsPart(QTextStream &t) t << "LIBS = "; if(!project->values("QMAKE_LIBDIR").isEmpty()) writeLibDirPart(t); - t << var("QMAKE_LIBS").replace(QRegExp("(\\slib|^lib)")," -l") << ' ' - << var("QMAKE_LIBS_PRIVATE").replace(QRegExp("(\\slib|^lib)")," -l") << endl; + if (project->isActiveConfig("rvct_linker")) { + t << var("QMAKE_LIBS") << ' ' + << var("QMAKE_LIBS_PRIVATE") << endl; + } else { + t << var("QMAKE_LIBS").replace(QRegExp("(\\slib|^lib)")," -l") << ' ' + << var("QMAKE_LIBS_PRIVATE").replace(QRegExp("(\\slib|^lib)")," -l") << endl; + } } } void MingwMakefileGenerator::writeLibDirPart(QTextStream &t) { QStringList libDirs = project->values("QMAKE_LIBDIR"); + QString libArg = QString::fromLatin1("-L"); + if (project->isActiveConfig("rvct_linker")) + libArg = QString::fromLatin1("--userlibpath "); for (int i = 0; i < libDirs.size(); ++i) libDirs[i].remove("\""); - t << valGlue(libDirs,"-L"+quote,quote+" -L" +quote,quote) << " "; + t << valGlue(libDirs, libArg+quote, quote+" "+libArg+quote, quote) << " "; } void MingwMakefileGenerator::writeObjectsPart(QTextStream &t) -- cgit v0.12 From 7caa55505704cd907bbd19a2e79fb9e604a86675 Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 7 Jan 2011 08:09:01 +0100 Subject: Added support for various special compiler/linker flags on MinGW. This enables you to use QMAKE_xxx_yyy, where xxx is either CFLAGS, CXXFLAGS or LFLAGS, and yyy is either APP, SHLIB or PLUGIN. It is basically the same as the one in the UNIX generator. RevBy: Oswald Buddenhagen --- qmake/generators/win32/winmakefile.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp index f2bf7d4..7f81b54 100644 --- a/qmake/generators/win32/winmakefile.cpp +++ b/qmake/generators/win32/winmakefile.cpp @@ -332,6 +332,24 @@ void Win32MakefileGenerator::processVars() if(!(*libDir_it).isEmpty()) (*libDir_it) = Option::fixPathToTargetOS((*libDir_it), false, false); } + + if (project->values("TEMPLATE").contains("app")) { + project->values("QMAKE_CFLAGS") += project->values("QMAKE_CFLAGS_APP"); + project->values("QMAKE_CXXFLAGS") += project->values("QMAKE_CXXFLAGS_APP"); + project->values("QMAKE_LFLAGS") += project->values("QMAKE_LFLAGS_APP"); + } else if (project->values("TEMPLATE").contains("lib") && project->isActiveConfig("dll")) { + if(!project->isActiveConfig("plugin") || !project->isActiveConfig("plugin_no_share_shlib_cflags")) { + project->values("QMAKE_CFLAGS") += project->values("QMAKE_CFLAGS_SHLIB"); + project->values("QMAKE_CXXFLAGS") += project->values("QMAKE_CXXFLAGS_SHLIB"); + } + if (project->isActiveConfig("plugin")) { + project->values("QMAKE_CFLAGS") += project->values("QMAKE_CFLAGS_PLUGIN"); + project->values("QMAKE_CXXFLAGS") += project->values("QMAKE_CXXFLAGS_PLUGIN"); + project->values("QMAKE_LFLAGS") += project->values("QMAKE_LFLAGS_PLUGIN"); + } else { + project->values("QMAKE_LFLAGS") += project->values("QMAKE_LFLAGS_SHLIB"); + } + } } void Win32MakefileGenerator::fixTargetExt() -- cgit v0.12 From dbbf06e51eafe25d63cf2d0d21a1d92bde5475cc Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 7 Jan 2011 08:24:41 +0100 Subject: Added MinGW support for adding lib prefix and extension via profile. RevBy: Oswald Buddenhagen --- mkspecs/win32-g++/qmake.conf | 2 ++ qmake/generators/win32/mingw_make.cpp | 5 +---- qmake/generators/win32/winmakefile.cpp | 22 +++++++++++++++++----- qmake/generators/win32/winmakefile.h | 1 + 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/mkspecs/win32-g++/qmake.conf b/mkspecs/win32-g++/qmake.conf index 2d9833b..e5e4996 100644 --- a/mkspecs/win32-g++/qmake.conf +++ b/mkspecs/win32-g++/qmake.conf @@ -62,6 +62,8 @@ QMAKE_LFLAGS_WINDOWS = -Wl,-subsystem,windows QMAKE_LFLAGS_DLL = -shared QMAKE_LINK_OBJECT_MAX = 10 QMAKE_LINK_OBJECT_SCRIPT= object_script +QMAKE_PREFIX_STATICLIB = lib +QMAKE_EXTENSION_STATICLIB = a QMAKE_LIBS = diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp index f1043bc..9eea98f 100644 --- a/qmake/generators/win32/mingw_make.cpp +++ b/qmake/generators/win32/mingw_make.cpp @@ -335,12 +335,9 @@ void MingwMakefileGenerator::init() void MingwMakefileGenerator::fixTargetExt() { if (project->isActiveConfig("staticlib") && project->first("TEMPLATE") == "lib") { - project->values("TARGET_EXT").append(".a"); project->values("QMAKE_LFLAGS").append("-static"); - project->values("TARGET").first() = "lib" + project->first("TARGET"); - } else { - Win32MakefileGenerator::fixTargetExt(); } + Win32MakefileGenerator::fixTargetExt(); } void MingwMakefileGenerator::writeIncPart(QTextStream &t) diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp index 7f81b54..bfe3e09 100644 --- a/qmake/generators/win32/winmakefile.cpp +++ b/qmake/generators/win32/winmakefile.cpp @@ -57,6 +57,14 @@ Win32MakefileGenerator::Win32MakefileGenerator() : MakefileGenerator() { } +void Win32MakefileGenerator::init() +{ + if (project->isEmpty("QMAKE_EXTENSION_STATICLIB")) + project->values("QMAKE_EXTENSION_STATICLIB").append("lib"); + if (project->isEmpty("QMAKE_EXTENSION_SHLIB")) + project->values("QMAKE_EXTENSION_SHLIB").append("lib"); +} + int Win32MakefileGenerator::findHighestVersion(const QString &d, const QString &stem, const QString &ext) { @@ -354,12 +362,16 @@ void Win32MakefileGenerator::processVars() void Win32MakefileGenerator::fixTargetExt() { - if (!project->values("QMAKE_APP_FLAG").isEmpty()) + if (!project->values("QMAKE_APP_FLAG").isEmpty()) { project->values("TARGET_EXT").append(".exe"); - else if (project->isActiveConfig("shared")) - project->values("TARGET_EXT").append(project->first("TARGET_VERSION_EXT") + ".dll"); - else - project->values("TARGET_EXT").append(".lib"); + } else if (project->isActiveConfig("shared")) { + project->values("TARGET_EXT").append(project->first("TARGET_VERSION_EXT") + "." + + project->first("QMAKE_EXTENSION_SHLIB")); + project->values("TARGET").first() = project->first("QMAKE_PREFIX_SHLIB") + project->first("TARGET"); + } else { + project->values("TARGET_EXT").append("." + project->first("QMAKE_EXTENSION_STATICLIB")); + project->values("TARGET").first() = project->first("QMAKE_PREFIX_STATICLIB") + project->first("TARGET"); + } } void Win32MakefileGenerator::processRcFileVar() diff --git a/qmake/generators/win32/winmakefile.h b/qmake/generators/win32/winmakefile.h index fa3f292..7f7d2f3 100644 --- a/qmake/generators/win32/winmakefile.h +++ b/qmake/generators/win32/winmakefile.h @@ -59,6 +59,7 @@ class Win32MakefileGenerator : public MakefileGenerator public: Win32MakefileGenerator(); ~Win32MakefileGenerator(); + void init(); protected: virtual QString defaultInstall(const QString &); virtual void writeCleanParts(QTextStream &t); -- cgit v0.12 From 728f0f7d5c1c84ca713cfb34c3d32b65018028d4 Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 28 Jan 2011 10:27:33 +0100 Subject: Fixed GCCE libdir handling if the paths have spaces in them. RevBy: Trust me --- mkspecs/symbian-gcce/qmake.conf | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/mkspecs/symbian-gcce/qmake.conf b/mkspecs/symbian-gcce/qmake.conf index 5d0deb7..e83f435 100644 --- a/mkspecs/symbian-gcce/qmake.conf +++ b/mkspecs/symbian-gcce/qmake.conf @@ -72,16 +72,16 @@ QMAKE_LFLAGS += --target1-abs \ QMAKE_LIBDIR += $${EPOCROOT}epoc32/release/armv5/udeb/ # g++ knows the path to the gcc-shipped-libs, ld doesn't. So cache the full path in the generate Makefile -QMAKE_GCC_SEARCH_DIRS =$$system($$QMAKE_CXX -print-search-dirs) -for(line, QMAKE_GCC_SEARCH_DIRS) { - contains(line, "libraries:") { - foundIt="1" - } else { - contains(foundIt, "1") { - QMAKE_LFLAGS += $$replace(line, "[=:]", " -L") - } - } +QMAKE_GCC_SEARCH_DIRS = $$system($$QMAKE_CXX -print-search-dirs) +QMAKE_GCC_SEARCH_DIRS = "$$join(QMAKE_GCC_SEARCH_DIRS, " ")" +QMAKE_GCC_SEARCH_DIRS = $$replace(QMAKE_GCC_SEARCH_DIRS, ".*libraries: *", "") +QMAKE_GCC_SEARCH_DIRS = $$replace(QMAKE_GCC_SEARCH_DIRS, "=", "") +contains(QMAKE_HOST.os,Windows) { + QMAKE_GCC_SEARCH_DIRS = $$split(QMAKE_GCC_SEARCH_DIRS, ;) +} else { + QMAKE_GCC_SEARCH_DIRS = $$split(QMAKE_GCC_SEARCH_DIRS, :) } +for(line, QMAKE_GCC_SEARCH_DIRS):QMAKE_LIBDIR += $$line QMAKE_LIBDIR += $${EPOCROOT}epoc32/release/armv5/lib -- cgit v0.12 From 7a53c676479c5531880793f79f0fb2e74b31fae1 Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 28 Jan 2011 10:28:23 +0100 Subject: Made qmake strip trailing \ from libdirs. This was done because trailing \ would confuse the command line parser if the path was also quoted. RevBy: Oswald Buddenhagen --- qmake/generators/win32/mingw_make.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp index 9eea98f..6064080 100644 --- a/qmake/generators/win32/mingw_make.cpp +++ b/qmake/generators/win32/mingw_make.cpp @@ -381,8 +381,11 @@ void MingwMakefileGenerator::writeLibDirPart(QTextStream &t) QString libArg = QString::fromLatin1("-L"); if (project->isActiveConfig("rvct_linker")) libArg = QString::fromLatin1("--userlibpath "); - for (int i = 0; i < libDirs.size(); ++i) + for (int i = 0; i < libDirs.size(); ++i) { libDirs[i].remove("\""); + if (libDirs[i].endsWith("\\")) + libDirs[i].chop(1); + } t << valGlue(libDirs, libArg+quote, quote+" "+libArg+quote, quote) << " "; } -- cgit v0.12 From 9ca5cdd1242deaba10bd1005bcd0774da35d9779 Mon Sep 17 00:00:00 2001 From: axis Date: Mon, 31 Jan 2011 14:39:23 +0100 Subject: Fixed win32-msvc2008 build regression. We needed to move the code in the init() function to the fixTargetExt() function, which is where the variables are actually used. The reason is that fixTargetExt() runs before init(). RevBy: Miikka Heikkinen --- qmake/generators/win32/winmakefile.cpp | 13 +++++-------- qmake/generators/win32/winmakefile.h | 1 - 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp index bfe3e09..fd20452 100644 --- a/qmake/generators/win32/winmakefile.cpp +++ b/qmake/generators/win32/winmakefile.cpp @@ -57,14 +57,6 @@ Win32MakefileGenerator::Win32MakefileGenerator() : MakefileGenerator() { } -void Win32MakefileGenerator::init() -{ - if (project->isEmpty("QMAKE_EXTENSION_STATICLIB")) - project->values("QMAKE_EXTENSION_STATICLIB").append("lib"); - if (project->isEmpty("QMAKE_EXTENSION_SHLIB")) - project->values("QMAKE_EXTENSION_SHLIB").append("lib"); -} - int Win32MakefileGenerator::findHighestVersion(const QString &d, const QString &stem, const QString &ext) { @@ -362,6 +354,11 @@ void Win32MakefileGenerator::processVars() void Win32MakefileGenerator::fixTargetExt() { + if (project->isEmpty("QMAKE_EXTENSION_STATICLIB")) + project->values("QMAKE_EXTENSION_STATICLIB").append("lib"); + if (project->isEmpty("QMAKE_EXTENSION_SHLIB")) + project->values("QMAKE_EXTENSION_SHLIB").append("dll"); + if (!project->values("QMAKE_APP_FLAG").isEmpty()) { project->values("TARGET_EXT").append(".exe"); } else if (project->isActiveConfig("shared")) { diff --git a/qmake/generators/win32/winmakefile.h b/qmake/generators/win32/winmakefile.h index 7f7d2f3..fa3f292 100644 --- a/qmake/generators/win32/winmakefile.h +++ b/qmake/generators/win32/winmakefile.h @@ -59,7 +59,6 @@ class Win32MakefileGenerator : public MakefileGenerator public: Win32MakefileGenerator(); ~Win32MakefileGenerator(); - void init(); protected: virtual QString defaultInstall(const QString &); virtual void writeCleanParts(QTextStream &t); -- cgit v0.12 From 1d80690e9e52c5dff1392bf7694abf65dd51a3b8 Mon Sep 17 00:00:00 2001 From: axis Date: Thu, 24 Feb 2011 13:46:01 +0100 Subject: Fixed incorrect referral to an include file. Better to make it relative to the profile. That way it is always found, regardless of where Qt is located. RevBy: Liang Qi --- mkspecs/common/symbian/symbian-makefile.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/common/symbian/symbian-makefile.conf b/mkspecs/common/symbian/symbian-makefile.conf index cffc859..b248117 100644 --- a/mkspecs/common/symbian/symbian-makefile.conf +++ b/mkspecs/common/symbian/symbian-makefile.conf @@ -33,7 +33,7 @@ QMAKE_LINK_OBJECT_SCRIPT = objects is_using_gnupoc { DEFINES *= __QT_PRODUCT_INCLUDE_IS_LOWERCASE__ } -QMAKE_SYMBIAN_INCLUDES = $$[QT_INSTALL_DATA]/mkspecs/common/symbian/symbianincludes.h +QMAKE_SYMBIAN_INCLUDES = $$IN_PWD/symbianincludes.h symbian-armcc { QMAKE_CFLAGS += --preinclude $$QMAKE_SYMBIAN_INCLUDES QMAKE_CXXFLAGS += --preinclude $$QMAKE_SYMBIAN_INCLUDES -- cgit v0.12 From 156b4810dd39c14c16c604ba24b36a1f641d3891 Mon Sep 17 00:00:00 2001 From: axis Date: Thu, 24 Feb 2011 17:28:56 +0100 Subject: Corrected a mismerge in GCCE link parameters. RevBy: Trust me --- mkspecs/symbian-gcce/qmake.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/symbian-gcce/qmake.conf b/mkspecs/symbian-gcce/qmake.conf index e83f435..2c90a00 100644 --- a/mkspecs/symbian-gcce/qmake.conf +++ b/mkspecs/symbian-gcce/qmake.conf @@ -54,7 +54,7 @@ DEFINES += __GCCE__ \ UNICODE QMAKE_LFLAGS_APP += --entry=_E32Startup -u _E32Startup -QMAKE_LFLAGS_SHLIB += -shared --default-symver --entry _E32Dll -u _E32Dll +QMAKE_LFLAGS_SHLIB += -shared --default-symver --entry=_E32Dll -u _E32Dll QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB gcceExtraFlags = --include=$${EPOCROOT}epoc32/include/gcce/gcce.h -march=armv5t -mapcs -mthumb-interwork -nostdinc -c -msoft-float -T script -- cgit v0.12 From 2e0fab04343cdc938d7870520b8c92631a0abc87 Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 25 Feb 2011 10:24:58 +0100 Subject: Removed javascript-jit from default symbian-gcce build. It fails the build anyway. RevBy: Liang Qi --- configure | 2 ++ 1 file changed, 2 insertions(+) diff --git a/configure b/configure index fb1ee4c..c1099f7 100755 --- a/configure +++ b/configure @@ -6434,6 +6434,8 @@ if [ "$CFG_JAVASCRIPTCORE_JIT" = "yes" ] || [ "$CFG_JAVASCRIPTCORE_JIT" = "auto" if [ $? != "0" ]; then CFG_JAVASCRIPTCORE_JIT=no fi + elif [ "$XPLATFORM" = "symbian-gcce" ]; then + CFG_JAVASCRIPTCORE_JIT=no fi fi -- cgit v0.12 From edca06ea839bf17cbadad3daddc00e636d38addb Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 25 Feb 2011 13:31:27 +0100 Subject: Fixed mkspec detection for Symbian. RevBy: Liang Qi --- configure | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/configure b/configure index c1099f7..163ebc4 100755 --- a/configure +++ b/configure @@ -7115,11 +7115,10 @@ EOF canBuildWebKit="no" canBuildQtConcurrent="no" ;; - symbian/*-gcce) + symbian-gcce) canBuildWebKit="no" canBuildQtConcurrent="no" - ;; - symbian/*-armcc) + symbian-armcc) canBuildQtConcurrent="no" ;; esac -- cgit v0.12 From e05e6802a6873f1ba48148ed3b9cc8cfcbeb3d83 Mon Sep 17 00:00:00 2001 From: axis Date: Mon, 28 Feb 2011 08:45:10 +0100 Subject: Readded a ';;' that was removed by mistake. RevBy: Trust me --- configure | 1 + 1 file changed, 1 insertion(+) diff --git a/configure b/configure index 163ebc4..d064240 100755 --- a/configure +++ b/configure @@ -7118,6 +7118,7 @@ EOF symbian-gcce) canBuildWebKit="no" canBuildQtConcurrent="no" + ;; symbian-armcc) canBuildQtConcurrent="no" ;; -- cgit v0.12 From 0d9cf6f4f4b1b9c51102773ba705aa0b68bb5f7f Mon Sep 17 00:00:00 2001 From: axis Date: Thu, 3 Mar 2011 16:01:45 +0100 Subject: Disable capabilities example for symbian-gcce due to a bug in elf2e32 Phonon exports template instantiations. These exports get weak symbol binding, which is correct according to the C++ ABI, but the problem is that elf2e32 has a bug which does not transfer the weak symbols correctly to the dso file. Therefore, the example will work if you have a prebuilt Qt version and use GCCE, but not if you build Qt from scratch using GCCE. For normal non-template symbols it is not a problem since they get global bindings. RVCT also produces global bindings. RevBy: Shane Kearns --- examples/phonon/phonon.pro | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/phonon/phonon.pro b/examples/phonon/phonon.pro index aa6ac13..c6a0bff 100644 --- a/examples/phonon/phonon.pro +++ b/examples/phonon/phonon.pro @@ -3,6 +3,9 @@ CONFIG += ordered SUBDIRS = qmusicplayer \ capabilities +# Disable capabilities example for symbian-gcce due to a bug in elf2e32. +symbian-gcce:SUBDIRS -= capabilities + # install target.path = $$[QT_INSTALL_EXAMPLES]/phonon sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS phonon.pro README -- cgit v0.12 From d45c67d01ce28f4fb85eace1116ca751a8f02827 Mon Sep 17 00:00:00 2001 From: axis Date: Fri, 4 Mar 2011 13:13:40 +0100 Subject: Removed reference to nonexistant profile. Probably this was a result of backporting symbian-gcce support from 4.8 to 4.7. RevBy: Liang Qi --- mkspecs/symbian-gcce/qmake.conf | 1 - 1 file changed, 1 deletion(-) diff --git a/mkspecs/symbian-gcce/qmake.conf b/mkspecs/symbian-gcce/qmake.conf index 2c90a00..62a079b 100644 --- a/mkspecs/symbian-gcce/qmake.conf +++ b/mkspecs/symbian-gcce/qmake.conf @@ -4,7 +4,6 @@ include(../common/symbian/symbian-makefile.conf) -include(../common/gcc-base.conf) include(../common/g++.conf) QMAKE_CC = arm-none-symbianelf-gcc -- cgit v0.12 From d65cb0bbb17d21cce2823ace521dea9e53fe4988 Mon Sep 17 00:00:00 2001 From: Janne Hamalainen Date: Thu, 10 Mar 2011 10:09:08 +0200 Subject: Added Harmattan specific debian files to master branch. Debian packaging files added to Master branch. One translation file was removed as it was a left over from an old commit. Reference to it was removed from rules file. Similar commit is done for Harmattan as well. Task: BACKEND-564 Reviewed-by: Adrian Constantin --- config.profiles/harmattan/QMLViewer.desktop | 9 + config.profiles/harmattan/QMLViewer.png | Bin 0 -> 7150 bytes config.profiles/harmattan/README.source | 58 + config.profiles/harmattan/api | 120 ++ config.profiles/harmattan/changelog | 2039 ++++++++++++++++++++ config.profiles/harmattan/collection/qtdemo.qhc.uu | 231 +++ config.profiles/harmattan/compat | 1 + config.profiles/harmattan/configure-pulse.sh | 81 + config.profiles/harmattan/control | 648 +++++++ config.profiles/harmattan/libqt4-core.lintian | 1 + config.profiles/harmattan/libqt4-dbus-dbg.lintian | 1 + config.profiles/harmattan/libqt4-dbus.install | 3 + config.profiles/harmattan/libqt4-dbus.lintian | 2 + .../harmattan/libqt4-declarative-dbg.lintian | 1 + .../harmattan/libqt4-declarative-dev.lintian | 1 + .../harmattan/libqt4-declarative.install | 4 + .../harmattan/libqt4-declarative.lintian | 2 + config.profiles/harmattan/libqt4-dev.dirs | 1 + config.profiles/harmattan/libqt4-dev.install | 85 + config.profiles/harmattan/libqt4-dev.links | 13 + config.profiles/harmattan/libqt4-dev.lintian | 17 + config.profiles/harmattan/libqt4-dev.manpages | 5 + config.profiles/harmattan/libqt4-dev.postinst | 21 + config.profiles/harmattan/libqt4-dev.prerm | 16 + config.profiles/harmattan/libqt4-doc.install | 1 + config.profiles/harmattan/libqt4-doc.lintian | 1 + config.profiles/harmattan/libqt4-gui-tests.lintian | 64 + config.profiles/harmattan/libqt4-gui.lintian | 1 + config.profiles/harmattan/libqt4-help-dbg.lintian | 1 + config.profiles/harmattan/libqt4-help.install | 4 + config.profiles/harmattan/libqt4-help.lintian | 2 + config.profiles/harmattan/libqt4-meego-dbg.lintian | 1 + config.profiles/harmattan/libqt4-meego-dev.lintian | 1 + config.profiles/harmattan/libqt4-meego.lintian | 2 + .../harmattan/libqt4-meegographicssystem.install | 1 + .../libqt4-meegographicssystemhelper-dev.install | 3 + .../libqt4-meegographicssystemhelper.install | 1 + .../harmattan/libqt4-multimedia-dbg.lintian | 1 + .../harmattan/libqt4-multimedia.install | 1 + .../harmattan/libqt4-multimedia.lintian | 2 + .../harmattan/libqt4-network-dbg.lintian | 1 + config.profiles/harmattan/libqt4-network.install | 2 + config.profiles/harmattan/libqt4-network.lintian | 2 + .../harmattan/libqt4-opengl-dbg.lintian | 1 + .../harmattan/libqt4-opengl-dev.lintian | 1 + config.profiles/harmattan/libqt4-opengl.install | 2 + config.profiles/harmattan/libqt4-opengl.lintian | 3 + .../harmattan/libqt4-phonon-dbg.lintian | 1 + config.profiles/harmattan/libqt4-phonon.install | 2 + config.profiles/harmattan/libqt4-phonon.lintian | 2 + .../harmattan/libqt4-script-dbg.lintian | 1 + config.profiles/harmattan/libqt4-script.install | 3 + config.profiles/harmattan/libqt4-script.lintian | 2 + config.profiles/harmattan/libqt4-sql-dbg.lintian | 1 + .../harmattan/libqt4-sql-sqlite-dbg.lintian | 1 + .../harmattan/libqt4-sql-sqlite.install | 2 + .../harmattan/libqt4-sql-sqlite.lintian | 1 + config.profiles/harmattan/libqt4-sql.install | 2 + config.profiles/harmattan/libqt4-sql.lintian | 2 + config.profiles/harmattan/libqt4-svg-dbg.lintian | 1 + config.profiles/harmattan/libqt4-svg.install | 4 + config.profiles/harmattan/libqt4-svg.lintian | 2 + config.profiles/harmattan/libqt4-test-dbg.lintian | 1 + config.profiles/harmattan/libqt4-test.install | 2 + config.profiles/harmattan/libqt4-test.lintian | 2 + config.profiles/harmattan/libqt4-webkit.lintian | 1 + config.profiles/harmattan/libqt4-xml-dbg.lintian | 1 + config.profiles/harmattan/libqt4-xml.install | 1 + config.profiles/harmattan/libqt4-xml.lintian | 2 + .../harmattan/libqt4-xmlpatterns-dbg.lintian | 1 + .../harmattan/libqt4-xmlpatterns.install | 3 + .../harmattan/libqt4-xmlpatterns.lintian | 2 + config.profiles/harmattan/libqt4.lintian | 1 + config.profiles/harmattan/libqtcore4-dbg.lintian | 1 + config.profiles/harmattan/libqtcore4.install | 6 + config.profiles/harmattan/libqtcore4.lintian | 2 + config.profiles/harmattan/libqtgui4-dbg.lintian | 1 + config.profiles/harmattan/libqtgui4.install | 7 + config.profiles/harmattan/libqtgui4.lintian | 2 + config.profiles/harmattan/manpages/lrelease.1 | 89 + config.profiles/harmattan/manpages/lupdate.1 | 95 + config.profiles/harmattan/manpages/moc.1 | 449 +++++ config.profiles/harmattan/manpages/qmake.1 | 106 + config.profiles/harmattan/manpages/qtconfig.1 | 34 + config.profiles/harmattan/manpages/uic.1 | 136 ++ .../harmattan/mkspecs/linux-g++-cross/qmake.conf | 54 + .../mkspecs/linux-g++-cross/qplatformdefs.h | 42 + config.profiles/harmattan/not-installed | 18 + .../harmattan/patches/default_widget_size.diff | 13 + .../harmattan/patches/glshadercache.diff | 1003 ++++++++++ config.profiles/harmattan/patches/icu.diff | 732 +++++++ .../patches/no_read_pro_from_quilt_dir.diff | 13 + .../patches/pinch_gesture_sent_twice.diff | 56 + .../harmattan/patches/qgltexturecache.diff | 23 + config.profiles/harmattan/patches/qwidget_x11.diff | 39 + .../harmattan/patches/qwidget_x11_mapping.diff | 17 + .../patches/runtime-window-geometry-revert.diff | 12 + config.profiles/harmattan/patches/series | 14 + .../harmattan/patches/signon_authenticator4.diff | 230 +++ config.profiles/harmattan/patches/temppath.diff | 28 + .../harmattan/patches/tst_qprogressbar.diff | 19 + .../harmattan/patches/tst_qscrollbar.diff | 12 + .../harmattan/patches/tst_qvariant.diff | 21 + .../harmattan/qt4-acceptance-tests.lintian | 6 + .../harmattan/qt4-declarative-qmlviewer.install | 3 + .../harmattan/qt4-declarative-qmlviewer.lintian | 1 + config.profiles/harmattan/qt4-doc-html.doc-base | 11 + config.profiles/harmattan/qt4-doc-html.install | 2 + config.profiles/harmattan/qt4-doc-html.links | 2 + config.profiles/harmattan/qt4-doc.install | 3 + .../harmattan/qt4-linguist-tools.install | 4 + .../harmattan/qt4-linguist-tools.lintian | 4 + .../harmattan/qt4-linguist-tools.postinst | 16 + config.profiles/harmattan/qt4-linguist-tools.prerm | 16 + .../harmattan/qt4-maemo-auto-tests.lintian | 41 + config.profiles/harmattan/readdir-hppa-test.c | 25 + config.profiles/harmattan/rules | 404 ++++ config.profiles/harmattan/source.lintian-overrides | 5 + config.profiles/harmattan/source/format | 1 + config.profiles/harmattan/tests/create_tests_xml | 174 ++ .../harmattan/tests/libqt4-gui-tests.pro | 64 + config.profiles/harmattan/tests/maemo_tests.prf | 57 + .../harmattan/tests/qt4-acceptance-tests.pro | 6 + .../harmattan/tests/qt4-maemo-auto-tests.pro | 44 + config.profiles/harmattan/tests/tests.xml | 320 +++ config.profiles/harmattan/tests/testset.txt | 11 + .../harmattan/tests/testsuite_footer.txt | 2 + .../harmattan/tests/testsuite_header.txt | 4 + 128 files changed, 8003 insertions(+) create mode 100644 config.profiles/harmattan/QMLViewer.desktop create mode 100644 config.profiles/harmattan/QMLViewer.png create mode 100644 config.profiles/harmattan/README.source create mode 100644 config.profiles/harmattan/api create mode 100644 config.profiles/harmattan/changelog create mode 100644 config.profiles/harmattan/collection/qtdemo.qhc.uu create mode 100644 config.profiles/harmattan/compat create mode 100755 config.profiles/harmattan/configure-pulse.sh create mode 100644 config.profiles/harmattan/control create mode 100644 config.profiles/harmattan/libqt4-core.lintian create mode 100644 config.profiles/harmattan/libqt4-dbus-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-dbus.install create mode 100644 config.profiles/harmattan/libqt4-dbus.lintian create mode 100644 config.profiles/harmattan/libqt4-declarative-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-declarative-dev.lintian create mode 100644 config.profiles/harmattan/libqt4-declarative.install create mode 100644 config.profiles/harmattan/libqt4-declarative.lintian create mode 100644 config.profiles/harmattan/libqt4-dev.dirs create mode 100644 config.profiles/harmattan/libqt4-dev.install create mode 100644 config.profiles/harmattan/libqt4-dev.links create mode 100644 config.profiles/harmattan/libqt4-dev.lintian create mode 100644 config.profiles/harmattan/libqt4-dev.manpages create mode 100644 config.profiles/harmattan/libqt4-dev.postinst create mode 100644 config.profiles/harmattan/libqt4-dev.prerm create mode 100644 config.profiles/harmattan/libqt4-doc.install create mode 100644 config.profiles/harmattan/libqt4-doc.lintian create mode 100644 config.profiles/harmattan/libqt4-gui-tests.lintian create mode 100644 config.profiles/harmattan/libqt4-gui.lintian create mode 100644 config.profiles/harmattan/libqt4-help-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-help.install create mode 100644 config.profiles/harmattan/libqt4-help.lintian create mode 100644 config.profiles/harmattan/libqt4-meego-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-meego-dev.lintian create mode 100644 config.profiles/harmattan/libqt4-meego.lintian create mode 100644 config.profiles/harmattan/libqt4-meegographicssystem.install create mode 100644 config.profiles/harmattan/libqt4-meegographicssystemhelper-dev.install create mode 100644 config.profiles/harmattan/libqt4-meegographicssystemhelper.install create mode 100644 config.profiles/harmattan/libqt4-multimedia-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-multimedia.install create mode 100644 config.profiles/harmattan/libqt4-multimedia.lintian create mode 100644 config.profiles/harmattan/libqt4-network-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-network.install create mode 100644 config.profiles/harmattan/libqt4-network.lintian create mode 100644 config.profiles/harmattan/libqt4-opengl-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-opengl-dev.lintian create mode 100644 config.profiles/harmattan/libqt4-opengl.install create mode 100644 config.profiles/harmattan/libqt4-opengl.lintian create mode 100644 config.profiles/harmattan/libqt4-phonon-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-phonon.install create mode 100644 config.profiles/harmattan/libqt4-phonon.lintian create mode 100644 config.profiles/harmattan/libqt4-script-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-script.install create mode 100644 config.profiles/harmattan/libqt4-script.lintian create mode 100644 config.profiles/harmattan/libqt4-sql-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-sql-sqlite-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-sql-sqlite.install create mode 100644 config.profiles/harmattan/libqt4-sql-sqlite.lintian create mode 100644 config.profiles/harmattan/libqt4-sql.install create mode 100644 config.profiles/harmattan/libqt4-sql.lintian create mode 100644 config.profiles/harmattan/libqt4-svg-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-svg.install create mode 100644 config.profiles/harmattan/libqt4-svg.lintian create mode 100644 config.profiles/harmattan/libqt4-test-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-test.install create mode 100644 config.profiles/harmattan/libqt4-test.lintian create mode 100644 config.profiles/harmattan/libqt4-webkit.lintian create mode 100644 config.profiles/harmattan/libqt4-xml-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-xml.install create mode 100644 config.profiles/harmattan/libqt4-xml.lintian create mode 100644 config.profiles/harmattan/libqt4-xmlpatterns-dbg.lintian create mode 100644 config.profiles/harmattan/libqt4-xmlpatterns.install create mode 100644 config.profiles/harmattan/libqt4-xmlpatterns.lintian create mode 100644 config.profiles/harmattan/libqt4.lintian create mode 100644 config.profiles/harmattan/libqtcore4-dbg.lintian create mode 100644 config.profiles/harmattan/libqtcore4.install create mode 100644 config.profiles/harmattan/libqtcore4.lintian create mode 100644 config.profiles/harmattan/libqtgui4-dbg.lintian create mode 100644 config.profiles/harmattan/libqtgui4.install create mode 100644 config.profiles/harmattan/libqtgui4.lintian create mode 100644 config.profiles/harmattan/manpages/lrelease.1 create mode 100644 config.profiles/harmattan/manpages/lupdate.1 create mode 100644 config.profiles/harmattan/manpages/moc.1 create mode 100644 config.profiles/harmattan/manpages/qmake.1 create mode 100644 config.profiles/harmattan/manpages/qtconfig.1 create mode 100644 config.profiles/harmattan/manpages/uic.1 create mode 100644 config.profiles/harmattan/mkspecs/linux-g++-cross/qmake.conf create mode 100644 config.profiles/harmattan/mkspecs/linux-g++-cross/qplatformdefs.h create mode 100644 config.profiles/harmattan/not-installed create mode 100644 config.profiles/harmattan/patches/default_widget_size.diff create mode 100644 config.profiles/harmattan/patches/glshadercache.diff create mode 100644 config.profiles/harmattan/patches/icu.diff create mode 100644 config.profiles/harmattan/patches/no_read_pro_from_quilt_dir.diff create mode 100644 config.profiles/harmattan/patches/pinch_gesture_sent_twice.diff create mode 100644 config.profiles/harmattan/patches/qgltexturecache.diff create mode 100644 config.profiles/harmattan/patches/qwidget_x11.diff create mode 100644 config.profiles/harmattan/patches/qwidget_x11_mapping.diff create mode 100644 config.profiles/harmattan/patches/runtime-window-geometry-revert.diff create mode 100644 config.profiles/harmattan/patches/series create mode 100644 config.profiles/harmattan/patches/signon_authenticator4.diff create mode 100644 config.profiles/harmattan/patches/temppath.diff create mode 100644 config.profiles/harmattan/patches/tst_qprogressbar.diff create mode 100644 config.profiles/harmattan/patches/tst_qscrollbar.diff create mode 100644 config.profiles/harmattan/patches/tst_qvariant.diff create mode 100644 config.profiles/harmattan/qt4-acceptance-tests.lintian create mode 100644 config.profiles/harmattan/qt4-declarative-qmlviewer.install create mode 100644 config.profiles/harmattan/qt4-declarative-qmlviewer.lintian create mode 100644 config.profiles/harmattan/qt4-doc-html.doc-base create mode 100644 config.profiles/harmattan/qt4-doc-html.install create mode 100644 config.profiles/harmattan/qt4-doc-html.links create mode 100644 config.profiles/harmattan/qt4-doc.install create mode 100644 config.profiles/harmattan/qt4-linguist-tools.install create mode 100644 config.profiles/harmattan/qt4-linguist-tools.lintian create mode 100644 config.profiles/harmattan/qt4-linguist-tools.postinst create mode 100644 config.profiles/harmattan/qt4-linguist-tools.prerm create mode 100644 config.profiles/harmattan/qt4-maemo-auto-tests.lintian create mode 100644 config.profiles/harmattan/readdir-hppa-test.c create mode 100755 config.profiles/harmattan/rules create mode 100644 config.profiles/harmattan/source.lintian-overrides create mode 100644 config.profiles/harmattan/source/format create mode 100755 config.profiles/harmattan/tests/create_tests_xml create mode 100644 config.profiles/harmattan/tests/libqt4-gui-tests.pro create mode 100644 config.profiles/harmattan/tests/maemo_tests.prf create mode 100644 config.profiles/harmattan/tests/qt4-acceptance-tests.pro create mode 100644 config.profiles/harmattan/tests/qt4-maemo-auto-tests.pro create mode 100644 config.profiles/harmattan/tests/tests.xml create mode 100644 config.profiles/harmattan/tests/testset.txt create mode 100644 config.profiles/harmattan/tests/testsuite_footer.txt create mode 100644 config.profiles/harmattan/tests/testsuite_header.txt diff --git a/config.profiles/harmattan/QMLViewer.desktop b/config.profiles/harmattan/QMLViewer.desktop new file mode 100644 index 0000000..0f96731 --- /dev/null +++ b/config.profiles/harmattan/QMLViewer.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Name=QMLViewer +Exec=/usr/bin/qmlviewer -graphicssystem meego +Icon=/usr/share/icons/hicolor/64x64/apps/QMLViewer.png +Categories=X-MeeGo; +OnlyShowIn=X-MeeGo; diff --git a/config.profiles/harmattan/QMLViewer.png b/config.profiles/harmattan/QMLViewer.png new file mode 100644 index 0000000..a209cd0 Binary files /dev/null and b/config.profiles/harmattan/QMLViewer.png differ diff --git a/config.profiles/harmattan/README.source b/config.profiles/harmattan/README.source new file mode 100644 index 0000000..5dde0bf --- /dev/null +++ b/config.profiles/harmattan/README.source @@ -0,0 +1,58 @@ +This package uses quilt to manage all modifications to the upstream +source. Changes are stored in the source package as diffs in +debian/patches and applied during the build. + +To configure quilt to use debian/patches instead of patches, you want +either to export QUILT_PATCHES=debian/patches in your environment +or use this snippet in your ~/.quiltrc: + + for where in ./ ../ ../../ ../../../ ../../../../ ../../../../../; do + if [ -e ${where}debian/rules -a -d ${where}debian/patches ]; then + export QUILT_PATCHES=debian/patches + break + fi + done + +To get the fully patched source after unpacking the source package, cd to +the root level of the source package and run: + + quilt push -a + +The last patch listed in debian/patches/series will become the current +patch. + +To add a new set of changes, first run quilt push -a, and then run: + + quilt new + +where is a descriptive name for the patch, used as the filename in +debian/patches. Then, for every file that will be modified by this patch, +run: + + quilt add + +before editing those files. You must tell quilt with quilt add what files +will be part of the patch before making changes or quilt will not work +properly. After editing the files, run: + + quilt refresh + +to save the results as a patch. + +Alternately, if you already have an external patch and you just want to +add it to the build system, run quilt push -a and then: + + quilt import -P /path/to/patch + quilt push -a + +(add -p 0 to quilt import if needed). as above is the filename to +use in debian/patches. The last quilt push -a will apply the patch to +make sure it works properly. + +To remove an existing patch from the list of patches that will be applied, +run: + + quilt delete + +You may need to run quilt pop -a to unapply patches first before running +this command. diff --git a/config.profiles/harmattan/api b/config.profiles/harmattan/api new file mode 100644 index 0000000..43ede3d --- /dev/null +++ b/config.profiles/harmattan/api @@ -0,0 +1,120 @@ +interface: Phonon +type: library +libs-pkg: libqt4-phonon +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/phonon/* + +interface: QtCore +type: library +libs-pkg: libqtcore4 +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtCore/* + +interface: QtDBus +type: library +libs-pkg: libqt4-dbus +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtDBus/* + +interface: QtDeclarative +type: library +libs-pkg: libqt4-declarative +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtDeclarative/* + +interface: QtGui +type: library +libs-pkg: libqtgui4 +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtGui/* + +interface: QtHelp +type: library +libs-pkg: libqt4-help +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtHelp/* + +interface: QtMultimedia +type: library +libs-pkg: libqt4-multimedia +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtMultimedia/* + +interface: QtNetwork +type: library +libs-pkg: libqt4-network +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtNetwork/* + +interface: QtOpenGL +type: library +libs-pkg: libqt4-opengl +dev-pkg: libqt4-dev libqt4-opengl-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtOpenGL/* + +interface: QtScript +type: library +libs-pkg: libqt4-script +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtScript/* + +interface: QtSql +type: library +libs-pkg: libqt4-sql-sqlite libqt4-sql +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtSql/* + +interface: QtSvg +type: library +libs-pkg: libqt4-svg +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtSvg/* + +interface: QtTest +type: library +libs-pkg: libqt4-test +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtTest/* + +interface: QtXml +type: library +libs-pkg: libqt4-xml +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtXml/* + +interface: QtXmlPatterns +type: library +libs-pkg: libqt4-xmlpatterns +dev-pkg: libqt4-dev +state: stable +scope: Nokia MeeGo +headers: /usr/include/qt4/QtXmlPatterns/* + diff --git a/config.profiles/harmattan/changelog b/config.profiles/harmattan/changelog new file mode 100644 index 0000000..b04d788 --- /dev/null +++ b/config.profiles/harmattan/changelog @@ -0,0 +1,2039 @@ +qt4-x11 (4.7.2~git20110302-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#226454 - QDeclarativeTextInput::mousePressEvent() doesn't + call QInputContext::mouseHandler() + * Fixes: NB#220280 - QImage forever loops on SVG + * Fixes: NB#222060 - PIN UI freezes if "Continue offline" dialog is + shown before PIN query + * Fixes: NB#230591 - Regression from QFuture change + + -- Petri Latvala Wed, 02 Mar 2011 12:06:31 +0200 + +qt4-x11 (4.7.2~git20110221-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#227660 - QFuture uses internally QTime, instead of + QElapsedTimer + * Fixes: NB#226474 - imMicroFocus query on QML TextInput returns the + start of preedit instead of cursor position + * Fixes: NB#208927 - X dithering looks better than meego + graphicssystem one + * Fixes: NB#224327 - Malformed windows icons cause out of bounds + writes + * Fixes: NB#224413 - XPM files crash QImage (write) + + -- Petri Latvala Mon, 21 Feb 2011 14:15:37 +0200 + +qt4-x11 (4.7.2~git20110215-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#224314 - malformed bmp's cause QImage to write out of + bounds + * Fixes: NB#225732 - QGraphicsItem::ItemStopsClickFocusPropagation + doesn't stop propagation + * Fixes: NB#221924 - Morpheus crashes when network connection is lost + * Fixes: NB#218317 - All capital "i" in turkish is wrong inside of + buttons. + + -- Petri Latvala Thu, 17 Feb 2011 11:50:12 +0200 + +qt4-x11 (4.7.2~git20110208-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#217912 - Deadlock after changes in qprocess_unix + * Fixes: NB#217850 - floating point compiler optimization has no + effect + * Fixes: NB#226130 - QtQuick 1.1 integration + * Fixes: NB#226478 - TextEdit and TextInput need text selection modes + * Fixes: NB#226484 - TextInput selectWord() on word's first letter + often selects two words + + -- Petri Latvala Wed, 09 Feb 2011 15:54:33 +0200 + +qt4-x11 (4.7.2~git20110203-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#215586 - Qt make unnecessary X calls on each mouse move + event QETWidget::translateXI2Event + * Fixes: NB#210752 - Text in QML application disappears after + application is restored from task switcher + * Fixes: NB#221806 - Subsequent signal networkAccessibleChanged + emitting problem of class QNetworkAccessManager + * Fixes: NB#218404 - Memory leaks in qx11embed_x11.cpp + * Fixes: NB#218410 - Fix error case in getNetWmState() in + qwidget_x11.cpp + * Fixes: NB#225875 - Integrate + 1137379e98cab8cc67fac70b31c97001c4473eb0 + + -- Petri Latvala Tue, 08 Feb 2011 10:13:03 +0200 + +qt4-x11 (4.7.2~git20110119-0maemo2) unstable; urgency=low + + * Fixes: NB#221230 - libqt4-meegographicssystemhelper needs to depend + on libqt4-meegographicssystem instead of recommends + + -- Petri Latvala Mon, 24 Jan 2011 10:08:26 +0200 + +qt4-x11 (4.7.2~git20110119-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#212758 - creating a QPixmap triggers creation of the + qt_gl_share_widget + * Fixes: NB#219685 - QSystemSemaphore and QSharedMemory are influenced + by TMPDIR + * Fixes: NB#188780 - Items in larger layout are not centered + * Fixes: NB#218317 - All capital "i" in turkish is wrong inside of + buttons. + * Fixes: NB#216667 - libqt4-meego-dev is not available for i386 at all + * Fixes: NB#214064 - Latest focus changes break some platform + components + + -- Petri Latvala Wed, 19 Jan 2011 17:06:16 +0200 + +qt4-x11 (4.7.2~git20110111-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#205680 - meego graphicssystem clears scene even if + Qt::WA_OpaquePaintEvent is set + * Fixes: NB#215368 - QMeeGoSwitchEvent's eventNumber() is not static + and the class is not exported + * Fixes: NB#211573 - Qt not configured with -dbus-linked + * Fixes: NB#211951 - Qt unnecessary build dependency to libxcursor-dev + * Fixes: NB#214064 - Latest focus changes break some platform + components + * Fixes: NB#216968 - QHostInfoCache should use QElapsedTimer instead + of QTime + + -- Petri Latvala Wed, 12 Jan 2011 12:23:50 +0200 + +qt4-x11 (4.7.2~git20101231-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#213183 - Ensure two Qt raster fixes are released. + * Fixes: NB#215639 - Need to repopulate texture glyph cache after + recreating GL context + * Fixes: NB#212887 - would be possible to open these descriptors on- + demand + * Fixes: NB#195919 - Check whether shader compilation can be improved + * Fixes: NB#195442 - OpenGL paint engine produces artifacts with big + images + * Fixes: NB#186988 - opengl render Chinese text: fast change text, + text become black block. + + -- Petri Latvala Mon, 03 Jan 2011 13:50:51 +0200 + +qt4-x11 (4.7.2~git20101209-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#205593 - Any app using meegotouch prints to console when started + * Fixes: NB#206111 - Sometimes MLabels apppear empty even if the text is set + * Fixes: NB#208617 - QtProxyFactory does not return correct (any) proxy data + * Fixes: NB#209473 - qgraphicslayoutitem.cpp:143 + * Fixes: NB#209863 - Qt tries to use id of a destroyed window + * Fixes: NB#210024 - MGS should provide translucency on a per-window basis + * Fixes: NB#210594 - Integration of focus change fixes + * Fixes: NB#210599 - QDeclarativeEngine object ownership issues + * Fixes: NB#210416 - Framerate in portrait is significantly lower than + in landscape + * Fixes: NB#199755 - Network session error when attempting to open + network session + * Fixes: NB#201619 - Synchronization is stuck in the progress + indicator screen when the internet is interrupted while sync + * Fixes: NB#209996 - Backup options view:Text inside the text box not + displayed properly in potrait mode + * Fixes: NB#194987 - Not all the synced contacts with S60 (N97 mini) + have an avatar + * Fixes: NB#206740 - Event handling in x11EventSourceDispatch is slow + * Fixes: NB#207115 - Qt calls eglSwapBuffers when no painting happened + * Fixes: NB#206119 - QSizePolicy causes the performance slow down + + -- Petri Latvala Thu, 16 Dec 2010 12:22:45 +0200 + +qt4-x11 (4.7.2~git20101130-0maemo6) unstable; urgency=low + + * Fixes: NB#198573 - Need for Signals from Qt indicating aboutToSwich and swiched state + * Fixes: NB#194509 - Network access from a Qt app makes dbus daemon consume tons of cpu + * Fixes: NB#165283 - artificial emboldening doesn't work + + -- Petri Latvala Tue, 07 Dec 2010 15:31:57 +0200 + +qt4-x11 (4.7.2~git20101130-0maemo4) unstable; urgency=low + + * Fixes: NB#205453 - Qt Update cause blocker performance drop in browser. + + -- Petri Latvala Fri, 10 Dec 2010 13:21:07 +0200 + +qt4-x11 (4.7.1~git20101130.really.4.7.1~git20101118-0maemo3) unstable; urgency=low + + * Revert to previous release. + + -- Petri Latvala Fri, 03 Dec 2010 11:24:03 +0200 + +qt4-x11 (4.7.1~git20101118-0maemo2) unstable; urgency=low + + * Proper workaround for bug 196954. + + -- Petri Latvala Mon, 29 Nov 2010 14:05:44 +0200 + +qt4-x11 (4.7.1~git20101118-0maemo1) unstable; urgency=low + + * Pull from upstream + * Enable using OpenGL scissor test + * Fixes: NB#188174 - The effect of filling massive amount of html
elements with color ... + * Fixes: NB#194032 - Gallery crashed random while slideshow is going on + * Fixes: NB#193247 - Slider widget crashes WG in a given scenario + * Fixes: NB#199790 - Qt sends touch point update event too late on release. + * Fixes: NB#200091 - Random crashes observed when trying to paste value + * Fixes: NB#163620 - QtTest headers prevent compilation with -Wshadow -Werror + * Fixes: NB#189468 - Invalid read reported by valgrind in libX11 when analysing accounts-ui application + * Fixes: NB#191811 - Invalid read frequently reported in scratchbox + * Fixes: NB#193881 - Image format autodetection causes unnecessary lseeks + * Fixes: NB#198023 - GLib >= 2.22 requires use of g_main_context_push_thread_default in QEventDispatcher when a QThread is created + * Fixes: NB#202866 - MeeGo graphicssystem dithering for textures with alpha channel looks crappy + * Fixes: NB#204234 - obsolete driver work-around + * Fixes: NB#204890 - device lock prompt keeps reappearing + * Fixes: NB#194345 - CoreWeb: 950 coredumps with stacktrace ending in QGestureManager::deliverEvents() + * Fixes: NB#204098 - qstrtod does not reset errno + * Fixes: NB#161439 - Using optimizations causes trouble + * Fixes: NB#186988 - opengl render Chinese text: fast change text, text become black block + * Fixes: NB#193505 - after maximizing applications fonts are sometimes corrupted + * Fixes: 204443 - Pinch gesture semantics change + + -- Petri Latvala Mon, 22 Nov 2010 12:05:12 +0200 + +qt4-x11 (4.7.1~git20101111.really.4.7.1~git20101103-0maemo2) unstable; urgen + + * Revert to previous released version + + -- Petri Latvala Fri, 19 Nov 2010 10:50:40 + + +qt4-x11 (4.7.1~git20101103-0maemo1) unstable; urgency=low + + * Pull from upstream + * Provide menu link and icon for QMLViewer + * Remove backported QScroller patch, it is to be used externally + * Fixes: NB#196806 - Memory leak in feednamespacepluginmanager.cpp + * Fixes: NB#164431 - Blocking dialog doesn't work correctly + * Fixes: NB#170001 - QTouchEvent::touchpoint's isPrimary -method returns always false + * Fixes: NB#191116 - Memory leak reported by valgrind on device, in XIQueryPointer.c + * Fixes: NB#198833 - Qt forgets to initialize members of QSharedPointer and its helpers + * Fixes: NB#200433 - cannot compile QMeeGoLivePixmap::livePixmapWithSize + + -- Petri Latvala Thu, 04 Nov 2010 12:14:46 +0200 + +qt4-x11 (4.7.1~git20101021-0maemo1) unstable; urgency=low + + * Pull from upstream + * Previous problem with the experimental client decorations are + * now fixed, enable them again. + * Fixes: NB#195540 - libqt4-doc has extra tags + * Fixes: NB#198766 - MeeGo graphicssystem does not create proper deep copies of QPixmaps + * Fixes: NB#194397 - /usr/lib/qt4/imports/Qt/labs/ missing from packages + + -- Petri Latvala Thu, 21 Oct 2010 16:01:33 +0300 + +qt4-x11 (4.7.1~git20101008-0maemo2) unstable; urgency=low + + * Disable experimental client decorations again + * Fixes: NB#196543 - libQtMeeGoGraphicsSystemHelper not shipped with latest packages + * Fixes: NB#196712 - SVG and PNG data URIs don't work in offline mode + * Fixes: NB#197530 - Missing menu items from ui-file + + -- Petri Latvala Fri, 15 Oct 2010 11:49:02 +0300 + +qt4-x11 (4.7.1~git20101008-0maemo1) unstable; urgency=low + + * Pull from upstream + * Backport QScroller from 4.8 + * Fixes: NB#184580 - QGraphicsItem::setCacheMode(DeviceCoordinateCache) unefficient in portrait mode + * Fixes: NB#191792 - QML: clickable items in GridView intermittently unresponsive on B2 hardware + * Fixes: NB#189797 - Qt build-depends circular dependency + * Fixes: NB#183846 - VKB adds and accumulates _NET_WM_STATE atoms when ever it's shown + * Fixes: 192385 - QML: runtime.orientation doesn't change when device orientation changes + * Fixes: NB#197181 - host binaries in libqt4-dev do not work in x86 target + + -- Petri Latvala Fri, 08 Oct 2010 14:14:42 +0300 + +qt4-x11 (4.7.1~git20101001-0maemo1) unstable; urgency=low + + * Pull from upstream + * Cross-compile Qt and install both host and native binaries + * of build tools + * Enable experimental client decorations + * Fixes: NB#191476 - Wrong reordering of Bidi Text in Labels + * Fixes: NB#186087 - QGraphicsItem never gets focusOutEvent on hide + * Fixes: NB#186988 - opengl render Chinese text: fast change text, text become black block + * Fixes: NB#189686 - connecting to dbus slows down MApplication c'tor creation by ~80ms + * Fixes: NB#188145 - Network interface doesn't go down after last client disconnects + * Fixes: NB#189001 - Qt4.7 bearer management icd plugin uses embedded libconninet + + -- Petri Latvala Fri, 01 Oct 2010 12:44:54 +0300 + +qt4-x11 (4.7.0~git20100917-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#187981 - Device hangs up when region is set to Arabic language. + * Fixes: NB#163798 - QRasterPaintEnginePrivate::drawImage using memcpy instead of ARM optimized implementation + * Fixes: NB#187851 - Font rendering issues with Nokia font + * Fixes: NB#190817 - libqt4-doc has extra
and tags + * Fixes: NB#191880 - QPixmap::size() should return 0x0 when there is no data + * Fixes: NB#193700 - Pinching in calendar weekly view regression + + -- Petri Latvala Tue, 21 Sep 2010 10:48:49 +0300 + +qt4-x11 (4.7.0~git20100827-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#189487 - qt4-x11 fails to build due to problems with opening data base file doc/qch/qt.qch + * Fixes: NB#174335 - Pinch gesture events are sent twice to application + * Fixes: NB#175685 - QTextDocument setTextDirection without QStaticText is not obeyed in Qt 4.7 + * Fixes: NB#185563 - QTouchEvents are not correctly delivered to widgets + + -- Bojan Radakovic Mon, 06 Sep 2010 16:48:24 +0300 + +qt4-x11 (4.7.0~git20100823-0maemo2) unstable; urgency=low + + * Fixes: NB#178358 - Qt doc package missing + * Stop building QtWebKit library from Qt source tree. QtWebKit will + * be delivered as an independent package. + + -- Bojan Radakovic Tue, 31 Aug 2010 10:10:15 +0300 + +qt4-x11 (4.7.0~git20100823-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#178358 - Qt doc package missing + * Fixes: NB#183896 - QAuthenticator need to be patched to enable signon usage for authentication + * Fixes: NB#176070 - QNetworkAccessManager can't be used in QThreads + * Fixes: NB#176651 - Height for Width in QGraphicsLayout + * Fixes: NB#174429 - Qt source packages are missing API files + + -- Stefano Pironato Tue, 24 Aug 2010 14:11:00 +0300 + +qt4-x11 (4.7.0~git20100811-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#165683 - QGraphicsGridLayout::setColumnSpacing is used even after item has been removed + * Fixes: NB#172554 - POP: Random fenix crash @ "QAbstractSocket::writeData" when move to option selected + * Fixes: NB#175618 - qDrawBorderPixmap is not executing correctly when borders are too thick + * Fixes: NB#176643 - Segmentation fault occurs while using networking + * Fixes: NB#180034 - we need QTBUG-11213 fixed in Harmattan - QUuid::createUuid() is not random at all + * Fixes: NB#182005 - Unable to build libmcontentwidgets package with libqt4 4.7.0~git20100716-0maemo1+0m6 + + -- Bojan Radakovic Wed, 11 Aug 2010 11:03:15 +0200 + +qt4-x11 (4.7.0~git20100716-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#176070 - QNetworkAccessManager can't be used in QThreads + * Fixes: NB#180047 - Call UI gets shrunken while calling any number + * Fixes: NB#174856 - QNetworkAccessManager broken in 4.7.0~git20100609-0maemo1+0m6 + * Fixes: NB#179240 - QFile::read does not advance the stream + * Fixes: NB#173119 - Bidirectional Text Rendering in Arabic language is broken with Latin characters + * Fixes: NB#161897 - DuiInfoBanner's setBodyText ignores
tag + * Fixes: NB#177478 - QAuthenticator should have property map + + -- Janne Hamalainen Thu, 22 Jul 2010 11:19:09 +0200 + +qt4-x11 (4.7.0~git20100704-0maemo1) unstable; urgency=low + + * Fixes: NB#172773 - celluid process is causing the wakeups in idle mode + * Fixes: NB#175064 - QNetworkSession signals wrong state after calling stop() + + -- Adrian Constantin Mon, 5 Jul 2010 14:39:09 +0200 + +qt4-x11 (4.7.0~git20100614-0maemo2) unstable; urgency=low + + * Fixes: NB#167514 - [browser-blocker] Multitouch events don't work if application is launched during device start-up + * Fixes: NB#175383 - qt4-acceptance-tests fail during ART Execution + + -- Adrian Constantin Mon, 5 Jul 2010 14:39:09 +0200 + +qt4-x11 (4.7.0~git20100614-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#172906 - Majority of applications crashing on exit + * Fixes: NB#173866 - Data added to HTML5 database doesn't get flushed/persisted to database + * Fixes: NB#173250 - QGLContext can create end up creating a QWidget during the QApplication destructor, leading to crash + + -- Adrian Constantin Tue, 15 Jun 2010 11:14:33 +0200 + +qt4-x11 (4.7.0~git20100609-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#170006 - Qt 4.7 singleShot timer calls function immediately instead of at the next event loop + * Fixes: NB#167058 - TapGesture not working + * Fixes: NB#173089 - The Qt 4.7 does not compile icd bearermanagement network plugin + * Fixes: NB#172749 - If grabGesture() called QGraphicsWidget will crash in deletion + * Fixes: NB#155179 - (QTBUG-9707) qpainter->drawTiledPixmap cause slow call of QX11PixmapData::toImage. + + -- Bojan Radakovic Thu, 10 Jun 2010 16:46:15 +0200 + +qt4-x11 (4.6.3~git20100602.0.4.7-0maemo1) unstable; urgency=low + + * Release Qt 4.7. The version still keeps the 4.6.3 package version, + * in order to allow for emergency rollback to Qt 4.6. + * Fixes: NB#161556 - [METABUG] Integrate Qt 4.7 into Harmattan + * Fixes: NB#151100 - (QT-2948) The Qt Reg-Exp engine sometimes gives false positive empty match + * Fixes: NB#157450 - Frequent use of QTime in animation related routines causes bad performance + * Fixes: NB#156908 - Qt's QTime::currentTime is slow + * Fixes: NB#166193 - MDialog crashes with ~40% likelihood + * Fixes: NB#170944 - Gesture not delivered to a QGraphicsWidget, asserts inside Qt + + -- Adrian Constantin Wed, 4 Jun 2010 12:46:15 +0300 + +qt4-x11 (4.6.3~git20100521-0maemo2) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#169433 - when freeing a QQLWidget not all memory is actually freed + * Fixes: NB#165175 - a class inherited from QDBusInterface can't invoke a method + + -- Janne Hamalainen Tue, 25 May 2010 10:13:31 +0300 + +qt4-x11 (4.6.3~git20100514-0maemo2) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#164183 - Random gestureEvent crashes + + -- Bojan Radakovic Tue, 18 May 2010 12:57:30 +0300 + +qt4-x11 (4.6.3~git20100411-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#162327 unlocking the device causes a segfault in any app open in foreground + * Fixes: NB#163414 Crash when hiding VKB and keep finger on screen. + * Fixes: NB#160270 valgrind report shows memory leak for QImage::save() + + -- Bojan Radakovic Mon, 12 Apr 2010 13:51:00 +2000 + +qt4-x11 (4.6.3~git20100319-0maemo1) unstable; urgency=low + + * Pull from upstream + * Multi-touch support + * Fixes: NB#159993 Qt is freezing application for 2 seconds when calling showFullScreen + * Fixes: NB#155384 Make drawGlyphs API public + + -- Stefano Pironato Fri, 19 Mar 2010 15:31:00 +2000 + +qt4-x11 (4.6.3~git20100310-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#146992 Double tap doesn't get recognized in MAFW test gui + * Fixes: NB#134295 QDBusInterface::callWithCallback deadlocks if called from the callWithCallback error callback + + -- Bojan Radakovic Mon, 15 Mar 2010 12:34:26 +2000 + +qt4-x11 (4.6.3~git20100224-0maemo1) unstable; urgency=low + + * Pull from upstream + * Remove Qt3Support + * Add lconvert + * Fixes: NB#154800 Using -opensource configuration in maemo6 + * Fixes: NB#158708 Googleplugin crashes while configuring google account + * Fixes: NB#158242 all unit tests for quillimagefilter-tests are core dumped + * Fixes: NB#157696 QDBusServiceWatcher watches only one service at a time + + -- Janne Hamalainen Wed, 24 Feb 2010 11:34:26 +2000 + +qt4-x11 (4.6.2~git20100205-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#142357 - (#QT-2307) Using QDBus::CallMode other than + * QDBus::Block produces invalid reply + * Fixes: NB#138587 - QGraphicsGridLayout row span feature is not working properly + * Fixes: NB#153726 - QtMultimedia module is not packaged + + -- Adrian Constantin Fri, 12 Feb 2010 12:20:26 +2000 + +qt4-x11 (4.6.1~git20091228.4-0maemo1) unstable; urgency=low + + * Turn off the HW multi-touch implementation using kernel device API. + * Removed Qt Assistant and Designer packages. + * Fixes: NB#148497 - Devel package missing requires for some libraries + * Fixes: NB#151088 - Packaging of the Qt4.6 developer tools + + -- Adrian Constantin Thu, 14 Jan 2010 12:43:37 +2000 + +qt4-x11 (4.6.1~git20091228.2-0maemo1) unstable; urgency=low + + * Fixes: NB#144690 - Please cherrypick ConsumeEventHint patch (Gesture) + * Fixes: NB#143903 - Application not working in none gui mode -> The KDE libs cannot be installed. + * Fixes: NB#143427 - Qt 4.6 - lrelease does not accept empty + * Fixes: NB#147283 - All DUI application crash in scratchbox + * Fixes: NB#147461 - QVariant::isNull() == true after QVariant::setValue() + * Fixes: NB#149547 - With latest Qt 20091127 Clock application is closing on setting alarm operation + * Fixes: NB#117725 - sb2 cannot build camera-ui + * Fixes: NB#148359 - webkit traverse fixture links against phonon but it is not in package dependencies + * Fixes: NB#148082 - Performance of the graphics view drops when text element is rotated + * Fixes: NB#142507 - QTimeLine's signals are not sent while an object is being dragged with mouseMoveEvent() + * Fixes: NB#147744 - Translucent QGLWidgets no longer works + * Fixes: NB#150790 - QWebKit based application crashes when executing SunSpider + * Fixes: NB#150808 - Loading a web page from network to qwebview fails on columbus + + -- Stefano Pironato Tue, 05 Jan 2010 11:10:00 +2000 + +qt4-x11 (4.6.0~git20091030.2-0maemo1) unstable; urgency=low + + * Fixes: NB#129594 - Qt compiled without compiler optimization + * The X org package does not support the MIT SHM extension anymore, + so the MIT SHM option is removed from Qt configuration also. + + -- Adrian Constantin Fri, 20 Nov 2009 16:59:11 +2000 + +qt4-x11 (4.6.0~git20091030-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#134295 - QDBusInterface::callWithCallback deadlocks if called from the callWithCallback error callback + * Fixes: NB#133005 - enabling accessibility while building Qt + * Fixes: NB#144501 - Application launcher does not start with the new Qt 4.6 versions + * Fixes: NB#129494 - Qt compiled without compiler optimization + + -- Adrian Constantin Fri, 30 Oct 2009 15:13:18 +1000 + +qt4-x11 (4.6.0~git20091012-0maemo1) unstable; urgency=low + + * Fixes: NB#141280 - libqt4-dev.postinst rules for Qt4.6 wrong + * Fixes: NB#133500 - libqt4-dev postinst is broken by update-alternatives from dpkg 1.15 + * Fixes: NB#142136 - Error in satisfying dependencies for qt4-x11 + + -- Stefano Pironato Thu, 12 Oct 2009 10:30:00 +0300 + +qt4-x11 (4.6.0~git20091008-0maemo1) unstable; urgency=low + + * Fixes NB#141891: - Compiling a library which uses QStateMachine doesn't work + * Modify rpath-link options to adapt to armel scratchbox environment + + -- Adrian Constantin Wed, 08 Oct 2009 11:18:37 +0300 + +qt4-x11 (4.6.0~git20091002-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#141550 - Error in qdatastream.h in libqt4-dev 4.6.0~git20091001-0maemo1+0m6 + * Fixes: NB#140293 - applet titles in applet library are not shown properly - added PATCH in qt changing glyph cache + * Fixes: NB#140727 - Enable multitouch support on device + * Fixes: NB#123012 - QPainter::drawTiledPixmap does not work properly with + non-power-of-two pixmaps when used in a DuiWidgetView + + -- Stefano Pironato Thu, 01 Oct 2009 15:08:32 +0300 + +qt4-x11 (4.6.0~git20090925-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#140735 - QtGui 4.6 should have dependency to EGL + * Fixes: NB#139269 - qmake CONFIG=debug does not add -g + + -- Adrian Constantin Fri, 25 Sep 2009 15:48:32 +0300 + +qt4-x11 (4.6.0~git20090911-0maemo1) unstable; urgency=low + + * Pull from upstream + * Fixes: NB#111282 - Homescreen rotation takes too long + * Fixes: NB#110604 - DuiLayouts using DuiFlowLayoutPolicy don't resize properly + * Fixes: NB#121054 - Items being not painted until update()/paint() explicitly called + + -- Adrian Constantin Fri, 11 Sep 2009 15:17:33 +0300 + +qt4-x11 (4.6.0~git20090909-0maemo1) unstable; urgency=low + + * Fixes: NB#137778 - qt macro causing build error when using -pedantic + * Fixes: NB#137775 - qt debian packaking installing a missing file + + -- Adrian Constantin Wed, 09 Aug 2009 15:52:51 +0300 + +qt4-x11 (4.6.0~git20090907-0maemo1) unstable; urgency=low + + * Pull from upstream. + * Fixes: NB#104827 - DuiLabel truncate arabic string and renders replaces the MEDIAL form character into FINAL on the point of truncation + + -- Shane Bradley Tue, 08 Aug 2009 15:17:24 +1000 + +qt4-x11 (4.6.0~git20090828-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Shane Bradley Mon, 24 Aug 2009 15:47:37 +1000 + +qt4-x11 (4.6.0~git20090824-0maemo1) unstable; urgency=low + + * Pull from upstream. + * Fixes: NB#127429 - QtOpenGL public header refers to non-existant qglshaderprogram.h + + -- Shane Bradley Mon, 24 Aug 2009 15:47:37 +1000 + +qt4-x11 (4.6.0~git20090820-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Shane Bradley Thu, 20 Aug 2009 16:16:14 +1000 + +qt4-x11 (4.6.0~git20090819-0maemo1) unstable; urgency=low + + * Pull from upstream. + * Fixes: NB#132164 - libqt4-webkit package is broken + + -- Shane Bradley Wed, 19 Aug 2009 15:32:21 +1000 + +qt4-x11 (4.6.0~git20090728-0maemo1) unstable; urgency=low + + * Pull from upstream. + * Fixes: NB#129594 - Qt compiled without compiler optimization + * Fixes: NB#127404 - Rendering errors with OpenGL in Qt 4.6 + + -- Shane Bradley Thu, 30 Jul 2009 14:02:24 +1000 + +qt4-x11 (4.6.0~git20090717-0maemo1) unstable; urgency=low + + * Fixes: NB#117929 - Qt mkspecs use -Wl,--rpath by default causing warnings in Debian packaging + + -- Shane Bradley Wed, 15 Jul 2009 10:32:20 +1000 + +qt4-x11 (4.6.0~git20090717-0maemo1) unstable; urgency=low + + * Pull from upstream + * Partial fix for 127404. + + -- Shane Bradley Wed, 15 Jul 2009 10:32:20 +1000 + +qt4-x11 (4.6.0~git20090706-0maemo1) unstable; urgency=low + + * Switch to using 4.6. + + -- Shane Bradley Wed, 07 Jul 2009 10:32:20 +1000 + +qt4-x11 (4.5.2~git20090701-0maemo1) unstable; urgency=low + + * Fixes: NB#122175 - Qt debugging symbols issues + * Pull from upstream. + + -- Shane Bradley Wed, 07 Jul 2009 10:32:20 +1000 + +qt4-x11 (4.5.2~git20090605-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Gareth Pethig Fri, 05 Jun 2009 19:46:34 +1000 + +qt4-x11 (4.5.2~git20090601-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Gareth Pethig Mon, 01 Jun 2009 17:01:23 +1000 + +qt4-x11 (4.5.2~git20090525-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Gareth Pethig Mon, 25 May 2009 15:30:34 +1000 + +qt4-x11 (4.5.2~git20090515-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Gareth Pethig Fri, 15 May 2009 20:01:16 +1000 + +qt4-x11 (4.5.2~git20090508-0maemo2) unstable; urgency=low + + * Changed control file as per Maemo patch. + + -- Gareth Pethig Mon, 11 May 2009 18:49:23 +1000 + +qt4-x11 (4.5.2~git20090508-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Gareth Pethig Fri, 08 May 2009 17:51:46 +1000 + +qt4-x11 (4.5.2~git20090506-0maemo1) unstable; urgency=low + + * Removed -lxcb-xlib referance from mkspec. + + -- Gareth Pethig Wed, 06 May 2009 19:01:22 +1000 + +qt4-x11 (4.5.2~git20090505-0maemo2) unstable; urgency=low + + * Removed old EGL config patch. + + -- Gareth Pethig Wed, 06 May 2009 14:42:35 +1000 + +qt4-x11 (4.5.2~git20090505-0maemo1) unstable; urgency=low + + * Pull from upstream. + * Added gles translucency patch + + -- Gareth Pethig Tue, 05 May 2009 21:32:21 +1000 + +qt4-x11 (4.5.2~git20090424-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Gareth Pethig Fri, 24 Apr 2009 18:32:37 +1000 + +qt4-x11 (4.5.1~git20090422-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Shane Bradley Wed, 22 Apr 2009 17:20:12 +1000 + +qt4-x11 (4.5.1~git20090417-0maemo1) unstable; urgency=low + + * Pull from upstream. + * Fixes: NB#110528 - int QTest::qExec() returns always 0... + + -- Gareth Pethig Fri, 17 Apr 2009 13:30:20 +1000 + +qt4-x11 (4.5.1~git20090403-0maemo1) unstable; urgency=low + + * Pull from upstream. + * Fixes: NB#109352 - libqt4-dev is missing libQtUiTools.a + + -- Shane Bradley Fri, 03 Apr 2009 17:04:40 +1000 + +qt4-x11 (4.5.1~git20090331-0maemo2) unstable; urgency=low + + * Move QtClucene from the core package to the help package. This is only + used by assistant. + + -- Shane Bradley Wed, 01 Apr 2009 16:44:52 +1000 + +qt4-x11 (4.5.1~git20090331-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Shane Bradley Tue, 31 Mar 2009 10:35:50 +1000 + +qt4-x11 (4.5.1~git20090326-0maemo1) unstable; urgency=low + + * Pull from upstream. + * Add qdoc3 binary to qt4-dev-tools package. + + -- Shane Bradley Thu, 26 Mar 2009 14:17:39 +1000 + +qt4-x11 (4.5.1~git20090324-0maemo1) unstable; urgency=low + + * Pull from upstream. + + -- Shane Bradley Tue, 24 Mar 2009 10:39:35 +1000 + +qt4-x11 (4.5.1~git20090317-0maemo1) unstable; urgency=low + + * Pull from upstream. + * Fixes: NB#105936 + + -- Shane Bradley Tue, 17 Mar 2009 14:15:30 +1000 + +qt4-x11 (4.5.1~git20090316-0maemo1) unstable; urgency=low + + * Pull from upstream. + * Fixes: NB#103601 + + -- Shane Bradley Mon, 16 Mar 2009 13:14:17 +1000 + +qt4-x11 (4.5.0-0maemo2) unstable; urgency=low + + * Fixes: NB#103953, NB#103601 + * Add additional dependencies for the phonon package. + + -- Shane Bradley Thu, 05 Mar 2009 16:53:23 +1000 + +qt4-x11 (4.5.0-0maemo1) unstable; urgency=low + + * Pull from upstream for 4.5.0 release. + * Fixes: NB#99812 + + -- Shane Bradley Thu, 27 Feb 2009 18:37:27 +1000 + +qt4-x11 (4.5.0~git20090219-0maemo1) unstable; urgency=low + + * Removed subversion files and disabled patches. + + -- Shane Bradley Thu, 19 Feb 2009 16:09:14 +1000 + +qt4-x11 (4.5.0~git20090219-maemo1) unstable; urgency=low + + * Migrated to new repository. + * Merged with upstream. + + -- Shane Bradley Thu, 19 Feb 2009 14:24:45 +1000 + +qt4-x11 (4.5.0~git20090212-maemo2) unstable; urgency=low + + * Removed include/Qt/qpixmapfilter.h from debian/libqt4-dev.install + + -- Mohammad Anwari Fri, 13 Feb 2009 09:50:33 +0200 + +qt4-x11 (4.5.0~git20090212-maemo1) unstable; urgency=low + + * Merged with upstream. + + -- Mohammad Anwari Thu, 12 Feb 2009 13:45:11 +0200 + +qt4-x11 (4.5.0~git20090122-maemo6) unstable; urgency=low + + * Added patch 102_egl_config.diff + + -- Mohammad Anwari Thu, 12 Feb 2009 12:53:25 +0200 + +qt4-x11 (4.5.0~git20090122-maemo5) unstable; urgency=low + + * Removed old Ubuntu patches + * Added patch 101_multiple-translation.diff to series file + + -- Tobias Koch Mon, 26 Jan 2009 18:48:50 +0200 + +qt4-x11 (4.5.0~git20090122-maemo4) unstable; urgency=low + + * Multiple translation variant patch was added + * Shader patch was removed + + -- Tobias Koch Mon, 26 Jan 2009 17:38:50 +0200 + +qt4-x11 (4.5.0~git20090122-maemo2) unstable; urgency=low + + * Removed configure switch -no-tablet + + -- Tobias Koch Thu, 22 Jan 2009 18:14:50 +0200 + +qt4-x11 (4.5.0~git20090122-maemo1) unstable; urgency=low + + * Merged from upstream + + -- Tobias Koch Thu, 22 Jan 2009 17:51:34 +0200 + +qt4-x11 (4.5.0~git20090108-maemo2) unstable; urgency=low + + * Fixes for lintian errors + * Fixes in install files + + -- Tobias Koch Thu, 15 Jan 2009 11:00:17 +0200 + +qt4-x11 (4.5.0~git20090108-maemo1) unstable; urgency=low + + * Merged from upstream + + -- Tobias Koch Thu, 08 Jan 2009 19:19:29 +0200 + +qt4-x11 (4.5.0~git20081217-maemo2) unstable; urgency=low + + * Debug packages available again + + -- Tobias Koch Wed, 07 Jan 2009 16:55:53 +0200 + +qt4-x11 (4.5.0~git20081217-maemo1) unstable; urgency=low + + * Quilt works again + * Merged from upstream + + -- Tobias Koch Tue, 17 Dec 2008 10:21:47 +0200 + +qt4-x11 (4.5.0~git20081216-maemo1) unstable; urgency=low + + * Applied patch 100_glconfig_shader.diff until I have + figured out, why quilt won't run. + + -- Tobias Koch Tue, 16 Dec 2008 12:51:47 +0200 + +qt4-x11 (4.5.0~git20081215-maemo1) unstable; urgency=low + + * added patch 100_glconfig_shader.diff submitted by : + * enable running Qt+GL in newer images of R***r + * solved the compilation of TextFragmentShader which failed because lacking of a precision of a vec4 + + -- Tobias Koch Mon, 15 Dec 2008 14:43:56 +0200 + +qt4-x11 (4.5.0~git20081209-maemo1) unstable; urgency=low + + * Merge with upstream + + -- Mohammad Anwari Tue, 09 Dec 2008 10:31:45 +0200 + +qt4-x11 (4.5.0~git20081202-maemo3) unstable; urgency=low + + * Removed libglu-dev from libqt4-opengl-dev + + -- Mohammad Anwari Fri, 05 Dec 2008 00:31:36 +0200 + +qt4-x11 (4.5.0~git20081202-maemo2) unstable; urgency=low + + * Split opengl packages + + -- Mohammad Anwari Tue, 02 Dec 2008 16:35:31 +0200 + +qt4-x11 (4.5.0~git20081202-maemo1) unstable; urgency=low + + * Pull from upstream + + -- Mohammad Anwari Tue, 02 Dec 2008 09:33:02 +0200 + +qt4-x11 (4.5.0~git20081129-maemo1) unstable; urgency=low + + * Copied to DUI's git + + -- Mohammad Anwari Sat, 29 Nov 2008 00:00:04 +0700 + +qt4-x11 (4.5.0-maemo1-11142008) unstable; urgency=low + + * pull from upstream + + -- Jani Mikkonen Fri, 14 Nov 2008 15:00:00 +0200 + + +qt4-x11 (4.5.0-maemo1) unstable; urgency=low + + * new upstream version with gles2 support + * removed nonfunctional patches + + -- Jani Mikkonen Tue, 11 Nov 2008 18:00:00 +0200 + +qt4-x11 (4.4.0-2maemo5) unstable; urgency=low + + * Enabled Exceptions + * Added QT3 support libraries + * Added xml-patterns + + -- Jani Mikkonen Tue, 28 Oct 2008 12:00:00 +0200 + +qt4-x11 (4.4.0-2maemo4) unstable; urgency=low + + * testing tag, minor changes + + -- Jani Mikkonen Tue, 9 Sep 2008 16:00:00 +0300 + +qt4-x11 (4.4.0-2maemo3) unstable; urgency=low + + * libreadline dependency, no opengl + + -- Arsi Antila Wed, 9 Jul 2008 15:36:34 +0300 + + +qt4-x11 (4.4.0-2maemo2) unstable; urgency=low + + * No interbase support for i386 + + -- Jussi Hakala Wed, 18 Jun 2008 11:59:27 +0300 + +qt4-x11 (4.4.0-2maemo1) unstable; urgency=low + + * Configuration for maemo environment + * Workarounds for find/delete inside sbox environment + * Adjusted the control file to behave with etch dpkg + + -- Jussi Hakala Thu, 12 Jun 2008 13:57:49 +0300 + +qt4-x11 (4.4.0-2) unstable; urgency=low + + +++ Changes by Fathi Boudra: + + * Split html documentation in qt4-doc-html package. + * Merge Ubuntu patches: + * Add lpia architecture in trusted dpkg-arch over uname. + * Add sqlite3 workaround in config tests fixes. + * Add qt-copy patch: + * 0227-qdatastream-regression + Fix a bug that causes all Qt3/2 applications to crash or hang under KDE4. + + +++ Changes by Modestas Vainius: + + * Add 16_qsortfilterproxymodel_invalidate_noscroll.diff patch which stops + scrolling to the current item/index on QSortFilterProxyModel::invalidate() + This patch has been scheduled for Qt 4.4.1 (TT #204403). + * Add missing Replaces: + - libqt4-opengl-dev replaces libqt4-dev (<< 4.4.0-2) due to obvious + reasons. + - libqt4-dev replaces libqt4-opengl-dev (<< 4.4.0-2) (due to qglobal.h + misplace). + + -- Debian Qt/KDE Maintainers Fri, 09 May 2008 23:35:16 +0300 + +qt4-x11 (4.4.0-1) unstable; urgency=low + + * New upstream release. + + +++ Changes by Modestas Vainius: + + * Split OpenGL headers from libqt4-dev to libqt4-opengl-dev: + - Update install files. + - Make libqt4-opengl-dev depend on X OpenGL headers, hence remove the + latter from libqt4-dev Recommends. + - Add libqt4-opengl-dev to libqt4-dev Recommends. + - Remove libq4-opengl from libqt4-dev Depends. + * Explicitly add libqtcore4 to libqt4-dev (was implicit before). + * Rename libqt4-gui to libqtgui4 (new package). + * Make libqt4-gui a transitional package (Closes: #478694) depending on + libqtgui4, libqt4-opengl (Closes: #478264), libqt4-sql, libqt4-designer, + libqt4-assistant. + * Use ${binary:Version} instead of ${source:Version} in dependencies of + libqt4-core and libqt4-gui transitional packages. + * Require just libqtcore4 to install libqt4-dbg instead of libqt4-gui. + * Resync patches: + - 05_append_qt4_target.diff - fix offsets. + - 11_qdbus_to_dbus_fix.diff - remove, merged upstream. + - Revert to "runtime" configuration for xcursor, xinerama, xfixes and drop + 16_always_init_qt_x11data_ptrx.diff patch. Fixed upstream. + + +++ Changes by Fathi Boudra: + + * Update libqt4-dev and libqt4-opengl-dev install to use complete files + list instead of wildcard. + * Update installed files: new qt help and assistant translations. + * Add qt-copy patch: + * 0226-qtreeview-column_resize_when_needed + This patch assures that if no header is shown, or if we only have one + column (so no other columns become shrinked), the contents will be + visible. + + -- Debian Qt/KDE Maintainers Tue, 06 May 2008 17:37:49 +0200 + +qt4-x11 (4.4.0~rc1-5) unstable; urgency=high + + +++ Changes by Fathi Boudra: + + * Add libqt4-sql-sqlite dependency to qt4-dev-tools. Qt Assistant and + qhelpgenerator use the sqlite plugin. (Closes: #476986) + * Remove qt-copy patches 0191 and 0192. The relevant code has changed + such that neither patch seems to have any effect (although listviews + still do not use active/inactive roles correctly). + * Add qt-copy patches: + * 0223-fix-qpixmap-hasalpha + Fix a performance regression in QPixmap::hasAlpha() in Qt 4.4. + * 0224-fast-qpixmap-fill + This patch avoids the expensive image->pixmap conversion by discarding + the old pixmap, creating a new one with the correct format, and doing + the fill server side. + * 0225-invalidate-tabbar-geometry-on-refresh + Fix problem where Konsole's tab bar is not shown immediately on startup. + + +++ Changes by Modestas Vainius: + + * Downgrade libqt4-dev *gl*-dev dependencies to Recommends. + They pull in half of X11 development headers and are rarely needed. + What's more, OpenGL apps will probably depend on them explicitly anyway. + * Add development packages of the SQL plugins to libqt4-dev Suggests. + * Make libqt4-sql recommend its plugins. Depends does not do us any good + because we don't know which plugin a user is going to use anyway. Moreover + installation of the libqt4-sql package does not necessarily imply usage of + the specific plugin(s). Finally, this resolves circular dependencies among + libqt4-sql and its plugins. + * Add myself to Uploaders. + * Add 16_always_init_qt_x11data_ptrx.diff, which ensures that X11->ptrX* + are properly initialized when Xcursor, Xinerama, Xfixes are not available + in default "runtime" configuration (Closes: #476608). + * Pass -xfixes -xcursor -xinerama to configure because default "runtime" + configuration requires a user to have libxfixes-dev, libxcursor-dev and + libxinerama-dev installed to enable features requires respective X + libraries (QLibrary simply searches for "lib*.so"). This change in + configuration makes 16 patch irrelevant for Debian, but I'm leaving it + as it's still the fix for the crashes which might occur on default Qt 4.4 + configutions. + * Optimize qmake: pass -optimized-qmake to configure. + + -- Debian Qt/KDE Maintainers Sun, 27 Apr 2008 04:15:28 +0300 + +qt4-x11 (4.4.0~rc1-4) unstable; urgency=low + + +++ Changes by Sune Vuorela: + + * Have libqt4-dev conflict/replace libqtwebkit-dev. + * Fix qmake to generate a bit better pkg-config files. Those should usually + not be generated - as it ends up being crackful. After a bit of patching + they are a bit less crackful though. (Closes: 457570) + * Postprocess prl files to remove the same crack as in the pc files. + (Closes: 470572) + * Do a bit nicer linking when needed instead of relying on crackfulness from + prl and pc files. + * Add a disabled patch to generate better prl files, but unfortunately too + much of qt4 build process relies on on it and is not yet fixed, but it is + saved for later use. + * Fix qmake makefile generation - should not add double slashes to + makefiles. + * Make libqt4-core transitional package arch:any. It doesn't bloat the + archive too much, but it helps on installability. + + +++ Changes by Matthew Rosewarne: + + * Add Recommends: qt4-doc to qt4-demos. + * Add watch file. + + -- Debian Qt/KDE Maintainers Tue, 15 Apr 2008 23:48:31 +0200 + +qt4-x11 (4.4.0~rc1-3) unstable; urgency=low + + +++ Changes by Sune Vuorela: + + * Clean up a bit in the dependencies of libqt4-dev. Removed dependencies: + libqt4-sql-mysql, libqt4-sql-odbc, libqt4-sql-psql, libqt4-sql-sqlite, + libqt4-sql-sqlite2, libqt4-sql-ibase, firebird2.0-dev, libaudio-dev, + libcupsys2-dev, libdbus-1-dev, libfreetype6-dev, libglib2.0-dev, + libice-dev, libiodbc2-dev, libjpeg62-dev, libmng-dev, libmysqlclient15-dev, + libpam0g-dev, libpng12-dev, libpq-dev, libreadline5-dev, libsm-dev, + libsqlite0-dev, libsqlite3-dev, libtiff4-dev, libx11-dev, libxcursor-dev, + libxext-dev, libxft-dev, libxi-dev, libxinerama-dev, libxmu-dev, + libxrandr-dev, libxrender-dev, libxslt1-dev, libxt-dev, x11proto-core-dev, + zlib1g-dev + + +++ Changes by Fathi Boudra: + + * Add libqt4-svg dependency to libqt4-gui. It helps for the transition as + libQtSvg.so.4 was previously in libqt4-gui package. (Closes: #475324) + * Replace libqcncodecs.so in libqt4-gui (<< 4.4.0~beta1-1). (Closes: #475340) + * Update 20_mips_atomic_ops patch. Qt4.4 introduced two new atomic operations + without the necessary assembler .set directives. + Thanks to Thiemo Seufer. (Closes: #475402) + + -- Fathi Boudra Sat, 12 Apr 2008 07:48:37 +0200 + +qt4-x11 (4.4.0~rc1-2) unstable; urgency=low + + * Add patch for Explicit template specialization cannot have a storage class + with gcc-4.3. Specializations of templates cannot explicitly specify + a storage class, and have the same storage as the primary template. + + -- Fathi Boudra Wed, 09 Apr 2008 09:40:00 +0200 + +qt4-x11 (4.4.0~rc1-1) unstable; urgency=low + + * New upstream release. (Closes: #469783) + + +++ Changes by Modestas Vainius: + + * Refresh qt-copy patches: + * 0167-fix-group-reading.diff - adjust offsets. + * 0180-window-role.diff - adjust offsets. + * 0195-compositing-properties.diff - adjust offsets. + * 0203-qtexthtmlparser-link-color.diff - adjust offsets. + * 0209-prevent-qt-mixing.diff - adjust offsets. + * 0214-fix-qgraphicsproxywidget-tab-crash.diff - adjust offsets. + * 0216-allow-isystem-for-headers.diff - adjust offsets. + * Remove qt-copy patches: + * 0172-prefer-xrandr-over-xinerama.diff - merged upstream. + * 0178-transparency-window-types.diff - merged upstream. + * 0215-compile-with-Xcursor-linkage.diff - merged upstream. + * 0217-qurl-isempty-regression.diff - merged upstream. + * 0218-qassert-macro-fix.diff - merged upstream. + * fix-qt_bootstrapped-typo.diff - merged upstream. + * Add qt-copy patches: + * 0220-no-x-recursion-in-xerrhandler.diff - adjust offsets. + * Refresh Debian patches: + * 02_launch_assistant-qt4.diff - adjust offsets. + * 05_append_qt4_target.diff - adopt to upstream changes. lrelease and + lupdate have been moved to tools/linguist/, adjust offsets. + * 50_kfreebsd_build_fix.diff - adjust offsets. + * 80_hurd_max_path.diff - adjust offsets. + * Remove Debian patches: + * 08_load_ssl.diff - different fix applied upstream. + * Update *.install files: + * qt4-dev-tools.install: a few renames of the language files, + s/assistant-qt3/assistant-qt4/, add usr/bin/xmlpatterns + * Add libqt4-core transitional package. (Closes: #473658) + * Add debian/not-installed to document files which are deliberately not + installed + * Avoid calling ./configure repeatedly during build/install: tie ./configure + to config.status + + +++ Changes by Fathi Boudra: + + * Re-introduce LD_LIBRARY_PATH workaround to use lrelease. + * Remove Conflicts against libqt4-core. + * Reorder libqt4-sql dependencies to have packages available on all + architectures listed first. (Closes: #473348) + * Add architectures availability list to libqt4-sql-ibase package. + (Closes: #473348) + * Add patch to fix unaligned access on hppa. Thanks to Bernhard R. Link. + (Closes: #458133) + * Add patch to replace remaining qdbus by dbus. Fix libqtscriptdbus build. + * Update configure options: + * Replace -qdbus by -dbus. + * Add -svg. + + +++ Changes by Matthew Rosewarne: + + * Rewrite clean rule to remove remaining build cruft. + + -- Debian Qt/KDE Maintainers Mon, 07 Apr 2008 01:36:54 -0400 + +qt4-x11 (4.4.0~beta1-1) experimental; urgency=low + + * New upstream release. + + * Add build dependencies: doxygen, firebird2.0-dev, libiodbc2-dev, + libpam0g-dev, libreadline5-dev, libxslt1-dev. + * Split libqt4-gui and libqt4-core packages. + * Create package for each Qt module. + * Enable all SQL drivers as plugins and add related packages: + libqt4-sql-ibase, libqt4-sql-mysql, libqt4-sql-odbc, libqt4-sql-psql, + libqt4-sql-sqlite, libqt4-sql-sqlite2. + * Add packages: libqt4-assistant, libqt4-dbus, libqt4-designer, libqt4-help, + libqt4-network, libqt4-opengl, libqt4-script, libqt4-svg, libqt4-test, + libqt4-webkit, libqt4-xml, libqt4-xmlpatterns and qt4-demos. + * Replace libqt4-core by libqtcore4 package. + * Rename libqt4-debug to libqt4-dbg like other debug packages in Debian. + * Update .lintian override files. + * Update .install files. + * Move translations files in their respective packages. + * Disable DEB_INSTALL_CHANGELOGS_ALL. + * Build ibase sql plugin on supported architectures only. + * Enable demos, examples, WebKit and XmlPatterns. + * Enable exceptions. It is a dependency to XmlPatterns module. + * Add qtdemo help collection file. + * Split WebKit and XmlPatterns debug packages from libqt4-dbg. + * Generate Doxygen tagfile in libqt4-dev. Thanks to Matthew Rosewarne. + * Examples and Demos are not shipped compressed anymore. + * Refresh qt-copy patches: + * 0167-fix-group-reading + * 0172-prefer-xrandr-over-xinerama + * 0178-transparency-window-types + * 0180-window-role + * 0191-listview-alternate-row-colors + * 0192-itemdelegate-palette-state + * 0195-compositing-properties + * 0203-qtexthtmlparser-link-color + * 0209-prevent-qt-mixing + * 0210-fix-crash-q3stylesheet-font-size + * Remove qt-copy patches: + * 0175-fix-s390-qatomic + * 0176-coverity-fixes + * 0179-transient-hack + * 0187-fix-font-fixed-pitch + * 0194-fix-moveonly-dnd-in-itemviews + * 0200-fix-qsslsocket-waitfor + * 0205-fast-qpixmap-fill + * 0211-q3action-crash + * Add qt-copy patches: + * 0214-fix-qgraphicsproxywidget-tab-crash + * 0215-compile-with-Xcursor-linkage + * 0216-allow-isystem-for-headers + * 0217-qurl-isempty-regression + * 0218-qassert-macro-fix + * fix-qt_bootstrapped-typo + * Refresh Debian patches: + * 01_qmake_for_debian + * 02_launch_assistant-qt4 + * 03_launch_moc-qt4 + * 04_launch_uic-qt4 + * 05_append_qt4_target + * 08_load_ssl + * 10_config_tests_fixes + * 40_alpha_ice + * 41_disable_opengl_visibility + * 50_kfreebsd_build_fix + * 60_m68k_inotify_fix + * 80_hurd_max_path + * Remove Debian patches: + * 06_qtdemo_destdir. Useless as we ship qtdemo again. + * 30_arm_ftbfs_fixes. Merged upstream. + * 31_arm_eabi_fix. Upstream changed arm architecture handling. + This patch doesn't apply as it is. + * 91_qmake_lflags_no-undefined. Merged upstream. + + -- Fathi Boudra Thu, 13 Mar 2008 22:34:45 +0100 + +qt4-x11 (4.3.4-2) unstable; urgency=low + + * Add patches: + * 09_qmake_lflags_as-needed + workaround as LDFLAGS isn't honored by configure script. + we set --as-needed flag for Qt build only. + * 10_config_tests_fixes.diff + configuration test fixes for Interbase/Firebird and ODBC sql drivers. + * Update 01_qmake_for_debian patch: + * re-introduce link_prl and drop QT_SHARED workaround. + * Update rules: + * Remove exported LDFLAGS. + * Remove DEB_CONFIGURE_SCRIPT_ENV. + * Exclude debug files from dh_shlibdeps using DEB_DH_SHLIBDEPS_ARGS_ALL. + * Update configure options to use libtiff from system. + * Remove debug configure option to build with -02. + * Update common-install-arch target to fix wrong path in pkconfig and prl files. + * Add libtiff4-dev build dependency. + * Update libqt4-dev dependencies. + + -- Fathi Boudra Sat, 08 Mar 2008 10:09:02 +0100 + +qt4-x11 (4.3.4-1) unstable; urgency=low + + * New upstream release: + * This version adds the GNU General Public License (GPL) version 3 + to all Qt Open Source editions. The GPL Exception version 1.1 + applies to both versions of the GPL license. + + * Add qt-copy patches: + * 0205-fast-qpixmap-fill + Fix a performance issue in QPixmap::fill() + * 0209-prevent-qt-mixing + This patch changes QObjectPrivateVersion, thus preventing mixing parts + of upstream Qt and qt-copy. + * 0210-fix-crash-q3stylesheet-font-size + This patch fixes crashs in q3stylesheet + (it was possible to use a qfont size < 1) + * 0211-q3action-crash + During porting qt3to4 port QGroupAction to Q3GroupAction but not QAction + to Q3Action (which is logical) But it crashs when it's not a q3action. + * Refresh and enable 0172-prefer-xrandr-over-xinerama patch. + * Remove 0204-fix-tulip-aliasing patch. Merged upstream. + * Remove 90_qmake_cxxflags_fpermissive patch. + * Add ${shlibs:Depends} to libqt4-dev. See missing shared library + dependencies thread on debian-devel mailing list. + * Add catalan translation. Thanks to Javier Serrano Polo. (Closes: #459822) + * Update copyright file. Add GPL version 3. + * Remove -fpermissive. + + -- Fathi Boudra Tue, 26 Feb 2008 18:38:27 +0100 + +qt4-x11 (4.3.3-2) unstable; urgency=low + + * Update 0203-qtexthtmlparser-link-color qt-copy patch: + Add qt-bugs@ issue and Trolltech task ID. + * Add 0204-fix-tulip-aliasing qt-copy patch: + Fix KDE4 RC2 crashing on startup due to Qt 4.3.3 update. + * Downgrade libqt4-dev dependency to qt4-dev-tools from Recommends to + Suggests. + * Add semicolon at the end of the MimeType key. Thanks to Pino Toscano. + * Remove 91_qmake_ldflags_as-needed patch: + It breaks other packages. (Closes: #457038, #457284) + * Add 91_qmake_lflags_no-undefined patch: + By default, qmake adds --no-undefined linker flag. + + -- Fathi Boudra Sun, 30 Dec 2007 23:29:09 +0100 + +qt4-x11 (4.3.3-1) unstable; urgency=low + + * New upstream release. + + [Adeodato Simó] + + * Do not depend or build-depend on the transitional package xlibmesa-gl-dev, + but on libgl1-mesa-dev instead. Ditto for libglu1-xorg-dev/libglu1-mesa-dev. + + [Fathi Boudra] + + * Bump Standards-Version to 3.7.3. + * Fix description contains homepage lintian warning. + * Merge Kubuntu load ssl patch. Thanks to Jonathan Riddell. + * Add CDDL exception to debian/copyright. + * Add 21_assume_no_fpu_for_embedded_devices patch. Thanks to Thiemo Seufer + and Bradley Hughes. Not Enabled yet: It breaks ABI on mips. + We will keep it for later (> 4.3.3-1). + * Add 91_qmake_ldflags_as-needed patch. Build with --as-needed linker flag. + * Remove qt-copy patches: + * 0163-fix-gcc43-support. + * 0185-fix-format-strings. + * 0188-fix-moc-parser-same-name-header. + * 0189-fix-q3toolbar-qcombobox-signal-slot. + * 0193-qtreeview-division-by-zero.diff. + * Add qt-copy patches: + * 0200-fix-qsslsocket-waitfor. + Fixes some QSslSocket::waitFor$X methods. + * 0203-qtexthtmlparser-link-color. + Links are assigned a foreground color according to the system current + color scheme. + + -- Fathi Boudra Thu, 06 Dec 2007 22:06:46 +0100 + +qt4-x11 (4.3.2-1) unstable; urgency=low + + * New upstream release. + + [Fathi Boudra] + * Update desktop files categories. + * Add desktop files icons. (Closes: #433581) + * Update patches to Qt4.3.2. + * Add 90_qmake_cxxflags_fpermissive patch. + * Remove 0186-fix-component-alpha-text patch. Merged upstream. + * Add qt-copy patches: + * 0188-fix-moc-parser-same-name-header + * 0189-fix-q3toolbar-qcombobox-signal-slot + * 0191-listview-alternate-row-colors + * 0192-itemdelegate-palette-state + * 0193-qtreeview-division-by-zero + * 0194-fix-moveonly-dnd-in-itemviews + * 0195-compositing-properties + * Update qt4-dev-tools long description. + * Update copyright: + * Update Trolltech GPL exception to v1.1. + * Add Trolltech GPL exception addenum. + * Update rules: + * Build with -fpermissive. + * Introduce QTVERSION. + * Fix qt4-config menu section. (Closes: 444896) + + [Sune Vuorela] + * Have strict interdependencies between packages with a shlibs.local file. + (Closes: #438746) + * Don't trust uname in generating the qt build key. This has bitten us in + qt3, but will soon bite us in qt4 as qt4 becomes more popular. + + [Ana Beatriz Guerrero Lopez] + * Add desktop files icons uuencoded and update rules to install them uudecoded. + * Add sharutils build dependency. + + -- Debian Qt/KDE Maintainers Sat, 06 Oct 2007 07:00:54 +0200 + +qt4-x11 (4.3.1-2) unstable; urgency=low + + * There is a large difference between 8 spaces and a tab. + + -- Sune Vuorela Fri, 10 Aug 2007 22:20:45 +0200 + +qt4-x11 (4.3.1-1) unstable; urgency=low + + * New upstream release. + + [Fathi Boudra] + * Switch to quilt patch system. + * Update copyright. Add Trolltech GPL Exception. + * Update section in Debian menu files. + * Update patches for Qt4.3.1. + * Remove 51_kfreebsd_mkspecs patch. Moved in rules. + * Add 0187-fix-font-fixed-pitch patch: + This patch works around broken QFontInfo::fixedPitch by always using a + glyph metrics comparison test to guess the information. This has the + property of both ignoring (bad) and not relying on (good) any information + that might be provided by the OS's font facility. For Mac OS X only. + * Remove patches merged upstream: + * 0177-qurl-clear-fix + * 0183-qprocess-corruption + * 42_alpha_fetch_and_add + * Disable: + * 0172-prefer-xrandr-over-xinerama patch. (Closes: #433931) + * 0181-qdnd-x11-fix patch. + + [Sune Vuorela] + * Add a quick and dirty test to make build on hppa fail if a current + getdents kernel bug is detected. + + -- Fathi Boudra Wed, 08 Aug 2007 15:08:11 +0200 + +qt4-x11 (4.3.0-5) unstable; urgency=low + + [Fathi Boudra] + * Update 01_qmake_for_debian patch. Add DEFINES += QT_SHARED in qmake.conf + along with the removal of link_prl. (Closes: #434019) + * Apply qt-copy patches: + * 00_0185-fix-format-strings: This patch fixes various code issues with + handling format strings. None of them seem to be exceptionally bad, + but its better safe than sorry. It is related to CVE-2007-3388. + TT claims the problem is not present in any version of Qt 4. Dirk Muller + disagrees and believes that some of them are possible to exploit. + * 00_0186-fix-component-alpha-text: This patch fixes component alpha + (LCD hinted) text when it's drawn on a non-opaque background. Qt doesn't + initialize the alpha channel in the glyph masks, which causes problems + in Konsole when transparency is enabled, and in other situations where + the background isn't fully opaque. + + -- Fathi Boudra Mon, 30 Jul 2007 21:36:25 +0200 + +qt4-x11 (4.3.0-4) unstable; urgency=low + + [Fathi Boudra] + * Add 42_alpha_fetch_and_add patch to fix broken threading on alpha, hangs + uselessly on startup. fetch-and-add is supposed to return the original + value before the addition. Thanks to Steve Langasek and Bradley Hughes. + (Closes: #433031) + * Update control: Replace ${source:Version} by ${binary:Version}. + Make the package binNMU safe. Thanks to Lior Kaplan. (Closes: #433548) + + -- Fathi Boudra Mon, 16 Jul 2007 21:32:01 +0200 + +qt4-x11 (4.3.0-3) unstable; urgency=low + + [Fathi Boudra] + * Update control: Replace deprecated ${Source-Version} by ${source:Version}. + * Update rules: + * Add bindir and libdir configure options. + * Replace common-install-arch target. Replaced by build system patches and + a fix for pkgconfig files. (Closes: #401807) + * Add patches: + * 04_launch_uic-qt4: call uic-qt4 binary. + * 05_append_qt4_target: append -qt4 when needed. It fixes moc-location and + uic_location are properly in pkgconfig files. (See bug #401807) + * 06_qtdemo_destdir: remove QT_BUILD_TREE in qtdemo DESTDIR target. + (Closes: #408639) + * Revert Qt handling argb visuals on X11 patch. There are dependencies + not fixed in Qt. They cause a few regressions when this patch is applied. + (Closes: #430907, #431436, #431943) + * Update Qt support for new window types used for compositing patch. + Fix crashes when 'w' is null. (Closes: #431322) + * Apply qt-copy patches: + * 00_0172-prefer-xrandr-over-xinerama: only trust libxinerama if it is not + the emulated information coming from xrandr 1.2. + * 00_0177-qurl-clear-fix: fix QUrl::clear(). Applied upstream. + * 00_0183-qprocess-corruption: fix plain data loss bug. Applied Upstream. + + -- Fathi Boudra Fri, 29 Jun 2007 08:15:23 +0200 + +qt4-x11 (4.3.0-2) unstable; urgency=low + + [Brian Nelson] + * Changed dist back to unstable. + * Tightened qt4-dev-tools's dependency on libqt4-core to + (= ${Source-Version}), since it uses internal (non-public) classes in + Qt whose ABI can change. (Closes: #429817) + * Added a build-dependency on libxi-dev to enable tablet support. + * Constrict the hack to clean all binary files to the bin, config.tests, + and qmake directories to drastically improve its speed + + [Fathi Boudra] + * Qt4 demos builds properly in Qt4.3. (Closes: #408639) + * Apply qt-copy patches: + * 00_0178-transparency-window-types: adds Qt support for new window types + used for compositing. + * 00_0179-transient-hack: workaround that makes setting of WM_TRANSIENT_FOR + work with some window types. + * 00_0180-window-role: several problems with Qt's support for the + WM_WINDOW_ROLE property. + * 00_0181-qdnd-x11-fix: makes the find_child algorithm in qdnd look at + _all_ widgets that contain the QPoint. + * 00_0182-argb-visuals-default: Qt handling argb visuals on X11. + + -- Brian Nelson Wed, 27 Jun 2007 00:02:07 -0400 + +qt4-x11 (4.3.0-1) experimental; urgency=low + + * New upstream release. + * Fixes a QListView issue. (Closes: #419654) + + * Update uploaders. Add Ana, Sune and Fathi. + + [Sune Vuorela] + * Remove 04_utf8_bug_fix: Merged upstream. + * Update libqt4-dev.install. Upstream installs pkgconfig files the right place. + * Update libqt4-core.install. Add libQtScript. + * Update rules: + * Add utils.mk to use list-missing. + * Cleaning seems to fail a bit. Trying to hack around that in clean:: + target. + + [Fathi Boudra] + * Redo 30_arm_ftbfs_fixes to fix another FTBFS. Add arm target to configure + script. Thanks to Sune Vuorela and Aurelien Jarno. (Closes: #426129) + * Remove 71_hppa_inotify_fix: Merged upstream. + * Update patches: + * 02_launch_assistant-qt4 + * 03_launch_moc-qt4 + * 50_kfreebsd_build_fix + * 80_hurd_max_path + * Apply qt-copy patches: + * 00_0163-fix-gcc43-support: Various fixes to get Qt 4.3 without hundreds + of warnings compiling. + * 00_0167-fix-group-reading: In big user environments, getgrgid_r() needs + more memory than sysconf() returns. + * 00_0175-fix-s390-qatomic: Fix s390(x) build. + * 00_0176-coverity-fixes: Fix various obvious memory leaks. + * Rename disable opengl visibility patch. It is not alpha architecture only. + * Add desktop files to support Desktop Environments. (Closes: #378915) + * Update qt4-dev-tools.install. Add qdbusviewer and pixeltool. + Thanks to Benjamin Meyer for the reminder. + * Update libqt4-dev.install. Remove qtdemo binary as we provide a tarball of the + demos directory. qtdemo is useless, it can't launch anything without demos + builded. It can only show screenshots and short description of demos, + users have it in Qt assistant. + * Update rules: + * Remove -debug-and-release option. Deprecated. + * Add configure options: + * -no-exceptions + * -debug + * -qdbus + * -pch + * -nomake examples + * -nomake demos + + -- Debian Qt/KDE Maintainers Sat, 09 Jun 2007 00:25:41 +0200 + +qt4-x11 (4.2.3-1) unstable; urgency=low + + * New upstream release + - Fixes build failures when QT_NO_DEBUG_OUTPUT defined + (Closes: #418832) + - Fixes broken signal/slot connection in QSvgRenderer + (Closes: #411292) + + -- Brian Nelson Thu, 12 Apr 2007 12:38:06 -0400 + +qt4-x11 (4.2.2-2) unstable; urgency=high + + * debian/patches/04_utf8_bug_fix.dpatch: new patch to fix the "UTF-8 + overlong sequence decoding vulnerability" [CVE-2007-0242] + + -- Brian Nelson Fri, 30 Mar 2007 11:04:20 -0400 + +qt4-x11 (4.2.2-1) unstable; urgency=low + + * New upstream release (Closes: #410862) + + * debian/rules: set the sysconfdir to /etc/xdg instead of /etc/qt4 to + match the QSettings documentation (Closes: #407297) + + * Added Riku Voipio's patch for ARM EABI (Closes: #408813) + + * debian/patches/22_launch_moc-qt4.dpatch: new patch to ensure the Qt4 + version of moc is launched by qdbuscpp2xml (Closes: #399049) + + * Added a doc-base file for qt4-doc (Closes: #403290) + + * debian/qt4-designer.links: added a link /usr/share/qt4/bin/designer -> + /usr/bin/designer-qt4 (Closes: #410885) + + * Re-arranged patches to group them by arch so that they're easier to + deal with + + * Applied new patches for kFreeBSD and Hurd support + (Closes: #380097, #402007) + + * debian/libqt4-gui.install: added the codecs plugins, somehow these got + accidentally dropped (Closes: #409228) + + -- Brian Nelson Sun, 4 Mar 2007 13:50:39 -0500 + +qt4-x11 (4.2.1-2) unstable; urgency=low + + * debian/patches/20_hppa_inotify_fix.dpatch: new patch that should fix + the FTBFS on hppa due to missing defines (Closes: #394953) + + * Added patches for hurd support (Closes: #380097) + + * debian/patches/10_qmake_for_debian.dpatch: restored the modification + to remove link_prl from the CONFIG line, which fixes problems with + unnecessary linkage (Closes: #394836) + + -- Brian Nelson Tue, 31 Oct 2006 02:42:02 -0500 + +qt4-x11 (4.2.1-1) unstable; urgency=high + + * New upstream release + - Fixes integer overflow in pixmap handling [CVE-2006-4811] + (Closes: #394192) + + * Install the libqtaccessiblecompatwidgets.so plugin into + libqt4-qt3support, so that libqt4-gui does not circularly depend on + libqt4-qt3support (Closes: #394351, #394629) + + -- Brian Nelson Mon, 23 Oct 2006 11:59:52 -0400 + +qt4-x11 (4.2.0-2) unstable; urgency=low + + * debian/control: added a dependency on libglib2.0-dev for libqt4-dev + (Closes: #392797, #392173) + + * Added a bunch of plugins and their debugging symbols to be installed + + * debian/patches/19_m68k_inotify_fix.dpatch: new patch to fix FTBFS on + m68k (Closes: #391902) + + * Imported Ubuntu fixes, thanks to Jonathan Riddell for the tip + - Fix typo in debian/rules -qt-sql-slite to -qt-sql-sqlite + (Closes: #392808) + - Install usr/bin/qdbus usr/bin/qdbusxml2cpp and usr/bin/qdbuscpp2xml + (Closes: #391726) + + * debian/control: added a libqt4-dev dependency on libsqlite0-dev + (Closes: #392558) + + -- Brian Nelson Tue, 17 Oct 2006 23:44:31 -0400 + +qt4-x11 (4.2.0-1) unstable; urgency=low + + * New upstream release + - No longer includes "CONFIG = ... debug" in the mkspecs/qconfig.pri + (Closes: #357136) + - Fixes QFontDialog assert() failures (Closes: #380418) + + * debian/control: made libqt4-gui conflict/replace libqt4-designer, to + ensure that old package is removed (Closes: #380253) + + * Enable Qt's new support for using the system's SQLite 3 library + (Closes: #382238) + + * debian/rules: removed the PostgreSQL and MySQL include hacks from the + configure arguments, since the configure script now autodetects them + itself + + * debian/patches/10_qmake_for_debian.dpatch: updated for new upstream + + * debian/patches/13_arm_ftbfs_fixes.dpatch: updated for new upstream + + * debian/patches/19_s390_atomic.dpatch: removed, since it appears to be + obsolete + + * debian/libqt4-debug.install: changed the wildcards to match the new + debug lib names. What was once *_debug.so.* is now *.debug. Ick. + + * debian/control: removed libqt4-debug-dev since now that the _debug + libs have been removed and debugging symbols are shipped in their + place, this package is no longer needed + + * Tar up the demos directory and include it in qt4-doc. Also added the + qtdemo binary to libqt4-dev. (Closes: #390925) + + * debian/rules: add -DQT_QLOCALE_USES_FCVT to the configure arguments + when building on arm, like Qt3, to fix a uic problem (Closes: #386460) + + * debian/libqt4-gui.install: added usr/lib/libQtAssistantClient.so.*, + since it's now shipped as a shared library; previously it was a static + library + + * Added build-deps on libdbus-1-dev and libglib2.0-dev, and added + libQtDBus to the libqt4-core package + + -- Brian Nelson Fri, 6 Oct 2006 23:16:46 -0400 + +qt4-x11 (4.1.4-1.1) unstable; urgency=medium + + * Non-maintainer upload. + * Reintroduce the libpq-dev dependency, which seems to have been removed by + mistake in 4.1.0-2. (Closes: #327618) + + -- Steinar H. Gunderson Tue, 29 Aug 2006 01:10:59 +0200 + +qt4-x11 (4.1.4-1) unstable; urgency=low + + * New upstream release (Closes: #378443) + + * Moved usr/lib/libQtDesigner.so.* and + usr/lib/libQtDesignerComponents.so.* from qt4-designer to libqt4-gui + so there the libqt4-dev package won't contain dangling symlinks + (Closes: #374612) + + -- Brian Nelson Sun, 16 Jul 2006 15:39:29 -0700 + +qt4-x11 (4.1.3-3) unstable; urgency=low + + * debian/patches/19_s390_atomic: patch from Bastian Blank to fix + including of s390 specific atomic header. (Closes: #370241) + + * debian/patches/18_disable_opengl_visibility.dpatch: regenerated so + that it applies correctly for me + + -- Brian Nelson Sun, 25 Jun 2006 11:42:57 -0700 + +qt4-x11 (4.1.3-2) unstable; urgency=high + + * patches/18_disable_opengl_visibility: disable -fvisibility-inlines-hidden + for src/opengl/opengl.pro as it makes gcc ICE on alpha. + (Closes: #368883) + + * urgency set to high so that qt4-x11 stops blocking half of unstable out of + testing. + + -- Pierre Habouzit Mon, 5 Jun 2006 10:28:29 +0200 + +qt4-x11 (4.1.3-1) unstable; urgency=high + + * New upstream release + + * debian/patches/16_hppa_ldcw_fix.dpatch: new patch from Ubuntu to + properly support hppa + + * debian/patches/17_alpha_ice.dpatch: new patch from Steve Langasek to + fix FTBFS on alpha (Closes: #368883) + (urgency set to high for that fix). + + * Dropped the .la files since they pull in too many unneeded + dependencies (Closes: #360802) + + * debian/libqt4-debug.install: removed + usr/lib/qt4/plugins/codecs/*_debug.so since those aren't included + upstream anymore + + * Increased standards version to 3.7.2 + + -- Brian Nelson Sat, 3 Jun 2006 17:56:32 -0700 + +qt4-x11 (4.1.2-2) unstable; urgency=low + + * debian/libqt4-debug-dev.install, debian/libqt4-dev.install: added + wildcards to install .a static libraries so that the libQtUiTools and + libQtAssistantClient libraries are included (Closes: #358224, #355902) + + -- Brian Nelson Sun, 14 May 2006 10:03:40 -0700 + +qt4-x11 (4.1.2-1) unstable; urgency=low + + * New upstream release + + * debian/control: removed dependencies on xlibs-static-dev and + xlibs-static-pic to transition to building against modular X + (Closes: #362262) + + * debian/control: changed x-dev dependencies to x11proto-core-dev, for + modular X transition (Closes: #362053) + + -- Brian Nelson Thu, 13 Apr 2006 10:35:28 -0700 + +qt4-x11 (4.1.1-1) unstable; urgency=low + + * New upstream release + - Fixes the broken debug-and-release build and a load of resulting + bugs (Closes: #337764, #337847, #341807, #338380, #354993, #347251) + - debian/patches/15_alpha_ftbfs_fix.dpatch: removed, integrated upstream + + * debian/control: updated libqt4-debug-dev priority to match that of the + override file + + * debian/libqt4-dev.links: added a symlink /usr/share/qt4/bin/rcc to + /usr/bin/rcc (Closes: #349438) + + * debian/libqt4-gui.install: added libqmng.so and libqgif.so plugins + (Closes: #354266) + + -- Brian Nelson Mon, 6 Mar 2006 10:20:47 -0800 + +qt4-x11 (4.1.0-3) unstable; urgency=low + + * Moved *_debug.prl and *_debug.la support files to the libqt4-debug-dev + package + + * Updated to debhelper v5 compatibility + + * debian/qt4-dev-tools.install: removed the /usr/share/qt4/templates + entry, which no longer contains anything + + * Added gif support (Closes: #348092) + + * debian/patches/12_mips_atomic_ops.dpatch: applied fixes from Isaac + Clerencia , as the last patch was not good enough to + fix the FTBFS bug (Closes: #335831) + + -- Brian Nelson Tue, 17 Jan 2006 09:49:11 -0800 + +qt4-x11 (4.1.0-2) unstable; urgency=low + + * debian/patches/12_mips_atomic_ops.dpatch: Updated patch to account for + 2 new functions, q_atomic_test_and_set_acquire_int and + q_atomic_test_and_set_release_int, that were added in this release. + This should again fix the build failures on mips. (Closes: #335831) + + * debian/patches/13_arm_ftbfs_fixes.dpatch: renamed, added a fix for the + new build failure due to a poorly defined qreal (Closes: #347360) + + * debian/control: build against libmysqlclient15, and updated all + dependencies to libmysqlclient15-dev (Closes: #346586) + + * debian/control: added explicit dependencies for libqt4-dev on the + Source-Version packages libqt4-core, libqt4-gui, libqt4-sql, and + libqt4-qt3support. These dependencies were accidentally dropped in + the last version. Also removed some unneeded dependencies. + + * Split the *_debug.so symlinks out of libqt4-dev and into a separate + libqt4-debug-dev package. Made the libqt4-debug-dev package depend on + the Source-Version of libqt4-debug. This way, the symlinks won't be + dangling if libqt4-debug isn't installed and prevents failed linking + due to version mismatches. (Closes: #346603, #346605) + + * Re-enabled sqlite3 support. It's still statically linked, however, + but that'll have to do because I really don't want to futz with the + build system. (Closes: #330976) + + * Enabled sqlite2 support + + * debian/patches/15_alpha_ftbfs_fix.dpatch: new patch to rename + q_atomic_test_and_set_release_ptr to q_atomic_test_and_set_ptr, as + suggested by Isaac Clerencia , to fix a FTBFS on + alpha. (Closes: #347353) + + * debian/patches/10_qmake_for_debian: renamed from + 10_qmake_use_qt4_tools, and updated to remove the "link_prl" from the + default qmake CONFIG line. This disables the recursive linkage + against all indirectly-used libraries. (Closes: #343190) + + -- Brian Nelson Tue, 10 Jan 2006 19:29:52 -0800 + +qt4-x11 (4.1.0-1) unstable; urgency=low + + * New upstream release + - Fixes missing QBitArray operators (Closes: #341658) + - Fixes qmake problem with including bad build path (Closes: #327359) + + * Added the new QTestLib unit testing framework to the libqt4-core + package + + * Added the new QtSvg module to the libqt4-gui package + + * debian/patches/13_arm_gcc4.dpatch: new patch from Jeremy Laine to fix + FTBFS on arm (Closes: #343176) + + * debian/patches/14_kfreebsd_build_fix.dpatch: new patch from Petr + Salinger to fix FTBFS on GNU/kFreeBSD (Closes: #343191) + + * Split the qtconfig tool out of libqt4-gui and into a separate + qt4-qtconfig package, due to its linkage against libqt4-qt3support and + hence ridiculous dependency chain. + + * debian/rules: improved/cleaned up the clean target + + -- Brian Nelson Wed, 4 Jan 2006 12:56:23 -0800 + +qt4-x11 (4.0.1-6) unstable; urgency=low + + * Added a target to automatically install lintian overrides, stolen from + debian-qt-kde.mk + + * Added a bunch of lintian overrides for stuff that should be ignored + + -- Brian Nelson Sat, 19 Nov 2005 01:17:03 -0800 + +qt4-x11 (4.0.1-5) unstable; urgency=low + + * debian/control: made libqt4-gui replace libqt4-core (<< 4.0.1-3), for + the plugins move (Closes: #336492) + + * debian/control: removed the mention of a qt4-examples package that + doesn't actually exist from the qt4-doc package description + + * debian/rules: remove all *.so files under + examples/tools/plugandpaint/plugins/ in the clean target + (Closes: #339674) + + * Removed the menu entry for designer-qt4 from qt4-dev-tools.menu, and + added it to a new qt4-designer.menu + + * Added a tarball of the examples to qt4-doc (Closes: #336832) + + -- Brian Nelson Fri, 18 Nov 2005 10:27:03 -0800 + +qt4-x11 (4.0.1-4) unstable; urgency=low + + * debian/control: changed qt4-designer's section to "devel" + + * Added a patch from Thiemo Seufer to fix the FTBFS on mips/mipsel + (Closes: #335831) + + -- Brian Nelson Wed, 26 Oct 2005 00:13:40 -0700 + +qt4-x11 (4.0.1-3) unstable; urgency=low + + * debian/libqt4-core.install: only install the non-debug codecs, since + the debug ones pull in a gratuitous dependency on libqt4-debug + (Closes: #328913) + + * debian/libqt4-debug.install: install the debug codecs here instead + + * debian/control: replaced obsolete xlibs-dev dependency with the + required split packages (Closes: #329302) + + * Completely disabled SQLite support since it's too fubar in this + version to be usable. The build fails with SQLite2 support, and + SQLite3 is only supported by linking staticly with a version + distributed in the Qt source. Meh. + + * Renamed libqt4-designer to qt4-designer, merged in the designer binary + from qt4-dev-tools, and added a dependency on libqt4-dev + (Closes: #330094) + + * Moved the plugins installed in libqt4-core to libqt4-gui, since they + link against the GUI library. Otherwise a circular libqt4-core <-> + libqt4-gui dependency results. + + -- Brian Nelson Fri, 21 Oct 2005 00:28:53 -0700 + +qt4-x11 (4.0.1-2) unstable; urgency=low + + * debian/patches/10_qmake_use_qt4_tools.dpatch: new patch that modifies + qmake.conf so that qmake generates Makefiles that use the -qt4 tools. + This way, it can cope with systems that have alternatives set to use + the -qt3 versions. + + * Increased the conflicting Qt3 package versions to <= 3.3.4-7, since + the Qt3 packages still don't use the alternatives system as needed to + coexist with Qt4. + + * debian/libqt4-core.install: added /usr/lib/qt4/plugins/codecs + + * debian/patches/11_launch_assistant-qt4: new patch that modifies the + QAssistantClient class to launch Qt Assistant as "assistant-qt4" to + cope with the alternatives system (Closes: #327294) + + * debian/control: Upgraded libqt4-dev's dependencies on the modules + libqt4-sql and libqt4-qt3support from suggests to depends, and added + libpq-dev and libmysqlclient14-dev | libmysqlclient-dev as + dependencies. These dependencies are apparently required to make + building pkg-config-using packages happy. (Closes: #327618) + + * debian/control: corrected libqt4-sql to suggest libmysqlclient14-dev, + not libmysqlclient12-dev which is deprecated + + * debian/copyright: updated FSF snailmail address + + * debian/libqt4-debug.install: removed the libqt3supportwidgets_debug.so + designer plugin, since for some reason having this installed breaks + designer (Closes: #325782) + + -- Brian Nelson Mon, 12 Sep 2005 12:32:53 -0700 + +qt4-x11 (4.0.1-1) unstable; urgency=low + + * New upstream release + + * Install changes-4.0.1 as upstream changelog + + * debian/manpages/assistant-qt4.1: new manpage written from scratch + based on the output of "assistant -help" + + * debian/manpages/designer-qt4.1, debian/manpages/linguist-qt4.1: + manpages stolen from the Qt3 packages and trivially adapted for Qt4 + (Closes: #322403) + + * debian/manpages/moc-qt4.1: escape some '-' characters + + * debian/qt4-dev-tools.manpages: install the new assistant-qt4.1, + designer-qt4.1, and linguist-qt4.1 manpages + + * debian/control: made qt4-dev-tools recommend qt4-doc, since assisant + needs it to be useful (Closes: #323251) + + * Removed the FAQ from qt4-doc.docs, since it's no longer included in + 4.0.1, and was useless anyway + + * Build-depend on libmysqlclient14-dev since libmysqlclient12-dev is + scheduled to be removed + + * debian/libqt4-dev.install: work around TT's broken "install" target in + this release so that the pkgconfig files are installed in + /usr/lib/pkgconfig instead of directly in /usr/lib. Grrrr. + + -- Brian Nelson Thu, 25 Aug 2005 19:28:35 -0700 + +qt4-x11 (4.0.0-3) unstable; urgency=low + + * debian/control: changed the xlibs-pic dependency to xlibs-static-pic + for the X.org transition (Closes: #319586) + + * Added manpages for lrelease, lupdate, moc, qtconfig, and uic, stolen + from the Qt3 upstream tarball, and wrote a manpage for qmake from + scratch. Since now manpages are included for all executables using + the alternatives, the symlinks to them no longer dangle. + (Closes: #319456) + + * debian/libqt4-core.install: added + usr/lib/qt4/plugins/imageformats/libqjpeg.so to include the jpeg + plugin (Closes: #321582) + + * debian/libqt4-debug.install: added the libqjpeg_debug.so plugin + + * debian/rules: don't hardcode the /usr/include/postgresql/8.0 path, + instead of the output of `pg_config --includedir`, stolen from Qt3 + packages + + * debian/libqt4-gui.install: added the OpenGL module library so that it + actually gets included in a package (Closes: #321874) + + * debian/control: updated the package descriptions to note that the + Network and XML modules are included in the libqt4-core package, and + the OpenGL module is included in the libqt4-gui package + + -- Brian Nelson Mon, 8 Aug 2005 08:58:10 -0700 + +qt4-x11 (4.0.0-2) unstable; urgency=low + + * libqt4-dev: added /usr/bin/uic3 (Closes: #318451) + + * Transition to the new X.org packages: + + (Build-)depend on libglu1-xorg-dev instead of xlibmesa-gl-dev + + (Build-)depend on libxinerama-dev (Closes: #318682) + + -- Brian Nelson Tue, 19 Jul 2005 21:28:19 -0700 + +qt4-x11 (4.0.0-1) unstable; urgency=low + + * Initial release (Closes: #306694) + + -- Brian Nelson Tue, 5 Jul 2005 19:42:18 -0700 diff --git a/config.profiles/harmattan/collection/qtdemo.qhc.uu b/config.profiles/harmattan/collection/qtdemo.qhc.uu new file mode 100644 index 0000000..4e4898e --- /dev/null +++ b/config.profiles/harmattan/collection/qtdemo.qhc.uu @@ -0,0 +1,231 @@ +begin 644 qtdemo.qhc +M4U%,:71E(&9O`!?`%,`90!T`'0`:0!N`&<`&2 + echo " export TOOLCHAIN_PATH=/opt/toolchains/columbus/cs2007q3-glibc2.5-arm7" 1>&2 + echo "PATH should have the path to toolchain's bin dir at beginning, e.g.:" 1>&2 + echo " export PATH=\$TOOLCHAIN_PATH/bin:\$PATH" 1>&2 + echo "PKG_CONFIG_PREFIX should have the prefix for pkg config, e.g.:" 1>&2 + echo " export PKG_CONFIG_PREFIX=\$TOOLCHAIN_PATH/arm-none-linux-gnueabi" 1>&2 + echo "PKG_CONFIG_PATH must be set to the path(s) to pkg config .pc file location(s), e.g.:" 1>&2 + echo " export PKG_CONFIG_PATH=\$PKG_CONFIG_PREFIX/libc/lib/pkgconfig:\$PKG_CONFIG_PREFIX/libc/usr/lib/pkgconfig" 1>&2 + echo + exit 1 +fi + +# We assume the current dir is the depot and we are not shadow building +# Blast the mkspec we use, if it exists, and copy it out of debian dir +rm -rf mkspecs/linux-g++-cross +cp -a debian/mkspecs/linux-g++-cross mkspecs/ + +# maemo does the next two lines, no idea why, left them for referance +# rm -rf mkspecs/glibc-g++ +# cp -a mkspecs/linux-g++ mkspecs/glibc-g++ + +# Run configure - we take extra arguments if given +exec ./configure -nokia-developer \ + -prefix "/usr" \ + -bindir "/usr/bin" \ + -libdir "/usr/lib" \ + -docdir "/usr/share/qt4/doc" \ + -headerdir "/usr/include/qt4" \ + -datadir "/usr/share/qt4" \ + -plugindir "/usr/lib/qt4/plugins" \ + -translationdir "/usr/share/qt4/translations" \ + -sysconfdir "/etc/xdg" \ + -arch arm \ + -xplatform linux-g++-cross \ + -fast \ + -mitshm \ + -no-optimized-qmake \ + -reduce-relocations \ + -no-separate-debug-info \ + -system-zlib \ + -system-libtiff \ + -system-libpng \ + -system-libjpeg \ + -no-nas-sound \ + -qt-gif \ + -no-qt3support \ + -no-libmng \ + -opengl es2 \ + -no-accessibility \ + -nomake examples \ + -nomake demos \ + -little-endian \ + -I${TOOLCHAIN_PATH}/libc/usr/include/freetype2 \ + -lfontconfig \ + -no-cups \ + -no-gtkstyle \ + -exceptions \ + -no-xinerama \ + -dbus \ + -glib \ + -no-pch \ + -gstreamer \ + -svg \ + -webkit \ + -no-sql-ibase \ + -xmlpatterns \ + -system-sqlite \ + -plugin-sql-sqlite \ + -openssl \ + -DQT_QLOCALE_USES_FCVT \ + "$@" +# End of Script diff --git a/config.profiles/harmattan/control b/config.profiles/harmattan/control new file mode 100644 index 0000000..13908a9 --- /dev/null +++ b/config.profiles/harmattan/control @@ -0,0 +1,648 @@ +Source: qt4-x11 +Section: libs +Priority: optional +Maintainer: Petri Latvala +Build-Depends: cdbs, debhelper (>= 7), flex, quilt, sharutils, + libdbus-1-dev, libfreetype6-dev, libglib2.0-dev, libice-dev, libjpeg62-dev, + libpng12-dev, libreadline5-dev | libreadline4-dev, libsm-dev, libtiff4-dev, libx11-dev, + libxext-dev, libxft-dev, libxi-dev, libxmu-dev, + libxrandr-dev, libxrender-dev, libxslt1-dev, libxt-dev, x11proto-core-dev, + zlib1g-dev, libgstreamer-plugins-base0.10-dev, libgstreamer0.10-dev, libicu-dev, + libgles2-sgx-img-dev [arm armel] | libgles2-dev [arm armel], libgles2 [arm armel], + opengles-sgx-img-common-dev [arm armel], opengles-sgx-img-common [arm armel], + libgl-dev [i386], libgl1 [i386], + libxau-dev, libxcb1-dev, libxdmcp-dev, libexpat1-dev, + libsqlite3-dev, libsqlite3-0, libssl-dev, libasound2-dev, libxv-dev, + icd2-dev, icd2-osso-ic-dev, osso-wlan-dev, libconnsettings0-dev +Standards-Version: 3.9.1.0 + +Package: libqtcore4 +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends} +Replaces: libqt4-core (<< 4.4.0~beta1-1), libqt4-gui (<< 4.4.0~beta1-1) +Description: Qt 4 core module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtCore module contains core non-GUI functionality. + +Package: libqtcore4-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqtcore4 (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 Core libraries. + +Package: libqt4-core +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtcore4 (= ${binary:Version}), libqt4-network (= ${binary:Version}), libqt4-script (= ${binary:Version}), libqt4-xml (= ${binary:Version}), libqt4-dbus (= ${binary:Version}) +Description: transitional package for Qt 4 core non-GUI runtime libraries + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This is a dummy transitional package to enable installation of other Debian + packages linked against Qt 4.3 or earlier Qt 4 releases previously shipped + in Debian. + +Package: libqtgui4 +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtcore4 (= ${binary:Version}), fontconfig, opengles-sgx-img-common [arm armel], libgles2 [arm armel] +Conflicts: libqt4-designer (<< 4.4.0~beta1-1) +Replaces: libqt4-core (<< 4.0.1-3), libqt4-gui (<< 4.4.0), + qt4-designer (<< 4.1.4), libqt4-designer (<< 4.4.0~beta1-1) +Description: Qt 4 GUI module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtGui module extends QtCore with GUI functionality. + +Package: libqtgui4-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqtgui4 (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 GUI libraries. + +Package: libqt4-gui +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtgui4 (= ${binary:Version}), libqt4-svg (= ${binary:Version}) +Description: transitional package for Qt 4 GUI runtime libraries + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This is a dummy transitional package depending on the Qt4 GUI library + packages which the package of the same name used to provide in Qt 4.3.4 + and earlier Debian packages of Qt4. + +Package: libqt4-network +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtcore4 (= ${binary:Version}) +Replaces: libqt4-core (<< 4.4.0~beta1-1) +Description: Qt 4 network module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtNetwork module offers classes that allow you to write TCP/IP clients and + servers. It provides classes to make network programming easier and portable. + +Package: libqt4-network-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-network (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 Network libraries. + +Package: libqt4-script +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqt4-dbus (= ${binary:Version}), libqtcore4 (= ${binary:Version}) +Replaces: libqt4-core (<< 4.4.0~beta1-1) +Description: Qt 4 script module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtScript module provides classes for making Qt applications scriptable. + +Package: libqt4-script-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-script (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 Script libraries. + +Package: libqt4-sql +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtcore4 (= ${binary:Version}) +Recommends: libqt4-sql-sqlite +Suggests: libqt4-dev +Description: Qt 4 SQL module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtSql module helps you provide seamless database integration to your Qt + applications. + . + If you wish to use the SQL module for development, you should install the + libqt4-dev package. + +Package: libqt4-sql-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-sql (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 SQL libraries. + +Package: libqt4-sql-sqlite +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqt4-sql (= ${binary:Version}) +Description: Qt 4 SQLite plugin + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + +Package: libqt4-sql-sqlite-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-sql-sqlite (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 SQL SQLite plugin. + +Package: libqt4-svg +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtcore4 (= ${binary:Version}), libqtgui4 (= ${binary:Version}) +Conflicts: libqt4-gui (<< 4.4.0~beta1-1) +Replaces: libqt4-gui (<< 4.4.0~beta1-1) +Description: Qt 4 SVG module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtSvg module provides classes for displaying the contents of SVG files. + . + Scalable Vector Graphics (SVG) is a language for describing two-dimensional + graphics and graphical applications in XML. + +Package: libqt4-svg-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-svg (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 SVG libraries. + +Package: libqt4-webkit +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtwebkit4 (>= 2.0~) +Description: Qt 4 WebKit module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This is a dummy transitional package to enable installation of other packages + linked against Qt WebKit 4.4 - 4.7 releases previously shipped from Qt source. + +Package: libqt4-xml +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtcore4 (= ${binary:Version}) +Replaces: libqt4-core (<< 4.4.0~beta1-1) +Description: Qt 4 XML module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtXml module provides a stream reader and writer for XML documents, + and C++ implementations of SAX and DOM. + +Package: libqt4-xml-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-xml (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 XML libraries. + +Package: libqt4-xmlpatterns +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtcore4 (= ${binary:Version}), libqt4-xml (= ${binary:Version}) +Replaces: libqt4-core (<< 4.4.0~beta1-1) +Description: Qt 4 XML Patterns module + lorem ipsum + . + and all that + +Package: libqt4-xmlpatterns-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-xmlpatterns (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 XML patterns library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 XML patterns + library. + +Package: libqt4-dbus +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqt4-xml (= ${binary:Version}), libqtcore4 (= ${binary:Version}) +Replaces: libqt4-core (<< 4.4.0~beta1-1) +Description: Qt 4 D-Bus module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtDBus module is a Unix-only library that you can use to make Inter-Process + Communication using the D-Bus protocol. + . + Applications using the QtDBus module can provide services to other, remote + applications by exporting objects, as well as use services exported by those + applications by placing calls and accessing properties. + +Package: libqt4-dbus-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-dbus (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 DBus libraries. + +Package: libqt4-help +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqt4-sql (= ${binary:Version}), libqtcore4 (= ${binary:Version}), libqtgui4 (= ${binary:Version}) +Description: Qt 4 help module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtHelp module provides classes for integrating online documentation in + applications. + +Package: libqt4-help-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-help (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 Help libraries. + +Package: libqt4-test +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtcore4 (= ${binary:Version}) +Replaces: libqt4-core (<< 4.4.0~beta1-1) +Description: Qt 4 test module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtTest module provides classes for unit testing Qt applications and + libraries. + +Package: libqt4-test-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-test (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 Test libraries. + +Package: libqt4-dev +Architecture: any +Section: libdevel +Depends: ${shlibs:Depends}, ${misc:Depends}, + libqt4-dbus (= ${binary:Version}), + libqt4-xml (= ${binary:Version}), libqtcore4 (= ${binary:Version}), + libqt4-network (= ${binary:Version}), libqtgui4 (= ${binary:Version}), + libqt4-svg (= ${binary:Version}), libqt4-sql (= ${binary:Version}), + libqt4-script (= ${binary:Version}), libqt4-help (= ${binary:Version}), + libqt4-test (= ${binary:Version}), libqt4-phonon (= ${binary:Version}), + libqt4-xmlpatterns (= ${binary:Version}), + libqt4-multimedia (= ${binary:Version}), libqt4-opengl (= ${binary:Version}), + libqt4-declarative (= ${binary:Version}), qt4-linguist-tools (= ${binary:Version}), + libqt4-meegographicssystemhelper-dev (= ${binary:Version}) [arm armel], + libgl-dev [i386], libgles2-sgx-img-dev [arm armel], + opengles-sgx-img-common-dev [arm armel], libxv-dev, libc6-dev +Conflicts: qt3-dev-tools (<= 3:3.3.4-7) +Replaces: libqt4-opengl-dev (<< 4.4.0-2) +Suggests: libmysqlclient15-dev, libsqlite0-dev, libsqlite3-dev, libpq-dev, libiodbc2-dev, firebird2.0-dev +Description: Qt 4 development files + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the header development files and development programs + such as qmake used for building Qt4 applications. + +Package: qt4-linguist-tools +Architecture: any +Section: libdevel +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Qt 4 development files + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the Qt Linguist development tool + such as lrelease used for building Qt4 applications. + +Package: libqt4 +Architecture: any +Section: libs +Depends: libqt4-core (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 dummy package + This is a dummy alias-package. + +Package: libqt4-phonon +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqtcore4 (= ${binary:Version}), libqt4-xml (= ${binary:Version}), libqtgui4 (= ${binary:Version}), libqt4-opengl (= ${binary:Version}), libqt4-dbus (= ${binary:Version}) +Replaces: libqt4-core (<< 4.4.0~beta1-1) +Description: Qt 4 Phonon Libraries + Qt 4 media playing libraries + +Package: libqt4-phonon-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-phonon (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 phonon module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbol for the Qt phonon library. + +Package: libqt4-multimedia +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Qt 4 Multimedia Libraries + Qt 4 media playing libraries + +Package: libqt4-multimedia-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-multimedia (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 multimedia module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbol for the Qt multimedia library. + +Package: libqt4-opengl +Architecture: any +Section: libs +Depends: libqtcore4 (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends}, opengles-sgx-img-common [arm armel], libgles2 [arm armel], libgl1 [i386] +Replaces: libqt4-core (<< 4.4.0~beta1-1) +Description: Qt 4 OpenGL module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtOpenGL module offers classes that make it easy to use OpenGL in Qt + applications. + . + OpenGL is a standard API for rendering 3D graphics. OpenGL only deals with 3D + rendering and provides little or no support for GUI programming issues. + . + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the development files needed to build Qt 4 applications + using QtOpenGL library. + +Package: libqt4-opengl-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-opengl (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 OpenGL libraries. + +Package: libqt4-opengl-dev +Architecture: any +Section: libdevel +Depends: libqt4-dev (= ${binary:Version}), ${misc:Depends} +Replaces: libqt4-dev (<< 4.4.0~beta1-1) +Description: Qt 4 OpenGL library development files + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This is a transitional package for libqt4-opengl-dev, and can be safely removed + after the installation is complete. + +Package: qt4-acceptance-tests +Section: libdevel +Priority: optional +Architecture: any +Depends: ci-testing, ${shlibs:Depends}, ${misc:Depends} +XB-Maemo-CI-Packages: libqtcore4 +XB-Maemo-CI-Stage: staging, acceptance +Description: Tests for libqtcore4 + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains selected autotest cases for CI testing. + +Package: qt4-maemo-auto-tests +Section: libdevel +Priority: optional +Architecture: any +Depends: ci-testing, ${shlibs:Depends}, ${misc:Depends} +XB-Maemo-CI-Packages: libqtcore4 +XB-Maemo-CI-Stage: staging +Description: Tests for Qt4 + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains selected autotest cases for CI testing. + +Package: libqt4-declarative +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Qt 4 declarative module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtDeclarative module contains declarative UI functionality. + +Package: libqt4-declarative-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-declarative (= ${binary:Version}), ${misc:Depends} +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the debugging symbols for the Qt 4 Declarative + libraries. + +Package: libqt4-declarative-dev +Architecture: any +Section: libdevel +Depends: libqt4-dev (>= ${binary:Version}), ${misc:Depends} +Description: Qt 4 Declarative development files + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This is a transitional package for libqt4-declarative-dev, and can be + safely removed after the installation is complete. + +Package: qt4-declarative-qmlviewer +Architecture: any +Section: devel +Depends: libqt4-declarative (=${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Qt 4 declarative module + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + The QtDeclarative viewer allows viewing QML files + +Package: libqt4-gui-tests +Section: libdevel +Priority: optional +Architecture: any +Depends: ci-testing, ${shlibs:Depends}, ${misc:Depends} +XB-Maemo-CI-Packages: libqtgui4 +XB-Maemo-CI-Stage: staging +Description: Tests for Qt4 + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains selected autotest cases for CI testing. + +Package: libqt4-doc +Section: doc +Priority: optional +Architecture: all +Depends: ${misc:Depends} +Description: Qt 4 documentation + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the documentation for Qt 4. + +Package: libqt4-meegographicssystem +Architecture: arm armel +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqt4-meegographicssystemhelper +Conflicts: libqt4-meego (<< 4.7.2~git20110119) +Replaces: libqt4-meego (<< 4.7.2~git20110119) +Description: Qt 4 MeeGo graphics system plugin + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the MeeGo graphics system plugin. + +Package: libqt4-meegographicssystemhelper +Architecture: any +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends}, libqt4-meegographicssystem [arm armel] +Conflicts: libqt4-meego (<< 4.7.2~git20110119) +Replaces: libqt4-meego (<< 4.7.2~git20110119) +Provides: libqt4-meego +Description: Qt 4 MeeGo graphics system helper + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the MeeGo graphics system helper library. + +Package: libqt4-meegographicssystemhelper-dev +Architecture: any +Section: libdevel +Depends: libqt4-meegographicssystemhelper (= ${binary:Version}), ${misc:Depends} +Conflicts: libqt4-meego-dev (<< 4.7.2~git20110119) +Replaces: libqt4-meego-dev (<< 4.7.2~git20110119) +Provides: libqt4-meego-dev +Description: Qt 4 MeeGo graphics system development libraries and headers + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package contains the MeeGo graphics system header files and + development libraries. + +Package: libqt4-meegographicssystemhelper-dbg +Priority: extra +Architecture: any +Section: debug +Depends: libqt4-meegographicssystemhelper (= ${binary:Version}), ${misc:Depends} +Conflicts: libqt4-meego-dbg (<< 4.7.2~git20110119) +Replaces: libqt4-meego-dbg (<< 4.7.2~git20110119) +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package provides the debugging symbols for the MeeGo support + libraries. + +Package: libqt4-meegographicssystem-dbg +Priority: extra +Architecture: arm armel +Section: debug +Depends: libqt4-meegographicssystem (= ${binary:Version}), ${misc:Depends} +Conflicts: libqt4-meego-dbg (<< 4.7.2~git20110119) +Replaces: libqt4-meego-dbg (<< 4.7.2~git20110119) +Description: Qt 4 library debugging symbols + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package provides the debugging symbols for the MeeGo graphics + system plugin. + +Package: libqt4-meego +Architecture: all +Section: oldlibs +Depends: libqt4-meegographicssystemhelper, libqt4-meegographicssystem [arm armel] +Description: Qt 4 MeeGo support libraries transitional package + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package is for transitioning purposes only and can be removed. + +Package: libqt4-meego-dev +Architecture: all +Section: oldlibs +Depends: libqt4-meegographicssystemhelper-dev +Description: Qt 4 MeeGo support libraries transitional package + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package is for transitioning purposes only and can be removed. + +Package: libqt4-meego-dbg +Priority: extra +Architecture: all +Section: debug +Depends: libqt4-meegographicssystemhelper-dbg, libqt4-meegographicssystem-dbg [arm armel] +Description: Qt 4 MeeGo support libraries transitional package + Qt is a cross-platform C++ application framework. Qt's primary feature + is its rich set of widgets that provide standard GUI functionality. + . + This package is for transitioning purposes only and can be removed. diff --git a/config.profiles/harmattan/libqt4-core.lintian b/config.profiles/harmattan/libqt4-core.lintian new file mode 100644 index 0000000..bd6e1f7 --- /dev/null +++ b/config.profiles/harmattan/libqt4-core.lintian @@ -0,0 +1 @@ +libqt4-core: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-dbus-dbg.lintian b/config.profiles/harmattan/libqt4-dbus-dbg.lintian new file mode 100644 index 0000000..aa4fa15 --- /dev/null +++ b/config.profiles/harmattan/libqt4-dbus-dbg.lintian @@ -0,0 +1 @@ +libqt4-dbus-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-dbus.install b/config.profiles/harmattan/libqt4-dbus.install new file mode 100644 index 0000000..2242fb3 --- /dev/null +++ b/config.profiles/harmattan/libqt4-dbus.install @@ -0,0 +1,3 @@ +usr/lib/libQtDBus.so.* +usr/bin/qdbus + diff --git a/config.profiles/harmattan/libqt4-dbus.lintian b/config.profiles/harmattan/libqt4-dbus.lintian new file mode 100644 index 0000000..c6a37b7 --- /dev/null +++ b/config.profiles/harmattan/libqt4-dbus.lintian @@ -0,0 +1,2 @@ +libqt4-dbus: package-name-doesnt-match-sonames libQtDBus4 +libqt4-dbus: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-declarative-dbg.lintian b/config.profiles/harmattan/libqt4-declarative-dbg.lintian new file mode 100644 index 0000000..3d16d1e --- /dev/null +++ b/config.profiles/harmattan/libqt4-declarative-dbg.lintian @@ -0,0 +1 @@ +libqt4-declarative-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-declarative-dev.lintian b/config.profiles/harmattan/libqt4-declarative-dev.lintian new file mode 100644 index 0000000..1045808 --- /dev/null +++ b/config.profiles/harmattan/libqt4-declarative-dev.lintian @@ -0,0 +1 @@ +libqt4-declarative-dev: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-declarative.install b/config.profiles/harmattan/libqt4-declarative.install new file mode 100644 index 0000000..7b71d87 --- /dev/null +++ b/config.profiles/harmattan/libqt4-declarative.install @@ -0,0 +1,4 @@ +usr/lib/libQtDeclarative.so.* +usr/lib/qt4/imports/Qt/labs/folderlistmodel +usr/lib/qt4/imports/Qt/labs/gestures +usr/lib/qt4/imports/Qt/labs/particles diff --git a/config.profiles/harmattan/libqt4-declarative.lintian b/config.profiles/harmattan/libqt4-declarative.lintian new file mode 100644 index 0000000..70dd96f --- /dev/null +++ b/config.profiles/harmattan/libqt4-declarative.lintian @@ -0,0 +1,2 @@ +libqt4-declarative: unknown-control-file digsigsums +libqt4-declarative: package-name-doesnt-match-sonames libQtDeclarative4 diff --git a/config.profiles/harmattan/libqt4-dev.dirs b/config.profiles/harmattan/libqt4-dev.dirs new file mode 100644 index 0000000..944cf06 --- /dev/null +++ b/config.profiles/harmattan/libqt4-dev.dirs @@ -0,0 +1 @@ +usr/share/qt4/doc/html diff --git a/config.profiles/harmattan/libqt4-dev.install b/config.profiles/harmattan/libqt4-dev.install new file mode 100644 index 0000000..e7edbcb --- /dev/null +++ b/config.profiles/harmattan/libqt4-dev.install @@ -0,0 +1,85 @@ +usr/bin/native-moc +usr/bin/qdbuscpp2xml +usr/bin/qdbusxml2cpp +usr/bin/native-qmake +usr/bin/qt3to4 +usr/bin/native-rcc +usr/bin/native-uic +usr/bin/host-moc +usr/bin/host-qmake +usr/bin/host-rcc +usr/bin/host-uic +usr/include/qt4/QtUiTools +usr/include/qt4/QtSvg +usr/include/qt4/QtXml +usr/include/qt4/QtGui +usr/include/qt4/phonon +usr/include/qt4/QtScript +usr/include/qt4/QtScriptTools +usr/include/qt4/QtSql +usr/include/qt4/QtXmlPatterns +usr/include/qt4/QtDBus +usr/include/qt4/QtTest +usr/include/qt4/QtHelp +usr/include/qt4/Qt +usr/include/qt4/QtCore +usr/include/qt4/QtNetwork +usr/include/qt4/QtMultimedia +usr/include/qt4/QtOpenGL +usr/include/qt4/QtDeclarative +usr/lib/libphonon.prl +usr/lib/libphonon.so +usr/lib/libQtCLucene.prl +usr/lib/libQtCLucene.so +usr/lib/libQtCore.prl +usr/lib/libQtCore.so +usr/lib/libQtDBus.prl +usr/lib/libQtDBus.so +usr/lib/libQtGui.prl +usr/lib/libQtGui.so +usr/lib/libQtHelp.prl +usr/lib/libQtHelp.so +usr/lib/libQtNetwork.prl +usr/lib/libQtNetwork.so +usr/lib/libQtScript.prl +usr/lib/libQtScript.so +usr/lib/libQtScriptTools.prl +usr/lib/libQtScriptTools.so +usr/lib/libQtSql.prl +usr/lib/libQtSql.so +usr/lib/libQtSvg.prl +usr/lib/libQtSvg.so +usr/lib/libQtTest.prl +usr/lib/libQtTest.so +usr/lib/libQtUiTools.prl +usr/lib/libQtUiTools.a +usr/lib/libQtXmlPatterns.prl +usr/lib/libQtXmlPatterns.so +usr/lib/libQtXml.prl +usr/lib/libQtXml.so +usr/lib/libQtMultimedia.prl +usr/lib/libQtMultimedia.so +usr/lib/libQtOpenGL.prl +usr/lib/libQtOpenGL.so +usr/lib/libQtDeclarative.so +usr/lib/libQtDeclarative.prl +usr/lib/pkgconfig/phonon.pc +usr/lib/pkgconfig/QtCLucene.pc +usr/lib/pkgconfig/QtCore.pc +usr/lib/pkgconfig/QtDBus.pc +usr/lib/pkgconfig/QtGui.pc +usr/lib/pkgconfig/QtHelp.pc +usr/lib/pkgconfig/QtNetwork.pc +usr/lib/pkgconfig/QtScript.pc +usr/lib/pkgconfig/QtScriptTools.pc +usr/lib/pkgconfig/QtSql.pc +usr/lib/pkgconfig/QtSvg.pc +usr/lib/pkgconfig/QtTest.pc +usr/lib/pkgconfig/QtUiTools.pc +usr/lib/pkgconfig/QtXmlPatterns.pc +usr/lib/pkgconfig/QtXml.pc +usr/lib/pkgconfig/QtMultimedia.pc +usr/lib/pkgconfig/QtOpenGL.pc +usr/lib/pkgconfig/QtDeclarative.pc +usr/share/qt4/q3porting.xml +usr/share/qt4/mkspecs diff --git a/config.profiles/harmattan/libqt4-dev.links b/config.profiles/harmattan/libqt4-dev.links new file mode 100644 index 0000000..0624825 --- /dev/null +++ b/config.profiles/harmattan/libqt4-dev.links @@ -0,0 +1,13 @@ +usr/include/qt4 usr/share/qt4/include +usr/bin/lrelease usr/share/qt4/bin/lrelease +usr/bin/lupdate usr/share/qt4/bin/lupdate +usr/bin/moc usr/share/qt4/bin/moc +usr/bin/qmake usr/share/qt4/bin/qmake +usr/bin/uic usr/share/qt4/bin/uic +usr/bin/lrelease usr/bin/lrelease-qt4 +usr/bin/lupdate usr/bin/lupdate-qt4 +usr/bin/moc usr/bin/moc-qt4 +usr/bin/qmake usr/bin/qmake-qt4 +usr/bin/uic usr/bin/uic-qt4 +usr/bin/rcc usr/share/qt4/bin/rcc +usr/lib/qt4/plugins usr/share/qt4/plugins diff --git a/config.profiles/harmattan/libqt4-dev.lintian b/config.profiles/harmattan/libqt4-dev.lintian new file mode 100644 index 0000000..c4c242a --- /dev/null +++ b/config.profiles/harmattan/libqt4-dev.lintian @@ -0,0 +1,17 @@ +libqt4-dev: executable-not-elf-or-script ./usr/share/qt4/mkspecs/macx-pbuilder/Info.plist.app +libqt4-dev: executable-not-elf-or-script ./usr/share/qt4/mkspecs/macx-xcode/Info.plist.app +libqt4-dev: executable-not-elf-or-script ./usr/share/qt4/mkspecs/macx-xcode/qmake.conf +libqt4-dev: executable-not-elf-or-script ./usr/share/qt4/mkspecs/macx-pbuilder/qmake.conf +libqt4-dev: unknown-control-file digsigsums +libqt4-dev: binary-from-other-architecture ./usr/bin/host-moc +libqt4-dev: binary-or-shlib-defines-rpath ./usr/bin/host-moc /scratchbox/host_shared/lib +libqt4-dev: binary-or-shlib-defines-rpath ./usr/bin/host-moc /host_usr/lib +libqt4-dev: binary-from-other-architecture ./usr/bin/host-qmake +libqt4-dev: binary-or-shlib-defines-rpath ./usr/bin/host-qmake /scratchbox/host_shared/lib +libqt4-dev: binary-or-shlib-defines-rpath ./usr/bin/host-qmake /host_usr/lib +libqt4-dev: binary-from-other-architecture ./usr/bin/host-rcc +libqt4-dev: binary-or-shlib-defines-rpath ./usr/bin/host-rcc /scratchbox/host_shared/lib +libqt4-dev: binary-or-shlib-defines-rpath ./usr/bin/host-rcc /host_usr/lib +libqt4-dev: binary-from-other-architecture ./usr/bin/host-uic +libqt4-dev: binary-or-shlib-defines-rpath ./usr/bin/host-uic /scratchbox/host_shared/lib +libqt4-dev: binary-or-shlib-defines-rpath ./usr/bin/host-uic /host_usr/lib diff --git a/config.profiles/harmattan/libqt4-dev.manpages b/config.profiles/harmattan/libqt4-dev.manpages new file mode 100644 index 0000000..1e9423a --- /dev/null +++ b/config.profiles/harmattan/libqt4-dev.manpages @@ -0,0 +1,5 @@ +debian/manpages/lrelease.1 +debian/manpages/lupdate.1 +debian/manpages/moc.1 +debian/manpages/qmake.1 +debian/manpages/uic.1 diff --git a/config.profiles/harmattan/libqt4-dev.postinst b/config.profiles/harmattan/libqt4-dev.postinst new file mode 100644 index 0000000..2ab29ff --- /dev/null +++ b/config.profiles/harmattan/libqt4-dev.postinst @@ -0,0 +1,21 @@ +#!/bin/sh + +set -e + +SPECDIR=/usr/share/qt4/mkspecs + +rm -f ${SPECDIR}/default +ln -s ${SPECDIR}/#PLATFORM_ARG# ${SPECDIR}/default + +PREFIX=native +if [ -f /targets/links/scratchbox.config ]; then + PREFIX=host +fi + +BINARIES="qmake moc rcc uic" + +for bin in $BINARIES; do + ln -sf "/usr/bin/${PREFIX}-${bin}" "/usr/bin/${bin}" +done + +#DEBHELPER# diff --git a/config.profiles/harmattan/libqt4-dev.prerm b/config.profiles/harmattan/libqt4-dev.prerm new file mode 100644 index 0000000..0a078be --- /dev/null +++ b/config.profiles/harmattan/libqt4-dev.prerm @@ -0,0 +1,16 @@ +#!/bin/sh + +set -e + +BINARIES="qmake moc rcc uic" + +case "$1" in + upgrade) ;; + remove|failed-upgrade|deconfigure) + for bin in $BINARIES; do + rm -f "/usr/bin/${bin}" + done + ;; +esac + +#DEBHELPER# diff --git a/config.profiles/harmattan/libqt4-doc.install b/config.profiles/harmattan/libqt4-doc.install new file mode 100644 index 0000000..badafd2 --- /dev/null +++ b/config.profiles/harmattan/libqt4-doc.install @@ -0,0 +1 @@ +usr/share/qt4/doc/html/* diff --git a/config.profiles/harmattan/libqt4-doc.lintian b/config.profiles/harmattan/libqt4-doc.lintian new file mode 100644 index 0000000..e701359 --- /dev/null +++ b/config.profiles/harmattan/libqt4-doc.lintian @@ -0,0 +1 @@ +libqt4-doc: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-gui-tests.lintian b/config.profiles/harmattan/libqt4-gui-tests.lintian new file mode 100644 index 0000000..0139465 --- /dev/null +++ b/config.profiles/harmattan/libqt4-gui-tests.lintian @@ -0,0 +1,64 @@ +libqt4-gui-tests: unknown-control-file digsigsums +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_modeltest +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qabstractbutton +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qabstractitemmodel +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qabstractprintdialog +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qabstractproxymodel +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qabstractslider +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qabstractspinbox +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qabstracttextdocumentlayout +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qabstractvideobuffer +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qabstractvideosurface +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qaction +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qboxlayout +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qfileiconprovider +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qfocusframe +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qfont +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qfontmetrics +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qformlayout +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qgraphicslayout +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qnetworkcachemetadata +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qpaintengine +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qpalette +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qparallelanimationgroup +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qpauseanimation +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qpicture +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qplaintextedit +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qpointer +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qprinterinfo +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qprogressbar +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qprogressdialog +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qpropertyanimation +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qradiobutton +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qregexpvalidator +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qscriptenginedebugger +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qscrollarea +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qscrollbar +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qsharedpointer_and_qwidget +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qsignalmapper +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qslider +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qsortfilterproxymodel +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qspinbox +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qstackedlayout +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qstackedwidget +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qstandarditem +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qstandarditemmodel +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qstatemachine +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qstringlistmodel +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qstyleoption +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qsyntaxhighlighter +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qtextblock +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qtextcursor +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qtextformat +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qtextlist +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qtextobject +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qtextscriptengine +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qtexttable +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qtoolbox +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qtoolbutton +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qtreewidgetitemiterator +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qundogroup +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qundostack +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qvideosurfaceformat +libqt4-gui-tests: file-in-unusual-dir usr/tests/qt4/tst_qwidgetaction +libqt4-gui-tests: non-standard-dir-in-usr usr/tests/ diff --git a/config.profiles/harmattan/libqt4-gui.lintian b/config.profiles/harmattan/libqt4-gui.lintian new file mode 100644 index 0000000..ea3c04b --- /dev/null +++ b/config.profiles/harmattan/libqt4-gui.lintian @@ -0,0 +1 @@ +libqt4-gui: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-help-dbg.lintian b/config.profiles/harmattan/libqt4-help-dbg.lintian new file mode 100644 index 0000000..06fd248 --- /dev/null +++ b/config.profiles/harmattan/libqt4-help-dbg.lintian @@ -0,0 +1 @@ +libqt4-help-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-help.install b/config.profiles/harmattan/libqt4-help.install new file mode 100644 index 0000000..2e06a51 --- /dev/null +++ b/config.profiles/harmattan/libqt4-help.install @@ -0,0 +1,4 @@ +usr/lib/libQtHelp.so.* +usr/lib/libQtCLucene.so.* +usr/share/qt4/translations/qt_help_de.qm +usr/share/qt4/translations/qt_help_pl.qm diff --git a/config.profiles/harmattan/libqt4-help.lintian b/config.profiles/harmattan/libqt4-help.lintian new file mode 100644 index 0000000..44aad04 --- /dev/null +++ b/config.profiles/harmattan/libqt4-help.lintian @@ -0,0 +1,2 @@ +libqt4-help: package-name-doesnt-match-sonames libQtCLucene4 libQtHelp4 +libqt4-help: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-meego-dbg.lintian b/config.profiles/harmattan/libqt4-meego-dbg.lintian new file mode 100644 index 0000000..939f381 --- /dev/null +++ b/config.profiles/harmattan/libqt4-meego-dbg.lintian @@ -0,0 +1 @@ +libqt4-meego-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-meego-dev.lintian b/config.profiles/harmattan/libqt4-meego-dev.lintian new file mode 100644 index 0000000..36c9ee8 --- /dev/null +++ b/config.profiles/harmattan/libqt4-meego-dev.lintian @@ -0,0 +1 @@ +libqt4-meego-dev: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-meego.lintian b/config.profiles/harmattan/libqt4-meego.lintian new file mode 100644 index 0000000..2f7b3f6 --- /dev/null +++ b/config.profiles/harmattan/libqt4-meego.lintian @@ -0,0 +1,2 @@ +libqt4-meego: unknown-control-file digsigsums +libqt4-meego: package-name-doesnt-match-sonames libQtMeeGoGraphicsSystemHelper4 diff --git a/config.profiles/harmattan/libqt4-meegographicssystem.install b/config.profiles/harmattan/libqt4-meegographicssystem.install new file mode 100644 index 0000000..41bf9a0 --- /dev/null +++ b/config.profiles/harmattan/libqt4-meegographicssystem.install @@ -0,0 +1 @@ +usr/lib/qt4/plugins/graphicssystems/libqmeegographicssystem.so diff --git a/config.profiles/harmattan/libqt4-meegographicssystemhelper-dev.install b/config.profiles/harmattan/libqt4-meegographicssystemhelper-dev.install new file mode 100644 index 0000000..848d6ff --- /dev/null +++ b/config.profiles/harmattan/libqt4-meegographicssystemhelper-dev.install @@ -0,0 +1,3 @@ +usr/include/qt4/QtMeeGoGraphicsSystemHelper +usr/lib/libQtMeeGoGraphicsSystemHelper.so +usr/lib/libQtMeeGoGraphicsSystemHelper.prl diff --git a/config.profiles/harmattan/libqt4-meegographicssystemhelper.install b/config.profiles/harmattan/libqt4-meegographicssystemhelper.install new file mode 100644 index 0000000..4eb904d --- /dev/null +++ b/config.profiles/harmattan/libqt4-meegographicssystemhelper.install @@ -0,0 +1 @@ +usr/lib/libQtMeeGoGraphicsSystemHelper.so.* diff --git a/config.profiles/harmattan/libqt4-multimedia-dbg.lintian b/config.profiles/harmattan/libqt4-multimedia-dbg.lintian new file mode 100644 index 0000000..e35e83e --- /dev/null +++ b/config.profiles/harmattan/libqt4-multimedia-dbg.lintian @@ -0,0 +1 @@ +libqt4-multimedia-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-multimedia.install b/config.profiles/harmattan/libqt4-multimedia.install new file mode 100644 index 0000000..2f6f97d --- /dev/null +++ b/config.profiles/harmattan/libqt4-multimedia.install @@ -0,0 +1 @@ +usr/lib/libQtMultimedia.so.* diff --git a/config.profiles/harmattan/libqt4-multimedia.lintian b/config.profiles/harmattan/libqt4-multimedia.lintian new file mode 100644 index 0000000..ef410a2 --- /dev/null +++ b/config.profiles/harmattan/libqt4-multimedia.lintian @@ -0,0 +1,2 @@ +libqt4-multimedia: unknown-control-file digsigsums +libqt4-multimedia: package-name-doesnt-match-sonames libQtMultimedia4 diff --git a/config.profiles/harmattan/libqt4-network-dbg.lintian b/config.profiles/harmattan/libqt4-network-dbg.lintian new file mode 100644 index 0000000..8cae7f3 --- /dev/null +++ b/config.profiles/harmattan/libqt4-network-dbg.lintian @@ -0,0 +1 @@ +libqt4-network-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-network.install b/config.profiles/harmattan/libqt4-network.install new file mode 100644 index 0000000..1681282 --- /dev/null +++ b/config.profiles/harmattan/libqt4-network.install @@ -0,0 +1,2 @@ +usr/lib/libQtNetwork.so.* +usr/lib/qt4/plugins/bearer/libqicdbearer.so diff --git a/config.profiles/harmattan/libqt4-network.lintian b/config.profiles/harmattan/libqt4-network.lintian new file mode 100644 index 0000000..11a2284 --- /dev/null +++ b/config.profiles/harmattan/libqt4-network.lintian @@ -0,0 +1,2 @@ +libqt4-network: package-name-doesnt-match-sonames libQtNetwork4 +libqt4-network: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-opengl-dbg.lintian b/config.profiles/harmattan/libqt4-opengl-dbg.lintian new file mode 100644 index 0000000..fb470cd --- /dev/null +++ b/config.profiles/harmattan/libqt4-opengl-dbg.lintian @@ -0,0 +1 @@ +libqt4-opengl-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-opengl-dev.lintian b/config.profiles/harmattan/libqt4-opengl-dev.lintian new file mode 100644 index 0000000..da53f96 --- /dev/null +++ b/config.profiles/harmattan/libqt4-opengl-dev.lintian @@ -0,0 +1 @@ +libqt4-opengl-dev: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-opengl.install b/config.profiles/harmattan/libqt4-opengl.install new file mode 100644 index 0000000..fc0a7a6 --- /dev/null +++ b/config.profiles/harmattan/libqt4-opengl.install @@ -0,0 +1,2 @@ +usr/lib/libQtOpenGL.so.* +usr/lib/qt4/plugins/graphicssystems/libqglgraphicssystem.so diff --git a/config.profiles/harmattan/libqt4-opengl.lintian b/config.profiles/harmattan/libqt4-opengl.lintian new file mode 100644 index 0000000..8f49420 --- /dev/null +++ b/config.profiles/harmattan/libqt4-opengl.lintian @@ -0,0 +1,3 @@ +libqt4-opengl: package-name-doesnt-match-sonames libQtOpenGL4 +libqt4-opengl: package-relation-with-self depends +libqt4-opengl: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-phonon-dbg.lintian b/config.profiles/harmattan/libqt4-phonon-dbg.lintian new file mode 100644 index 0000000..7ce2877 --- /dev/null +++ b/config.profiles/harmattan/libqt4-phonon-dbg.lintian @@ -0,0 +1 @@ +libqt4-phonon-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-phonon.install b/config.profiles/harmattan/libqt4-phonon.install new file mode 100644 index 0000000..3fdc018 --- /dev/null +++ b/config.profiles/harmattan/libqt4-phonon.install @@ -0,0 +1,2 @@ +usr/lib/libphonon.so.* +usr/lib/qt4/plugins/phonon_backend/libphonon_*.so diff --git a/config.profiles/harmattan/libqt4-phonon.lintian b/config.profiles/harmattan/libqt4-phonon.lintian new file mode 100644 index 0000000..a1a46b9 --- /dev/null +++ b/config.profiles/harmattan/libqt4-phonon.lintian @@ -0,0 +1,2 @@ +libqt4-phonon: package-name-doesnt-match-sonames libphonon4 +libqt4-phonon: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-script-dbg.lintian b/config.profiles/harmattan/libqt4-script-dbg.lintian new file mode 100644 index 0000000..9290ace --- /dev/null +++ b/config.profiles/harmattan/libqt4-script-dbg.lintian @@ -0,0 +1 @@ +libqt4-script-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-script.install b/config.profiles/harmattan/libqt4-script.install new file mode 100644 index 0000000..f8cc5c4 --- /dev/null +++ b/config.profiles/harmattan/libqt4-script.install @@ -0,0 +1,3 @@ +usr/lib/libQtScript.so.* +usr/lib/libQtScriptTools.so.* +usr/lib/qt4/plugins/script/libqtscriptdbus.so diff --git a/config.profiles/harmattan/libqt4-script.lintian b/config.profiles/harmattan/libqt4-script.lintian new file mode 100644 index 0000000..51b6944 --- /dev/null +++ b/config.profiles/harmattan/libqt4-script.lintian @@ -0,0 +1,2 @@ +libqt4-script: package-name-doesnt-match-sonames libQtScript4 libQtScriptTools4 +libqt4-script: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-sql-dbg.lintian b/config.profiles/harmattan/libqt4-sql-dbg.lintian new file mode 100644 index 0000000..5f4f189 --- /dev/null +++ b/config.profiles/harmattan/libqt4-sql-dbg.lintian @@ -0,0 +1 @@ +libqt4-sql-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-sql-sqlite-dbg.lintian b/config.profiles/harmattan/libqt4-sql-sqlite-dbg.lintian new file mode 100644 index 0000000..6e53ab6 --- /dev/null +++ b/config.profiles/harmattan/libqt4-sql-sqlite-dbg.lintian @@ -0,0 +1 @@ +libqt4-sql-sqlite-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-sql-sqlite.install b/config.profiles/harmattan/libqt4-sql-sqlite.install new file mode 100644 index 0000000..6590079 --- /dev/null +++ b/config.profiles/harmattan/libqt4-sql-sqlite.install @@ -0,0 +1,2 @@ +usr/lib/qt4/plugins/sqldrivers/libqsqlite.so + diff --git a/config.profiles/harmattan/libqt4-sql-sqlite.lintian b/config.profiles/harmattan/libqt4-sql-sqlite.lintian new file mode 100644 index 0000000..a6eb651 --- /dev/null +++ b/config.profiles/harmattan/libqt4-sql-sqlite.lintian @@ -0,0 +1 @@ +libqt4-sql-sqlite: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-sql.install b/config.profiles/harmattan/libqt4-sql.install new file mode 100644 index 0000000..5ff4a1f --- /dev/null +++ b/config.profiles/harmattan/libqt4-sql.install @@ -0,0 +1,2 @@ +usr/lib/libQtSql.so.* + diff --git a/config.profiles/harmattan/libqt4-sql.lintian b/config.profiles/harmattan/libqt4-sql.lintian new file mode 100644 index 0000000..b20d867 --- /dev/null +++ b/config.profiles/harmattan/libqt4-sql.lintian @@ -0,0 +1,2 @@ +libqt4-sql: package-name-doesnt-match-sonames libQtSql4 +libqt4-sql: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-svg-dbg.lintian b/config.profiles/harmattan/libqt4-svg-dbg.lintian new file mode 100644 index 0000000..171ee74 --- /dev/null +++ b/config.profiles/harmattan/libqt4-svg-dbg.lintian @@ -0,0 +1 @@ +libqt4-svg-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-svg.install b/config.profiles/harmattan/libqt4-svg.install new file mode 100644 index 0000000..21289f8 --- /dev/null +++ b/config.profiles/harmattan/libqt4-svg.install @@ -0,0 +1,4 @@ +usr/lib/libQtSvg.so.* +usr/lib/qt4/plugins/iconengines/libqsvgicon.so +usr/lib/qt4/plugins/imageformats/libqsvg.so + diff --git a/config.profiles/harmattan/libqt4-svg.lintian b/config.profiles/harmattan/libqt4-svg.lintian new file mode 100644 index 0000000..31b3b15 --- /dev/null +++ b/config.profiles/harmattan/libqt4-svg.lintian @@ -0,0 +1,2 @@ +libqt4-svg: package-name-doesnt-match-sonames libQtSvg4 +libqt4-svg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-test-dbg.lintian b/config.profiles/harmattan/libqt4-test-dbg.lintian new file mode 100644 index 0000000..587353e --- /dev/null +++ b/config.profiles/harmattan/libqt4-test-dbg.lintian @@ -0,0 +1 @@ +libqt4-test-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-test.install b/config.profiles/harmattan/libqt4-test.install new file mode 100644 index 0000000..7883dee --- /dev/null +++ b/config.profiles/harmattan/libqt4-test.install @@ -0,0 +1,2 @@ +usr/lib/libQtTest.so.* + diff --git a/config.profiles/harmattan/libqt4-test.lintian b/config.profiles/harmattan/libqt4-test.lintian new file mode 100644 index 0000000..db7b2a6 --- /dev/null +++ b/config.profiles/harmattan/libqt4-test.lintian @@ -0,0 +1,2 @@ +libqt4-test: package-name-doesnt-match-sonames libQtTest4 +libqt4-test: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-webkit.lintian b/config.profiles/harmattan/libqt4-webkit.lintian new file mode 100644 index 0000000..9c70f48 --- /dev/null +++ b/config.profiles/harmattan/libqt4-webkit.lintian @@ -0,0 +1 @@ +libqt4-webkit: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-xml-dbg.lintian b/config.profiles/harmattan/libqt4-xml-dbg.lintian new file mode 100644 index 0000000..8df20db --- /dev/null +++ b/config.profiles/harmattan/libqt4-xml-dbg.lintian @@ -0,0 +1 @@ +libqt4-xml-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-xml.install b/config.profiles/harmattan/libqt4-xml.install new file mode 100644 index 0000000..6366cb3 --- /dev/null +++ b/config.profiles/harmattan/libqt4-xml.install @@ -0,0 +1 @@ +usr/lib/libQtXml.so.* diff --git a/config.profiles/harmattan/libqt4-xml.lintian b/config.profiles/harmattan/libqt4-xml.lintian new file mode 100644 index 0000000..bd61725 --- /dev/null +++ b/config.profiles/harmattan/libqt4-xml.lintian @@ -0,0 +1,2 @@ +libqt4-xml: package-name-doesnt-match-sonames libQtXml4 +libqt4-xml: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-xmlpatterns-dbg.lintian b/config.profiles/harmattan/libqt4-xmlpatterns-dbg.lintian new file mode 100644 index 0000000..aafa724 --- /dev/null +++ b/config.profiles/harmattan/libqt4-xmlpatterns-dbg.lintian @@ -0,0 +1 @@ +libqt4-xmlpatterns-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4-xmlpatterns.install b/config.profiles/harmattan/libqt4-xmlpatterns.install new file mode 100644 index 0000000..1997474 --- /dev/null +++ b/config.profiles/harmattan/libqt4-xmlpatterns.install @@ -0,0 +1,3 @@ +usr/lib/libQtXmlPatterns.so.* +usr/bin/xmlpatterns + diff --git a/config.profiles/harmattan/libqt4-xmlpatterns.lintian b/config.profiles/harmattan/libqt4-xmlpatterns.lintian new file mode 100644 index 0000000..785b999 --- /dev/null +++ b/config.profiles/harmattan/libqt4-xmlpatterns.lintian @@ -0,0 +1,2 @@ +libqt4-xmlpatterns: package-name-doesnt-match-sonames libQtXmlPatterns4 +libqt4-xmlpatterns: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqt4.lintian b/config.profiles/harmattan/libqt4.lintian new file mode 100644 index 0000000..2eb0928 --- /dev/null +++ b/config.profiles/harmattan/libqt4.lintian @@ -0,0 +1 @@ +libqt4: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqtcore4-dbg.lintian b/config.profiles/harmattan/libqtcore4-dbg.lintian new file mode 100644 index 0000000..8dfcc0c --- /dev/null +++ b/config.profiles/harmattan/libqtcore4-dbg.lintian @@ -0,0 +1 @@ +libqtcore4-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqtcore4.install b/config.profiles/harmattan/libqtcore4.install new file mode 100644 index 0000000..1c8fc57 --- /dev/null +++ b/config.profiles/harmattan/libqtcore4.install @@ -0,0 +1,6 @@ +usr/lib/libQtCore.so.* +usr/lib/qt4/plugins/codecs/lib*.so +usr/share/qt4/translations/qt_??.qm +usr/share/qt4/translations/qt_??_??.qm +usr/share/qt4/translations/qvfb_*.qm + diff --git a/config.profiles/harmattan/libqtcore4.lintian b/config.profiles/harmattan/libqtcore4.lintian new file mode 100644 index 0000000..1c14b59 --- /dev/null +++ b/config.profiles/harmattan/libqtcore4.lintian @@ -0,0 +1,2 @@ +libqtcore4: package-name-doesnt-match-sonames libQtCLucene4 libQtCore4 +libqtcore4: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqtgui4-dbg.lintian b/config.profiles/harmattan/libqtgui4-dbg.lintian new file mode 100644 index 0000000..d166ea8 --- /dev/null +++ b/config.profiles/harmattan/libqtgui4-dbg.lintian @@ -0,0 +1 @@ +libqtgui4-dbg: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/libqtgui4.install b/config.profiles/harmattan/libqtgui4.install new file mode 100644 index 0000000..4b4fa9c --- /dev/null +++ b/config.profiles/harmattan/libqtgui4.install @@ -0,0 +1,7 @@ +usr/lib/libQtGui.so.* +usr/lib/qt4/plugins/imageformats/libqgif.so +usr/lib/qt4/plugins/imageformats/libqico.so +usr/lib/qt4/plugins/imageformats/libqjpeg.so +usr/lib/qt4/plugins/imageformats/libqtiff.so +usr/lib/qt4/plugins/inputmethods/libqimsw-multi.so +usr/lib/qt4/plugins/accessible/libqtaccessiblewidgets.so diff --git a/config.profiles/harmattan/libqtgui4.lintian b/config.profiles/harmattan/libqtgui4.lintian new file mode 100644 index 0000000..e9d4ec9 --- /dev/null +++ b/config.profiles/harmattan/libqtgui4.lintian @@ -0,0 +1,2 @@ +libqtgui4: package-name-doesnt-match-sonames libQtGui4 +libqtgui4: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/manpages/lrelease.1 b/config.profiles/harmattan/manpages/lrelease.1 new file mode 100644 index 0000000..174d40c --- /dev/null +++ b/config.profiles/harmattan/manpages/lrelease.1 @@ -0,0 +1,89 @@ +.TH lrelease 1 "18 October 2001" "Trolltech AS" \" -*- nroff -*- +.\" +.\" Copyright 2001 Trolltech AS. All rights reserved. +.\" +.\" This file may be distributed and/or modified under the terms of the +.\" GNU General Public License version 2 as published by the Free Software +.\" Foundation and appearing in the file LICENSE.GPL included in the +.\" packaging of this file. +.\" +.\" This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +.\" WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +.\" +.\" See http://www.trolltech.com/gpl/ for GPL licensing information. +.\" +.\" Contact info@trolltech.com if any conditions of this licensing are +.\" not clear to you. +.\" +.SH NAME +lrelease \- generate Qt message files from Qt Linguist translation files +.SH SYNOPSIS +.B lrelease +.RI "[ " options " ] " project-file +.br +.B lrelease +.RI "[ " options " ] " ts-files " [ -qm " qm-file " ]" +.SH DESCRIPTION +This page documents the +.B Qt Linguist Release +tool for the Qt GUI toolkit. +.B Lrelease +reads a qmake/tmake project file (.pro file) and converts the +translation files (.ts files) specified in it into Qt message files +(.qm files) used by the application to translate. +.PP +The .qm file format is a compact binary format that provides +extremely fast lookups for translations and that is used by Qt. +.SH OPTIONS +.TP +.I "-help" +Display the usage and exit. +.TP +.I "-nocompress" +Do not compress the .qm files. +.TP +.I "-verbose" +Explain what is being done. +.TP +.I "-version" +Display the version of +.B lrelease +and exit. +.SH USAGE +Here is an example .pro file that can be given to +.B lrelease: +.PP +.in +4 +.nf +HEADERS = funnydialog.h \\ + wackywidget.h +SOURCES = funnydialog.cpp \\ + main.cpp \\ + wackywidget.cpp +FORMS = fancybox.ui +TRANSLATIONS = gnomovision_dk.ts \\ + gnomovision_fi.ts \\ + gnomovision_no.ts \\ + gnomovision_se.ts +.fi +.in -4 +.PP +When running +.B lrelease +on this project file, the Qt message files gnomovision_dk.qm, +gnomovision_fi.qm, gnomovision_no.qm and gnomovision_se.qm will be +generated from gnomovision_dk.ts, gnomovision_fi.ts, +gnomovision_no.ts and gnomovision_se.ts, respectively. +.PP +.B Lrelease +can also be invoked with a list of .ts files to convert: +.PP +.in +4 +.nf +lrelease gnomovision_*.ts +.fi +.in -4 +.SH "SEE ALSO" +.BR lupdate (1) +and +.BR http://doc.trolltech.com/i18n.html diff --git a/config.profiles/harmattan/manpages/lupdate.1 b/config.profiles/harmattan/manpages/lupdate.1 new file mode 100644 index 0000000..722657d --- /dev/null +++ b/config.profiles/harmattan/manpages/lupdate.1 @@ -0,0 +1,95 @@ +.TH lupdate 1 "18 October 2001" "Trolltech AS" \" -*- nroff -*- +.\" +.\" Copyright 2001 Trolltech AS. All rights reserved. +.\" +.\" This file may be distributed and/or modified under the terms of the +.\" GNU General Public License version 2 as published by the Free Software +.\" Foundation and appearing in the file LICENSE.GPL included in the +.\" packaging of this file. +.\" +.\" This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE +.\" WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +.\" +.\" See http://www.trolltech.com/gpl/ for GPL licensing information. +.\" +.\" Contact info@trolltech.com if any conditions of this licensing are +.\" not clear to you. +.\" +.SH NAME +lupdate \- update Qt Linguist translation files +.SH SYNOPSIS +.B lupdate +.RI "[ " options " ] " project-file +.br +.B lupdate +.RI "[ " options " ] " source-files " -ts " ts-files +.SH DESCRIPTION +This page documents the +.B Qt Linguist Update +tool for the Qt GUI toolkit. +.B Lupdate +reads a qmake/tmake project file (.pro file), finds the translatable +strings in the specified source, header and interface files, and +updates the translation files (.ts files) specified in it. The +translation files are given to the translator who uses +.B Qt Linguist +to read the files and insert the translations. +.PP +The .ts file format is a simple human-readable XML format that can be +used with version control systems if required. +.PP +.SH OPTIONS +.TP +.I "-help" +Display the usage and exit. +.TP +.I "-noobsolete" +Drop all obsolete strings. +.TP +.I "-verbose" +Explain what is being done. +.TP +.I "-version" +Display the version of +.B lupdate +and exit. +.SH USAGE +Here is an example .pro file that can be given to +.B lupdate: +.PP +.in +4 +.nf +HEADERS = funnydialog.h \\ + wackywidget.h +SOURCES = funnydialog.cpp \\ + main.cpp \\ + wackywidget.cpp +FORMS = fancybox.ui +TRANSLATIONS = gnomovision_dk.ts \\ + gnomovision_fi.ts \\ + gnomovision_no.ts \\ + gnomovision_se.ts +.fi +.in -4 +.PP +When running +.B lupdate +on this project file, the translatable strings in all the files +listed in the HEADERS, SOURCES and FORMS entries will be put in +the translation files listed in the TRANSLATIONS entry. Previous +translations will be reused as far as possible, and translated +strings that have vanished from the source files are marked obsolete. +.PP +.B Lupdate +can also be invoked with a list of C++ source files, .ui files +and .ts files: +.PP +.in +4 +.nf +lupdate *.cpp *.h *.ui -ts gnomovision_dk.ts +.fi +.in -4 +.SH "SEE ALSO" +.BR lrelease (1) +and +.BR http://doc.trolltech.com/i18n.html diff --git a/config.profiles/harmattan/manpages/moc.1 b/config.profiles/harmattan/manpages/moc.1 new file mode 100644 index 0000000..131827a --- /dev/null +++ b/config.profiles/harmattan/manpages/moc.1 @@ -0,0 +1,449 @@ +.TH moc 1 "24 June 2001" "Trolltech AS" \" -*- nroff -*- +.\" +.\" $Id: qt/moc.1 3.3.4 edited May 27 2003 $ +.\" +.\" Copyright 1992-2002 Trolltech AS. All rights reserved. +.\" +.\" This file is part of Qt and may be distributed and used according to +.\" the terms and conditions described in the LICENSE file. +.\" +.nh +.SH NAME +moc \- generate Qt meta object support code +.SH SYNOPSIS +.B moc +[\-o file] [\-i] [\-f] [\-k] [\-ldbg] [\-nw] [\-p path] [\-q path] [\-v] file +.SH DESCRIPTION +This page documents the +.B Meta Object Compiler +for the Qt GUI application framework. The +.B moc +reads one or more C++ class declarations from a C++ header or source +file and generates one C++ source file containing meta object +information for the classes. The C++ source file generated by the +.B moc +must be compiled and linked with the implementation of the class (or it +can be #included into the class's source file). +.PP +If you use +.B qmake +to create your Makefiles, build rules will be included that call the +.B moc +when required, so you will not need to use the +.B moc +directly. +.PP +In brief, the meta object system is a structure used by Qt (see +.BR http://doc.trolltech.com ")" +for component programming and run time type information. It adds +properties and inheritance information to (some) classes and +provides a new type of communication between those instances of those +classes, signal\-slot +connections. +.SH OPTIONS +.TP +.I "\-o file" +Write output to +.I file +rather than to stdout. +.TP +.I \-f +Force the generation of an #include statement in the output. +This is the default for files whose name matches the regular +expression .[hH][^.]* (i.e. the extension starts with +.B H +or +.B h +). This +option is only useful if you have header files that do not follow the +standard naming conventions. +.TP +.I "\-i" +Do not generate an #include statement in the output. This may be used +to run +.B moc +on a C++ file containing one or more class declarations. You should then +#include the meta object code in the .cpp file (see USAGE below). If both +.I \-f +and +.I \-i +are present, the last one wins. +.TP +.I "\-nw" +Do not generate any warnings. Not recommended. +.TP +.I "\-ldbg" +Write a flood of lex debug information to stdout. +.TP +.I "\-p path" +Makes +.B moc +prepend +.IR path / +to the file name in the generated #include statement (if one is generated). +.TP +.I "\-q path" +Makes +.B moc +prepend +.IR path / +to the file name of qt #include files in the generated code. +.TP +.I "\-v" +Displays the version of +.B moc +and Qt. +.PP +You can explicitly tell the +.B moc +not to parse parts of a header +file. It recognizes any C++ comment (//) that contains the substrings +MOC_SKIP_BEGIN or MOC_SKIP_END. They work as you would expect and you +can have several levels of them. The net result as seen by the +.B moc +is as if you had removed all lines between a MOC_SKIP_BEGIN and a +MOC_SKIP_END +.SH USAGE +.B moc +is almost always invoked by +.BR make (1), +not by hand. +.PP +.B moc +is typically used with an input file containing class declarations +like this: +.PP +.in +4 +.nf +class YourClass : public QObject { + Q_OBJECT + Q_PROPERTY( ... ) + Q_CLASSINFO( ... ) + +public: + YourClass( QObject * parent=0, const char * name=0 ); + ~YourClass(); + +signals: + +public slots: + +}; +.fi +.in -4 +.PP +Here is a useful makefile rule if you only use GNU make: +.PP +.in +4 +.nf +m%.cpp: %.h + moc $< -o $@ +.fi +.in -4 +.PP +If you want to write portably, you can use individual rules of the +following form: +.PP +.in +4 +.nf +mNAME.cpp: NAME.h + moc $< -o $@ +.fi +.in -4 +.PP +You must also remember to add +.I mNAME.cpp +to your SOURCES (substitute your favorite name) variable and +.I mNAME.o +to your OBJECTS variable. +.PP +(While we prefer to name our C++ source files .cpp, the +.B moc +doesn't know that, so you can use .C, .cc, .CC, .cxx or even .c++ if +you prefer.) +.PP +If you have class declarations in C++ files, we recommend that you use +a makefile rule like this: +.PP +.in +4 +.nf +NAME.o: mNAME.cpp + +mNAME.cpp: NAME.cpp + moc -i $< -o $@ +.fi +.in -4 +.PP +This guarantees that +.BR make (1) +will run the +.B moc +before it compiles +.IR NAME.cpp . +You can then put +.PP +.ti +4 +#include "nNAME.cpp" +.PP +at the end of +.IR NAME.cpp , +where all the classes declared in that file are fully known. +.SH DIAGNOSTICS +Sometimes you may get linkage errors, saying that +YourClass::className() is undefined or that YourClass lacks a vtbl. +Those errors happen most often when you forget to compile the +moc-generated C++ code or include that object file in the link +command. +.PP +The +.B moc +will warn you about a number of dangerous or illegal constructs. +.SH BUGS + +The +.B moc +does not expand #include or #define, it simply skips any preprocessor +directives it encounters. This is regrettable, but is normally not a +problem in practice. + +The +.B moc +does not handle all of C++. The main problem is that class templates +cannot have signals or slots. This is an important bug. Here is an +example: +.PP +.in +4 +.nf +class SomeTemplate : public QFrame { + Q_OBJECT + .... +signals: + void bugInMocDetected( int ); +}; +.fi +.in -4 +.PP +Less importantly, the following constructs are illegal. All of them +have have alternatives which we think are usually better, so removing +these limitations is not a high priority for us. +.SS "Multiple inheritance requires QObject to be first." +If you are using multiple inheritance, +.B moc +assumes that the +.B first +inherited class is a subclass of QObject. Also, be sure that +.B only +the first inherited class is a QObject. +.PP +.in +4 +.nf +class SomeClass : public QObject, public OtherClass { + ... +}; +.fi +.in -4 +.PP +This bug is almost impossible to fix; since the +.B moc +does not expand +#include or #define, it cannot find out which one of the base classes is a +QObject. +.SS "Function pointers cannot be arguments to signals or slots." +In most cases where you would consider that, we think inheritance is a +better alternative. Here is an example of illegal syntax: +.PP +.in +4 +.nf +class SomeClass : public QObject { + Q_OBJECT + ... +public slots: + // illegal + void apply( void (*apply)(List *, void *), void * ); +}; +.fi +.in -4 +.PP +You can work around this restriction like this: +.PP +.in +4 +.nf +typedef void (*ApplyFunctionType)( List *, void * ); + +class SomeClass : public QObject { + Q_OBJECT + ... +public slots: + void apply( ApplyFunctionType, char * ); +}; +.fi +.in -4 +.PP +It may sometimes be even better to replace the function pointer with +inheritance and virtual functions, signals or slots. +.SS "Friend declarations cannot be placed in signals or slots sections" +Sometimes it will work, but in general, friend declarations cannot be +placed in +.B signals +or +.B slots +sections. Put them in the good old +.BR private ", " protected +or +.B public +sections instead. Here is an example of the illegal syntax: +.PP +.in +4 +.nf +class SomeClass : public QObject { + Q_OBJECT + ... +signals: + friend class ClassTemplate; // illegal +}; +.fi +.in -4 +.SS "Signals and slots cannot be upgraded" +The C++ feature of upgrading an inherited member function to +.B public +status is not extended to cover signals and slots. Here is an illegal +example: +.PP +.in +4 +.nf +class Whatever : public QButtonGroup { + ... +public slots: + QButtonGroup::buttonPressed; // illegal + ... +}; +.fi +.in -4 +.PP +The QButtonGroup::buttonPressed() slot is protected. +.PP +C++ quiz: What happens if you try to upgrade a protected member +function which is overloaded? +.IP +- All the functions are upgraded. +.IP +- That is not legal C++. +.\" Good idea, but look in the SEE ALSO section... +.SS "Type macros cannot be used for signal and slot arguments" + +Since the +.B moc +does not expand #define, type macros that take an argument +will not work in signals and slots. Here is an illegal example: +.PP +.in +4 +.nf +#ifdef ultrix +#define SIGNEDNESS(a) unsigned a +#else +#define SIGNEDNESS(a) a +#endif +class Whatever : public QObject { + ... +signals: + void someSignal( SIGNEDNESS(int) ); // illegal +}; +.PP +A #define without arguments works. +.fi +.in -4 +.SS "Nested classes cannot be in the signals or slots sections nor have signals or slots" +Here's an example: +.PP +.in +4 +.nf +class A { + Q_OBJECT +public: + class B { + public slots: // illegal + void b(); + ... + }; +signals: + class B { // illegal + void b(); + ... + }: +}; +.fi +.in -4 +.PP +.SS "Constructors cannot be used in signals or slots sections" +It is a mystery to us why anyone would put a constructor on either the +.B signals +or +.B slots +sections. You can't, anyway (except that it happens to work in some +cases). Put them in +.BR private ", " protected +or +.B public +sections, where they belong. Here is an example of the illegal syntax: +.PP +.in +4 +.nf +class SomeClass : public QObject { + Q_OBJECT +public slots: + SomeClass( QObject *parent, const char *name ) + : QObject( parent, name ) {} // illegal + ... +}; +.fi +.in -4 +.SS "Properties need to be declared before the public section that contains the respective get and set functions" +.PP +Declaring the first property within or after the public section that +contains the type definition and the respective get and set functions +does not work as expected. The +.B moc +will complain that it can neither +find the functions nor resolve the type. Here is an example of the +illegal syntax: +.PP +.in +4 +.nf +class SomeClass : public QObject { + Q_OBJECT +public: + ... + // illegal + Q_PROPERTY( Priority priority READ priority WRITE setPriority ) + Q_ENUMS( Priority ) + enum Priority { High, Low, VeryHigh, VeryLow }; + void setPriority( Priority ); + Priority priority() const; + ... +}; +.fi +.in -4 +.PP +Work around this limitation by declaring all properties at the +beginning of the class declaration, right after Q_OBJECT: +.PP +.in +4 +.nf +class SomeClass : public QObject { + Q_OBJECT + Q_PROPERTY( Priority priority READ priority WRITE setPriority ) + Q_ENUMS( Priority ) +public: + ... + enum Priority { High, Low, VeryHigh, VeryLow }; + void setPriority( Priority ); + Priority priority() const; + ... +}; +.fi +.in -4 +.PP +.SH "SEE ALSO" +.BR http://www.trolltech.com ", " +.BR "C++ ARM, section r.11.3" " (for the answer to the quiz), and" +.BR http://doc.trolltech.com " (for complete Qt documentation)." diff --git a/config.profiles/harmattan/manpages/qmake.1 b/config.profiles/harmattan/manpages/qmake.1 new file mode 100644 index 0000000..62ab78a --- /dev/null +++ b/config.profiles/harmattan/manpages/qmake.1 @@ -0,0 +1,106 @@ +.TH QMAKE 1 "2005-07-23" +.SH NAME +qmake \- cross-platform makefile generator for Qt + +.SH SYNOPSIS +.B qmake +.I "[mode] [options] [files]" +.br +.SH "DESCRIPTION" +.B qmake +has two modes, one mode for generating project files based on some +heuristics, and the other for generating makefiles. Normally you +shouldn't need to specify a mode, as makefile generation is the default +mode for qmake, but you may use this to test qmake on an existing +project. + +.SH MODE +.TP +.B "\-project" +Put qmake into project file generation mode In this mode qmake +interprets files as files to be built, defaults to *.c; *.ui; *.y; *.l; +*.ts; *.qrc; *.h; *.hpp; *.hh; *.hxx; *.H; *.cpp; *.cc; *.cxx; *.C +.TP +.B "\-makefile" +Put qmake into makefile generation mode (default) In this mode qmake +interprets files as project files to be processed, if skipped qmake will +try to find a project file in your current working directory + +.SH WARNINGS OPTIONS +.TP +.BI "\-Wnone" +Turn off all warnings +.TP +.BI "\-Wall" +Turn on all warnings +.TP +.BI "\-Wparser" +Turn on parser warnings +.TP +.BI "\-Wlogic" +Turn on logic warnings + +.SH OPTIONS +.TP +.BI "\-o" file +Write output to file +.TP +.BI "\-unix" +Run in unix mode +.TP +.BI "\-win32" +Run in win32 mode +.TP +.BI "\-macx" +Run in Mac OS X mode +.TP +.BI "\-d" +Increase debug level +.TP +.BI "\-t" templ +Overrides TEMPLATE as templ +.TP +.BI "\-tp" prefix +Overrides TEMPLATE so that prefix is prefixed +.TP +into the value +.BI "\-help" +This help +.TP +.BI "\-v" +Version information +.TP +.BI "\-after" +All variable assignments after this will be parsed after [files] +.TP +.BI "\-norecursive" +Don't do a recursive search +.TP +.BI "\-recursive" +Do a recursive search +.TP +.BI "\-cache file" +Use file as cache [makefile mode only] +.TP +.BI "\-spec spec" +Use spec as QMAKESPEC [makefile mode only] +.TP +.BI "\-nocache" +Don't use a cache file [makefile mode only] +.TP +.BI "\-nodepend" +Don't generate dependencies [makefile mode only] +.TP +.BI "\-nomoc" +Don't generate moc targets [makefile mode only] +.TP +.BI "\-nopwd" +Don't look for files in pwd [project mode only] + +.SH SEE ALSO +.PP +.BR /usr/share/qt4/doc/html/qmake-manual.html, +.SH AUTHOR +This manual page was written by Brian Nelson based on +the output of +.B "qmake -help". diff --git a/config.profiles/harmattan/manpages/qtconfig.1 b/config.profiles/harmattan/manpages/qtconfig.1 new file mode 100644 index 0000000..08989fb --- /dev/null +++ b/config.profiles/harmattan/manpages/qtconfig.1 @@ -0,0 +1,34 @@ +.TH "qtconfig" "1" "3.0.3" "Troll Tech AS, Norway." "" +.SH "NAME" +.LP +qtconfig \- Configuration tool for Qt +.SH "DESCRIPTION" +.LP +QConfig allows for GUI based configuration of Qt and + other Qt based sources. + +.SH "ENVIRONMENT VARIABLES" +.LP +.TP +\fBQTDIR\fP +Specifies the base Qt dir +.SH "AUTHORS" +.LP +TrollTech +.TH "qtconfig" "1" "3.0.3" "Troll Tech AS, Norway." "" +.SH "NAME" +.LP +qtconfig \- Configuration tool for Qt +.SH "DESCRIPTION" +.LP +QConfig allows for GUI based configuration of Qt and + other Qt based sources. + +.SH "ENVIRONMENT VARIABLES" +.LP +.TP +\fBQTDIR\fP +Specifies the base Qt dir +.SH "AUTHORS" +.LP +TrollTech diff --git a/config.profiles/harmattan/manpages/uic.1 b/config.profiles/harmattan/manpages/uic.1 new file mode 100644 index 0000000..79d03b8 --- /dev/null +++ b/config.profiles/harmattan/manpages/uic.1 @@ -0,0 +1,136 @@ +.TH uic 1 "2 Aug 2001" "Trolltech AS" \" -*- nroff -*- +.\" +.\" Copyright 2000 Trolltech AS. All rights reserved. +.\" +.\" This file is part of Qt and may be distributed and used according to +.\" the terms and conditions described in the LICENSE file. +.\" +.SH NAME +uic \- Qt user interface compiler +.SH SYNOPSIS +.B uic +[options] file +.SH DESCRIPTION +This page documents the +.B User Interface Compiler +for the Qt GUI toolkit. The +.B uic +reads a user interface definition (.ui) file in XML as generated by +.I Qt Designer +and creates corresponding C++ header or source files. It also +generates an image file that embeds raw image data in C++ source code. +.PP +.PP +Generate declaration: +.br +.I "\fB uic [options] \fI" +.br +.PP +Generate implementation: +.br +.I "\fB uic [options] -impl \fI " +.br + \fI\fP: name of the declaration file +.br +.PP +Generate image collection: +.br +.I "\fB uic [options] -embed \fI \fP ..." +.br + \fI\fP: project name + \fI\fP: image files +.br +.\" .PP +.\" Generate binary UI file: +.\" .br +.\" .I "\fB uic [options] -binary \fI" +.\" .br +.PP +.PP +For convenience, +.B uic +can also generate declaration or implementation stubs for subclasses. +.PP +Generate subclass declaration: +.br +.I "\fB uic [options] -subdecl \fI " +.br + \fI\fP: name of the subclass to generate +.br + \fI\fP: declaration file of the baseclass +.PP +Generate subclass implementation: +.br +.I "\fB uic [options] -subimpl \fI " +.br + \fI\fP: name of the subclass to generate +.br + \fI\fP: declaration file of the subclass + +.SH GENERAL OPTIONS +.TP +.I "-o file" +Write output to +.I file +rather than to stdout. +.TP +.I "-nofwd" +Omit forward declarations of custom classes in the generated +header file. This is necessary if typedef classes are used. +.TP +.I "-tr func" +Use +.I func() +instead of tr() for internationalization. +.TP +.I "-version" +Display the version of +.B uic +and exit. + +.SH USAGE +.B uic +is almost always invoked by +.BR make (1), +rather than by hand. +.PP +Here are useful makefile rules if you only use GNU make: +.PP +.in +4 +%.h: %.ui +.br + uic $< -o $@ +.br +%.cpp: %.ui +.br + uic -impl $*.h $< -o $@ +.in -4 +.PP +If you want to write portably, you can use individual rules of the +following form: +.PP +.in +4 +NAME.h: NAME.ui +.br + uic $< -o $@ +.br +NAME.cpp: NAME.ui +.br + uic -impl $*.h $< -o $@ +.in -4 +.PP +You must also remember to add +.I NAME.cpp +to your SOURCES (substitute your favorite name) variable and +.I NAME.o +to your OBJECTS variable. +.PP +(While we prefer to name our C++ source files .cpp, the +.B uic +doesn't care, so you can use .C, .cc, .CC, .cxx or even .c++ if +you prefer.) +.PP +.SH "SEE ALSO" +.BR http://www.trolltech.com/ " " +.SH AUTHOR +Trolltech AS diff --git a/config.profiles/harmattan/mkspecs/linux-g++-cross/qmake.conf b/config.profiles/harmattan/mkspecs/linux-g++-cross/qmake.conf new file mode 100644 index 0000000..245da1e --- /dev/null +++ b/config.profiles/harmattan/mkspecs/linux-g++-cross/qmake.conf @@ -0,0 +1,54 @@ +# +# qmake configuration for linux-g++-cross +# + +MAKEFILE_GENERATOR = UNIX +TEMPLATE = app +CONFIG += qt warn_on release incremental link_prl +QT += core gui +QMAKE_INCREMENTAL_STYLE = sublib + +include(../common/g++.conf) +include(../common/linux.conf) + +QMAKE_CC = arm-none-linux-gnueabi-gcc +QMAKE_CFLAGS += -march=armv7a -mcpu=cortex-a8 -mfpu=vfp -mfloat-abi=softfp -fno-omit-frame-pointer -fno-optimize-sibling-calls +QMAKE_CFLAGS_RELEASE = -O3 +QMAKE_CFLAGS_DEBUG = -O0 + +QMAKE_CXX = arm-none-linux-gnueabi-g++ +QMAKE_CXXFLAGS += $$QMAKE_CFLAGS +QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE +QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG + +QMAKE_LINK = arm-none-linux-gnueabi-g++ +QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++ +QMAKE_LINK_C = arm-none-linux-gnueabi-gcc +QMAKE_LINK_C_SHLIB = arm-none-linux-gnueabi-gcc +QMAKE_LFLAGS += -Wl,-O1 -Wl,--hash-style=gnu + +QMAKE_AR = arm-none-linux-gnueabi-ar cqs +QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy +QMAKE_STRIP = arm-none-linux-gnueabi-strip + +#QMAKE_INCDIR = +#QMAKE_LIBDIR = +QMAKE_INCDIR_X11 = +QMAKE_LIBDIR_X11 = +#QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS] +#QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS] +QMAKE_INCDIR_OPENGL = +QMAKE_LIBDIR_OPENGL = +#QMAKE_INCDIR_EGL = +#QMAKE_LIBDIR_EGL = +#QMAKE_INCDIR_OPENVG = +#QMAKE_LIBDIR_OPENVG = + +QMAKE_LIBS_X11 = -lXext -lX11 -lm -lz -lXau -lxcb -lXdmcp -lexpat + +QMAKE_LIBS_OPENGL = -lEGL -lGLESv2 -lIMGegl -lsrv_um +QMAKE_LIBS_OPENGL_QT = -lEGL -lGLESv2 -lIMGegl -lsrv_um + +QT_CFLAGS_GSTREAMER += -pthread -Igstreamer-0.10 -Iglib-2.0 -Iglib-2.0/include + +load(qt_config) diff --git a/config.profiles/harmattan/mkspecs/linux-g++-cross/qplatformdefs.h b/config.profiles/harmattan/mkspecs/linux-g++-cross/qplatformdefs.h new file mode 100644 index 0000000..857eaf3 --- /dev/null +++ b/config.profiles/harmattan/mkspecs/linux-g++-cross/qplatformdefs.h @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the qmake spec of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "../linux-g++/qplatformdefs.h" diff --git a/config.profiles/harmattan/not-installed b/config.profiles/harmattan/not-installed new file mode 100644 index 0000000..d19a756 --- /dev/null +++ b/config.profiles/harmattan/not-installed @@ -0,0 +1,18 @@ +usr/share/qt4/translations/qvfb_pl.qm +usr/share/qt4/translations/qvfb_zh_TW.qm +usr/share/qt4/translations/qvfb_zh_CN.qm +usr/lib/libQtSvg.la +usr/lib/libQtXml.la +usr/lib/libQtSql.la +usr/lib/libQtOpenGL.la +usr/lib/libQtNetwork.la +usr/lib/libQtGui.la +usr/lib/libQt3Support.la +usr/lib/libQtTest.la +usr/lib/libQtCLucene.la +usr/lib/libQtScript.la +usr/lib/libQtXmlPatterns.la +usr/lib/libQtHelp.la +usr/lib/libQtCore.la +usr/lib/libQtDBus.la + diff --git a/config.profiles/harmattan/patches/default_widget_size.diff b/config.profiles/harmattan/patches/default_widget_size.diff new file mode 100644 index 0000000..1f72881 --- /dev/null +++ b/config.profiles/harmattan/patches/default_widget_size.diff @@ -0,0 +1,13 @@ +Index: qt-maemo-qtp/src/gui/kernel/qwidget.cpp +=================================================================== +--- qt-maemo-qtp.orig/src/gui/kernel/qwidget.cpp ++++ qt-maemo-qtp/src/gui/kernel/qwidget.cpp +@@ -1326,7 +1326,7 @@ + data.crect = parentWidget ? QRect(0,0,100,30) : QRect(0,0,360,640); + } + #else +- data.crect = parentWidget ? QRect(0,0,100,30) : QRect(0,0,640,480); ++ data.crect = parentWidget ? QRect(0,0,100,30) : QRect(0,0,854,480); + #endif + + focus_next = focus_prev = q; diff --git a/config.profiles/harmattan/patches/glshadercache.diff b/config.profiles/harmattan/patches/glshadercache.diff new file mode 100644 index 0000000..2c6ad9a --- /dev/null +++ b/config.profiles/harmattan/patches/glshadercache.diff @@ -0,0 +1,1003 @@ +Index: qt-maemo-qtp/src/opengl/gl2paintengineex/qglengineshadermanager.cpp +=================================================================== +--- qt-maemo-qtp.orig/src/opengl/gl2paintengineex/qglengineshadermanager.cpp ++++ qt-maemo-qtp/src/opengl/gl2paintengineex/qglengineshadermanager.cpp +@@ -42,12 +42,12 @@ + #include "qglengineshadermanager_p.h" + #include "qglengineshadersource_p.h" + #include "qpaintengineex_opengl2_p.h" ++#include "qglshadercache_p.h" + + #if defined(QT_DEBUG) + #include + #endif + +- + QT_BEGIN_NAMESPACE + + static void qt_shared_shaders_free(void *data) +@@ -165,62 +165,89 @@ + + QGLShader* fragShader; + QGLShader* vertexShader; +- QByteArray source; ++ QByteArray vertexSource; ++ QByteArray fragSource; + + // Compile up the simple shader: +- source.clear(); +- source.append(qShaderSnippets[MainVertexShader]); +- source.append(qShaderSnippets[PositionOnlyVertexShader]); +- vertexShader = new QGLShader(QGLShader::Vertex, context, this); +- if (!vertexShader->compileSourceCode(source)) +- qWarning("Vertex shader for simpleShaderProg (MainVertexShader & PositionOnlyVertexShader) failed to compile"); +- +- source.clear(); +- source.append(qShaderSnippets[MainFragmentShader]); +- source.append(qShaderSnippets[ShockingPinkSrcFragmentShader]); +- fragShader = new QGLShader(QGLShader::Fragment, context, this); +- if (!fragShader->compileSourceCode(source)) +- qWarning("Fragment shader for simpleShaderProg (MainFragmentShader & ShockingPinkSrcFragmentShader) failed to compile"); ++ vertexSource.append(qShaderSnippets[MainVertexShader]); ++ vertexSource.append(qShaderSnippets[PositionOnlyVertexShader]); ++ ++ fragSource.append(qShaderSnippets[MainFragmentShader]); ++ fragSource.append(qShaderSnippets[ShockingPinkSrcFragmentShader]); + + simpleShaderProg = new QGLShaderProgram(context, this); +- simpleShaderProg->addShader(vertexShader); +- simpleShaderProg->addShader(fragShader); +- simpleShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); +- simpleShaderProg->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR); +- simpleShaderProg->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR); +- simpleShaderProg->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR); ++ ++ CachedShader simpleShaderCache(fragSource, vertexSource); ++ ++ bool inCache = simpleShaderCache.load(simpleShaderProg, context); ++ ++ if (!inCache) { ++ vertexShader = new QGLShader(QGLShader::Vertex, context, this); ++ if (!vertexShader->compileSourceCode(vertexSource)) ++ qWarning("Vertex shader for simpleShaderProg (MainVertexShader & PositionOnlyVertexShader) failed to compile"); ++ ++ fragShader = new QGLShader(QGLShader::Fragment, context, this); ++ if (!fragShader->compileSourceCode(fragSource)) ++ qWarning("Fragment shader for simpleShaderProg (MainFragmentShader & ShockingPinkSrcFragmentShader) failed to compile"); ++ ++ simpleShaderProg->addShader(vertexShader); ++ simpleShaderProg->addShader(fragShader); ++ ++ simpleShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); ++ simpleShaderProg->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR); ++ simpleShaderProg->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR); ++ simpleShaderProg->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR); ++ } ++ + simpleShaderProg->link(); +- if (!simpleShaderProg->isLinked()) { ++ ++ if (simpleShaderProg->isLinked()) { ++ if (!inCache) ++ simpleShaderCache.store(simpleShaderProg, context); ++ } else { + qCritical() << "Errors linking simple shader:" + << simpleShaderProg->log(); + } + + // Compile the blit shader: +- source.clear(); +- source.append(qShaderSnippets[MainWithTexCoordsVertexShader]); +- source.append(qShaderSnippets[UntransformedPositionVertexShader]); +- vertexShader = new QGLShader(QGLShader::Vertex, context, this); +- if (!vertexShader->compileSourceCode(source)) +- qWarning("Vertex shader for blitShaderProg (MainWithTexCoordsVertexShader & UntransformedPositionVertexShader) failed to compile"); +- +- source.clear(); +- source.append(qShaderSnippets[MainFragmentShader]); +- source.append(qShaderSnippets[ImageSrcFragmentShader]); +- fragShader = new QGLShader(QGLShader::Fragment, context, this); +- if (!fragShader->compileSourceCode(source)) +- qWarning("Fragment shader for blitShaderProg (MainFragmentShader & ImageSrcFragmentShader) failed to compile"); ++ vertexSource.clear(); ++ vertexSource.append(qShaderSnippets[MainWithTexCoordsVertexShader]); ++ vertexSource.append(qShaderSnippets[UntransformedPositionVertexShader]); ++ ++ fragSource.clear(); ++ fragSource.append(qShaderSnippets[MainFragmentShader]); ++ fragSource.append(qShaderSnippets[ImageSrcFragmentShader]); + + blitShaderProg = new QGLShaderProgram(context, this); +- blitShaderProg->addShader(vertexShader); +- blitShaderProg->addShader(fragShader); +- blitShaderProg->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR); +- blitShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); ++ ++ CachedShader blitShaderCache(fragSource, vertexSource); ++ ++ inCache = blitShaderCache.load(blitShaderProg, context); ++ ++ if (!inCache) { ++ vertexShader = new QGLShader(QGLShader::Vertex, context, this); ++ if (!vertexShader->compileSourceCode(vertexSource)) ++ qWarning("Vertex shader for blitShaderProg (MainWithTexCoordsVertexShader & UntransformedPositionVertexShader) failed to compile"); ++ ++ fragShader = new QGLShader(QGLShader::Fragment, context, this); ++ if (!fragShader->compileSourceCode(fragSource)) ++ qWarning("Fragment shader for blitShaderProg (MainFragmentShader & ImageSrcFragmentShader) failed to compile"); ++ ++ blitShaderProg->addShader(vertexShader); ++ blitShaderProg->addShader(fragShader); ++ ++ blitShaderProg->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR); ++ blitShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); ++ } ++ + blitShaderProg->link(); +- if (!blitShaderProg->isLinked()) { ++ if (blitShaderProg->isLinked()) { ++ if (!inCache) ++ blitShaderCache.store(blitShaderProg, context); ++ } else { + qCritical() << "Errors linking blit shader:" +- << simpleShaderProg->log(); ++ << blitShaderProg->log(); + } +- + } + + QGLEngineSharedShaders::~QGLEngineSharedShaders() +@@ -262,99 +289,108 @@ + } + } + +- QGLShader *vertexShader = 0; +- QGLShader *fragShader = 0; +- QGLEngineShaderProg *newProg = 0; +- bool success = false; ++ QScopedPointer newProg; + + do { +- QByteArray source; ++ QByteArray fragSource; + // Insert the custom stage before the srcPixel shader to work around an ATI driver bug + // where you cannot forward declare a function that takes a sampler as argument. + if (prog.srcPixelFragShader == CustomImageSrcFragmentShader) +- source.append(prog.customStageSource); +- source.append(qShaderSnippets[prog.mainFragShader]); +- source.append(qShaderSnippets[prog.srcPixelFragShader]); ++ fragSource.append(prog.customStageSource); ++ fragSource.append(qShaderSnippets[prog.mainFragShader]); ++ fragSource.append(qShaderSnippets[prog.srcPixelFragShader]); + if (prog.compositionFragShader) +- source.append(qShaderSnippets[prog.compositionFragShader]); ++ fragSource.append(qShaderSnippets[prog.compositionFragShader]); + if (prog.maskFragShader) +- source.append(qShaderSnippets[prog.maskFragShader]); +- fragShader = new QGLShader(QGLShader::Fragment, ctxGuard.context(), this); +- QByteArray description; ++ fragSource.append(qShaderSnippets[prog.maskFragShader]); ++ ++ QByteArray vertexSource; ++ vertexSource.append(qShaderSnippets[prog.mainVertexShader]); ++ vertexSource.append(qShaderSnippets[prog.positionVertexShader]); ++ ++ QScopedPointer shaderProgram(new QGLShaderProgram(ctxGuard.context(), this)); ++ ++ CachedShader shaderCache(fragSource, vertexSource); ++ bool inCache = shaderCache.load(shaderProgram.data(), ctxGuard.context()); ++ ++ if (!inCache) { ++ ++ QScopedPointer fragShader(new QGLShader(QGLShader::Fragment, ctxGuard.context(), this)); ++ QByteArray description; + #if defined(QT_DEBUG) +- // Name the shader for easier debugging +- description.append("Fragment shader: main="); +- description.append(snippetNameStr(prog.mainFragShader)); +- description.append(", srcPixel="); +- description.append(snippetNameStr(prog.srcPixelFragShader)); +- if (prog.compositionFragShader) { +- description.append(", composition="); +- description.append(snippetNameStr(prog.compositionFragShader)); +- } +- if (prog.maskFragShader) { +- description.append(", mask="); +- description.append(snippetNameStr(prog.maskFragShader)); +- } +- fragShader->setObjectName(QString::fromLatin1(description)); ++ // Name the shader for easier debugging ++ description.append("Fragment shader: main="); ++ description.append(snippetNameStr(prog.mainFragShader)); ++ description.append(", srcPixel="); ++ description.append(snippetNameStr(prog.srcPixelFragShader)); ++ if (prog.compositionFragShader) { ++ description.append(", composition="); ++ description.append(snippetNameStr(prog.compositionFragShader)); ++ } ++ if (prog.maskFragShader) { ++ description.append(", mask="); ++ description.append(snippetNameStr(prog.maskFragShader)); ++ } ++ fragShader->setObjectName(QString::fromLatin1(description)); + #endif +- if (!fragShader->compileSourceCode(source)) { +- qWarning() << "Warning:" << description << "failed to compile!"; +- break; +- } ++ if (!fragShader->compileSourceCode(fragSource)) { ++ qWarning() << "Warning:" << description << "failed to compile!"; ++ break; ++ } + +- source.clear(); +- source.append(qShaderSnippets[prog.mainVertexShader]); +- source.append(qShaderSnippets[prog.positionVertexShader]); +- vertexShader = new QGLShader(QGLShader::Vertex, ctxGuard.context(), this); ++ QScopedPointer vertexShader(new QGLShader(QGLShader::Vertex, ctxGuard.context(), this)); + #if defined(QT_DEBUG) +- // Name the shader for easier debugging +- description.clear(); +- description.append("Vertex shader: main="); +- description.append(snippetNameStr(prog.mainVertexShader)); +- description.append(", position="); +- description.append(snippetNameStr(prog.positionVertexShader)); +- vertexShader->setObjectName(QString::fromLatin1(description)); ++ // Name the shader for easier debugging ++ description.clear(); ++ description.append("Vertex shader: main="); ++ description.append(snippetNameStr(prog.mainVertexShader)); ++ description.append(", position="); ++ description.append(snippetNameStr(prog.positionVertexShader)); ++ vertexShader->setObjectName(QString::fromLatin1(description)); + #endif +- if (!vertexShader->compileSourceCode(source)) { +- qWarning() << "Warning:" << description << "failed to compile!"; +- break; +- } ++ if (!vertexShader->compileSourceCode(vertexSource)) { ++ qWarning() << "Warning:" << description << "failed to compile!"; ++ break; ++ } + +- newProg = new QGLEngineShaderProg(prog); ++ shaderProgram->addShader(vertexShader.take()); ++ shaderProgram->addShader(fragShader.take()); + +- // If the shader program's not found in the cache, create it now. +- newProg->program = new QGLShaderProgram(ctxGuard.context(), this); +- newProg->program->addShader(vertexShader); +- newProg->program->addShader(fragShader); +- +- // We have to bind the vertex attribute names before the program is linked: +- newProg->program->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); +- if (newProg->useTextureCoords) +- newProg->program->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR); +- if (newProg->useOpacityAttribute) +- newProg->program->bindAttributeLocation("opacityArray", QT_OPACITY_ATTR); +- if (newProg->usePmvMatrixAttribute) { +- newProg->program->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR); +- newProg->program->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR); +- newProg->program->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR); ++ // We have to bind the vertex attribute names before the program is linked: ++ shaderProgram->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); ++ if (prog.useTextureCoords) ++ shaderProgram->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR); ++ if (prog.useOpacityAttribute) ++ shaderProgram->bindAttributeLocation("opacityArray", QT_OPACITY_ATTR); ++ if (prog.usePmvMatrixAttribute) { ++ shaderProgram->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR); ++ shaderProgram->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR); ++ shaderProgram->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR); ++ } + } + ++ newProg.reset(new QGLEngineShaderProg(prog)); ++ newProg->program = shaderProgram.take(); ++ + newProg->program->link(); +- if (!newProg->program->isLinked()) { ++ if (newProg->program->isLinked()) { ++ if (!inCache) ++ shaderCache.store(newProg->program, ctxGuard.context()); ++ } else { + QLatin1String none("none"); + QLatin1String br("\n"); + QString error; +- error = QLatin1String("Shader program failed to link,") ++ error = QLatin1String("Shader program failed to link,"); + #if defined(QT_DEBUG) +- + br +- + QLatin1String(" Shaders Used:") + br +- + QLatin1String(" ") + vertexShader->objectName() + QLatin1String(": ") + br +- + QLatin1String(vertexShader->sourceCode()) + br +- + QLatin1String(" ") + fragShader->objectName() + QLatin1String(": ") + br +- + QLatin1String(fragShader->sourceCode()) + br ++ error += QLatin1String("\n Shaders Used:\n"); ++ for (int i = 0; i < newProg->program->shaders().count(); ++i) { ++ QGLShader *shader = newProg->program->shaders().at(i); ++ error += QLatin1String(" ") + shader->objectName() + QLatin1String(": \n") ++ + QLatin1String(shader->sourceCode()) + br; ++ } + #endif +- + QLatin1String(" Error Log:\n") +- + QLatin1String(" ") + newProg->program->log(); ++ error += QLatin1String(" Error Log:\n") ++ + QLatin1String(" ") + newProg->program->log(); + qWarning() << error; + break; + } +@@ -376,26 +412,10 @@ + } + } + +- cachedPrograms.insert(0, newProg); +- +- success = true; ++ cachedPrograms.insert(0, newProg.data()); + } while (false); + +- // Clean up everything if we weren't successful +- if (!success) { +- if (newProg) { +- delete newProg; // Also deletes the QGLShaderProgram which in turn deletes the QGLShaders +- newProg = 0; +- } +- else { +- if (vertexShader) +- delete vertexShader; +- if (fragShader) +- delete fragShader; +- } +- } +- +- return newProg; ++ return newProg.take(); + } + + void QGLEngineSharedShaders::cleanupCustomStage(QGLCustomShaderStage* stage) +Index: qt-maemo-qtp/src/opengl/gl2paintengineex/qglshadercache_meego_p.h +=================================================================== +--- /dev/null ++++ qt-maemo-qtp/src/opengl/gl2paintengineex/qglshadercache_meego_p.h +@@ -0,0 +1,457 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ++** All rights reserved. ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** This file is part of the QtOpenGL module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** No Commercial Usage ++** This file contains pre-release code and may not be distributed. ++** You may use this file in accordance with the terms and conditions ++** contained in the Technology Preview License Agreement accompanying ++** this package. ++** ++** GNU Lesser General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 2.1 requirements ++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** In addition, as a special exception, Nokia gives you certain additional ++** rights. These rights are described in the Nokia Qt LGPL Exception ++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ++** ++** If you have questions regarding the use of this file, please contact ++** Nokia at qt-info@nokia.com. ++** ++** ++** ++** ++** ++** ++** ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++// ++// W A R N I N G ++// ------------- ++// ++// This file is not part of the Qt API. It exists purely as an ++// implementation detail. This header file may change from version to ++// version without notice, or even be removed. ++// ++// We mean it. ++// ++ ++#ifndef QGLSHADERCACHE_MEEGO_P_H ++#define QGLSHADERCACHE_MEEGO_P_H ++ ++#include ++ ++#if defined(QT_MEEGO_EXPERIMENTAL_SHADERCACHE) && defined(QT_OPENGL_ES_2) ++ ++#include ++#include ++#include ++ ++#ifndef QT_BOOTSTRAPPED ++# include ++#endif ++#if defined(QT_DEBUG) || defined(QT_MEEGO_EXPERIMENTAL_SHADERCACHE_TRACE) ++# include ++#endif ++ ++QT_BEGIN_HEADER ++ ++/* ++ This cache stores internal Qt shader programs in shared memory. ++ ++ This header file is ugly on purpose and can only be included once. It is only to be used ++ for the internal shader cache, not as a generic cache for anyone's shaders. ++ ++ The cache stores either ShaderCacheMaxEntries shader programs or ShaderCacheDataSize kilobytes ++ of shader programs, whatever limit is reached first. ++ ++ The layout of the cache is as outlined in the CachedShaders struct. After some ++ integers, an array of headers is reserved, then comes the space for the actual binaries. ++ ++ Shader Programs are identified by the md5sum of their frag and vertex shader source code. ++ ++ Shader Programs are never removed. The cache never shrinks or re-shuffles. This is done ++ on purpose to ensure minimum amount of locking, no alignment problems and very few write ++ operations. ++ ++ Note: Locking the shader cache could be expensive, because the entire system might hang. ++ That's why the cache is immutable to minimize the time we need to keep it locked. ++ ++ Why is it Meego specific? ++ ++ First, the size is chosen so that it fits to generic meego usage. Second, on Meego, there's ++ always at least one Qt application active (the launcher), so the cache will never be destroyed. ++ Only when the last Qt app exits, the cache dies, which should only be when someone kills the ++ X11 server. And last but not least it was only tested with Meego's SGX driver. ++ ++ There's a small tool in src/opengl/util/meego that dumps the contents of the cache. ++ */ ++ ++// anonymous namespace, prevent exporting of the private symbols ++namespace ++{ ++ ++struct CachedShaderHeader ++{ ++ /* the index in the data[] member of CachedShaders */ ++ int index; ++ /* the size of the binary shader */ ++ GLsizei size; ++ /* the format of the binary shader */ ++ GLenum format; ++ /* the md5sum of the frag+vertex shaders */ ++ char md5Sum[16]; ++}; ++ ++enum ++{ ++ /* The maximum amount of shader programs the cache can hold */ ++ ShaderCacheMaxEntries = 20 ++}; ++ ++typedef CachedShaderHeader CachedShaderHeaders[ShaderCacheMaxEntries]; ++ ++enum ++{ ++ // ShaderCacheDataSize is 20k minus the other data members of CachedShaders ++ ShaderCacheDataSize = 1024 * ShaderCacheMaxEntries - sizeof(CachedShaderHeaders) - 2 * sizeof(int) ++}; ++ ++struct CachedShaders ++{ ++ /* How much space is still available in the cache */ ++ inline int availableSize() const { return ShaderCacheDataSize - dataSize; } ++ ++ /* The current amount of cached shaders */ ++ int shaderCount; ++ ++ /* The current amount (in bytes) of cached data */ ++ int dataSize; ++ ++ /* The headers describing the shaders */ ++ CachedShaderHeaders headers; ++ ++ /* The actual binary data of the shader programs */ ++ char data[ShaderCacheDataSize]; ++}; ++ ++//#define QT_DEBUG_SHADER_CACHE ++#ifdef QT_DEBUG_SHADER_CACHE ++static QDebug shaderCacheDebug() ++{ ++ return QDebug(QtDebugMsg); ++} ++#else ++static inline QNoDebug shaderCacheDebug() { return QNoDebug(); } ++#endif ++ ++class ShaderCacheSharedMemory ++{ ++public: ++ ShaderCacheSharedMemory() ++ : shm(QLatin1String("qt_gles2_shadercache_" QT_VERSION_STR)) ++ { ++ // we need a system semaphore here, since cache creation and initialization must be atomic ++ QSystemSemaphore attachSemaphore(QLatin1String("qt_gles2_shadercache_mutex_" QT_VERSION_STR), 1); ++ ++ if (!attachSemaphore.acquire()) { ++ shaderCacheDebug() << "Unable to require shader cache semaphore:" << attachSemaphore.errorString(); ++ return; ++ } ++ ++ if (shm.attach()) { ++ // success! ++ shaderCacheDebug() << "Attached to shader cache"; ++ } else { ++ ++ // no cache exists - create and initialize it ++ if (shm.create(sizeof(CachedShaders))) { ++ shaderCacheDebug() << "Created new shader cache"; ++ initializeCache(); ++ } else { ++ shaderCacheDebug() << "Unable to create shader cache:" << shm.errorString(); ++ } ++ } ++ ++ attachSemaphore.release(); ++ } ++ ++ inline bool isAttached() const { return shm.isAttached(); } ++ ++ inline bool lock() { return shm.lock(); } ++ inline bool unlock() { return shm.unlock(); } ++ inline void *data() { return shm.data(); } ++ inline QString errorString() { return shm.errorString(); } ++ ++ ~ShaderCacheSharedMemory() ++ { ++ if (!shm.detach()) ++ shaderCacheDebug() << "Unable to detach shader cache" << shm.errorString(); ++ } ++ ++private: ++ void initializeCache() ++ { ++ // no need to lock the shared memory since we're already protected by the ++ // attach system semaphore. ++ ++ void *data = shm.data(); ++ Q_ASSERT(data); ++ ++ memset(data, 0, sizeof(CachedShaders)); ++ } ++ ++ QSharedMemory shm; ++}; ++ ++class ShaderCacheLocker ++{ ++public: ++ inline ShaderCacheLocker(ShaderCacheSharedMemory *cache) ++ : shm(cache->lock() ? cache : (ShaderCacheSharedMemory *)0) ++ { ++ if (!shm) ++ shaderCacheDebug() << "Unable to lock shader cache" << cache->errorString(); ++ } ++ ++ inline bool isLocked() const { return shm; } ++ ++ inline ~ShaderCacheLocker() ++ { ++ if (!shm) ++ return; ++ if (!shm->unlock()) ++ shaderCacheDebug() << "Unable to unlock shader cache" << shm->errorString(); ++ } ++ ++private: ++ ShaderCacheSharedMemory *shm; ++}; ++ ++#ifdef QT_BOOTSTRAPPED ++} // end namespace ++#else ++ ++static void traceCacheOverflow(const char *message) ++{ ++#if defined(QT_DEBUG) || defined (QT_MEEGO_EXPERIMENTAL_SHADERCACHE_TRACE) ++ openlog(qPrintable(QCoreApplication::applicationName()), LOG_PID | LOG_ODELAY, LOG_USER); ++ syslog(LOG_DEBUG, message); ++ closelog(); ++#endif ++ shaderCacheDebug() << message; ++} ++ ++Q_GLOBAL_STATIC(ShaderCacheSharedMemory, shaderCacheSharedMemory) ++ ++/* ++ Finds the index of the shader program identified by md5Sum in the cache. ++ Note: Does NOT lock the cache for reading, the cache must already be locked! ++ ++ Returns -1 when no shader was found. ++ */ ++static int qt_cache_index_unlocked(const QByteArray &md5Sum, CachedShaders *cache) ++{ ++ for (int i = 0; i < cache->shaderCount; ++i) { ++ if (qstrncmp(md5Sum.constData(), cache->headers[i].md5Sum, 16) == 0) { ++ return i; ++ } ++ } ++ return -1; ++} ++ ++/* Returns the index of the shader identified by md5Sum */ ++static int qt_cache_index(const QByteArray &md5Sum) ++{ ++ ShaderCacheSharedMemory *shm = shaderCacheSharedMemory(); ++ if (!shm || !shm->isAttached()) ++ return false; ++ ++ Q_ASSERT(md5Sum.length() == 16); ++ ++ ShaderCacheLocker locker(shm); ++ if (!locker.isLocked()) ++ return false; ++ ++ void *data = shm->data(); ++ Q_ASSERT(data); ++ ++ CachedShaders *cache = reinterpret_cast(data); ++ ++ return qt_cache_index_unlocked(md5Sum, cache); ++} ++ ++/* Loads the cached shader at index \a shaderIndex into \a program ++ * Note: Since the cache is immutable, this operation doesn't lock the shared memory. ++ */ ++static bool qt_cached_shader(QGLShaderProgram *program, const QGLContext *ctx, int shaderIndex) ++{ ++ Q_ASSERT(shaderIndex >= 0 && shaderIndex <= ShaderCacheMaxEntries); ++ Q_ASSERT(program); ++ ++ ShaderCacheSharedMemory *shm = shaderCacheSharedMemory(); ++ if (!shm || !shm->isAttached()) ++ return false; ++ ++ void *data = shm->data(); ++ Q_ASSERT(data); ++ ++ CachedShaders *cache = reinterpret_cast(data); ++ ++ shaderCacheDebug() << "fetching cached shader at index" << shaderIndex ++ << "dataIndex" << cache->headers[shaderIndex].index ++ << "size" << cache->headers[shaderIndex].size ++ << "format" << cache->headers[shaderIndex].format; ++ ++ // call program->programId first, since that resolves the glProgramBinaryOES symbol ++ GLuint programId = program->programId(); ++ glProgramBinaryOES(programId, cache->headers[shaderIndex].format, ++ cache->data + cache->headers[shaderIndex].index, ++ cache->headers[shaderIndex].size); ++ ++ return true; ++} ++ ++/* Stores the shader program in the cache. Returns false if there's an error with the cache, or ++ if the cache is too small to hold the shader. */ ++static bool qt_cache_shader(const QGLShaderProgram *shader, const QGLContext *ctx, const QByteArray &md5Sum) ++{ ++ ShaderCacheSharedMemory *shm = shaderCacheSharedMemory(); ++ if (!shm || !shm->isAttached()) ++ return false; ++ ++ void *data = shm->data(); ++ Q_ASSERT(data); ++ ++ CachedShaders *cache = reinterpret_cast(data); ++ ++ ShaderCacheLocker locker(shm); ++ if (!locker.isLocked()) ++ return false; ++ ++ int cacheIdx = cache->shaderCount; ++ if (cacheIdx >= ShaderCacheMaxEntries) { ++ traceCacheOverflow("Qt OpenGL shader cache index overflow!"); ++ return false; ++ } ++ ++ // now that we have the lock on the shared memory, make sure no one ++ // inserted the shader already while we were unlocked ++ if (qt_cache_index_unlocked(md5Sum, cache) != -1) ++ return true; // already cached ++ ++ shaderCacheDebug() << "Caching shader at index" << cacheIdx; ++ ++ GLint binaryLength = 0; ++ glGetProgramiv(shader->programId(), GL_PROGRAM_BINARY_LENGTH_OES, &binaryLength); ++ ++ if (!binaryLength) { ++ shaderCacheDebug() << "Unable to determine binary shader size!"; ++ return false; ++ } ++ ++ if (binaryLength > cache->availableSize()) { ++ traceCacheOverflow("Qt OpenGL shader cache data overflow!"); ++ return false; ++ } ++ ++ GLsizei size = 0; ++ GLenum format = 0; ++ glGetProgramBinaryOES(shader->programId(), binaryLength, &size, &format, ++ cache->data + cache->dataSize); ++ ++ if (!size) { ++ shaderCacheDebug() << "Unable to get binary shader!"; ++ return false; ++ } ++ ++ cache->headers[cacheIdx].index = cache->dataSize; ++ cache->dataSize += binaryLength; ++ ++cache->shaderCount; ++ cache->headers[cacheIdx].size = binaryLength; ++ cache->headers[cacheIdx].format = format; ++ ++ memcpy(cache->headers[cacheIdx].md5Sum, md5Sum.constData(), 16); ++ ++ shaderCacheDebug() << "cached shader size" << size ++ << "format" << format ++ << "binarySize" << binaryLength ++ << "cache index" << cacheIdx ++ << "data index" << cache->headers[cacheIdx].index; ++ ++ return true; ++} ++ ++} // namespace ++ ++QT_BEGIN_NAMESPACE ++ ++QT_MODULE(OpenGL) ++ ++class CachedShader ++{ ++public: ++ CachedShader(const QByteArray &fragSource, const QByteArray &vertexSource) ++ : cacheIdx(-1) ++ { ++ QCryptographicHash md5Hash(QCryptographicHash::Md5); ++ ++ md5Hash.addData(fragSource); ++ md5Hash.addData(vertexSource); ++ ++ md5Sum = md5Hash.result(); ++ } ++ ++ bool isCached() ++ { ++ return cacheIndex() != -1; ++ } ++ ++ int cacheIndex() ++ { ++ if (cacheIdx != -1) ++ return cacheIdx; ++ cacheIdx = qt_cache_index(md5Sum); ++ return cacheIdx; ++ } ++ ++ bool load(QGLShaderProgram *program, const QGLContext *ctx) ++ { ++ if (cacheIndex() == -1) ++ return false; ++ return qt_cached_shader(program, ctx, cacheIdx); ++ } ++ ++ bool store(QGLShaderProgram *program, const QGLContext *ctx) ++ { ++ return qt_cache_shader(program, ctx, md5Sum); ++ } ++ ++private: ++ QByteArray md5Sum; ++ int cacheIdx; ++}; ++ ++ ++QT_END_NAMESPACE ++ ++#endif ++ ++QT_END_HEADER ++ ++#endif ++#endif +Index: qt-maemo-qtp/src/opengl/gl2paintengineex/qglshadercache_p.h +=================================================================== +--- /dev/null ++++ qt-maemo-qtp/src/opengl/gl2paintengineex/qglshadercache_p.h +@@ -0,0 +1,98 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ++** All rights reserved. ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** This file is part of the QtOpenGL module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** No Commercial Usage ++** This file contains pre-release code and may not be distributed. ++** You may use this file in accordance with the terms and conditions ++** contained in the Technology Preview License Agreement accompanying ++** this package. ++** ++** GNU Lesser General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 2.1 requirements ++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** In addition, as a special exception, Nokia gives you certain additional ++** rights. These rights are described in the Nokia Qt LGPL Exception ++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ++** ++** If you have questions regarding the use of this file, please contact ++** Nokia at qt-info@nokia.com. ++** ++** ++** ++** ++** ++** ++** ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++// ++// W A R N I N G ++// ------------- ++// ++// This file is not part of the Qt API. It exists purely as an ++// implementation detail. This header file may change from version to ++// version without notice, or even be removed. ++// ++// We mean it. ++// ++ ++#ifndef QGLSHADERCACHE_P_H ++#define QGLSHADERCACHE_P_H ++ ++#include ++ ++#if defined(QT_MEEGO_EXPERIMENTAL_SHADERCACHE) && defined(QT_OPENGL_ES_2) ++# include "qglshadercache_meego_p.h" ++#else ++ ++QT_BEGIN_HEADER ++ ++QT_BEGIN_NAMESPACE ++ ++QT_MODULE(OpenGL) ++ ++class QGLShaderProgram; ++class QGLContext; ++ ++class CachedShader ++{ ++public: ++ inline CachedShader(const QByteArray &, const QByteArray &) ++ {} ++ ++ inline bool isCached() ++ { ++ return false; ++ } ++ ++ inline bool load(QGLShaderProgram *, const QGLContext *) ++ { ++ return false; ++ } ++ ++ inline bool store(QGLShaderProgram *, const QGLContext *) ++ { ++ return false; ++ } ++}; ++ ++QT_END_NAMESPACE ++ ++QT_END_HEADER ++ ++#endif ++#endif +Index: qt-maemo-qtp/src/opengl/opengl.pro +=================================================================== +--- qt-maemo-qtp.orig/src/opengl/opengl.pro ++++ qt-maemo-qtp/src/opengl/opengl.pro +@@ -58,7 +58,9 @@ + gl2paintengineex/qglcustomshaderstage_p.h \ + gl2paintengineex/qtriangulatingstroker_p.h \ + gl2paintengineex/qtriangulator_p.h \ +- gl2paintengineex/qtextureglyphcache_gl_p.h ++ gl2paintengineex/qtextureglyphcache_gl_p.h \ ++ gl2paintengineex/qglshadercache_p.h \ ++ gl2paintengineex/qglshadercache_meego_p.h + + SOURCES += qglshaderprogram.cpp \ + qglpixmapfilter.cpp \ +Index: qt-maemo-qtp/src/opengl/util/meego/main.cpp +=================================================================== +--- /dev/null ++++ qt-maemo-qtp/src/opengl/util/meego/main.cpp +@@ -0,0 +1,48 @@ ++#include ++ ++#define QT_DEBUG_SHADER_CACHE ++#define QT_MEEGO_EXPERIMENTAL_SHADERCACHE ++#define QT_OPENGL_ES_2 ++#define QT_BOOTSTRAPPED ++ ++typedef int GLsizei; ++typedef unsigned int GLenum; ++ ++#include "../../gl2paintengineex/qglshadercache_meego_p.h" ++ ++#include ++#include ++ ++int main() ++{ ++ ShaderCacheSharedMemory shm; ++ ++ if (!shm.isAttached()) { ++ fprintf(stderr, "Unable to attach to shared memory\n"); ++ return EXIT_FAILURE; ++ } ++ ++ ShaderCacheLocker locker(&shm); ++ if (!locker.isLocked()) { ++ fprintf(stderr, "Unable to lock shared memory\n"); ++ return EXIT_FAILURE; ++ } ++ ++ void *data = shm.data(); ++ Q_ASSERT(data); ++ ++ CachedShaders *cache = reinterpret_cast(data); ++ ++ for (int i = 0; i < cache->shaderCount; ++i) { ++ printf("Shader %d: %d bytes\n", i, cache->headers[i].size); ++ } ++ ++ printf("\nSummary:\n\n" ++ " Amount of cached shaders: %d\n" ++ " Bytes used: %d\n" ++ " Bytes available: %d\n", ++ cache->shaderCount, cache->dataSize, cache->availableSize()); ++ ++ return EXIT_SUCCESS; ++} ++ +Index: qt-maemo-qtp/src/opengl/util/meego/shader-cache-introspector.pro +=================================================================== +--- /dev/null ++++ qt-maemo-qtp/src/opengl/util/meego/shader-cache-introspector.pro +@@ -0,0 +1,7 @@ ++TEMPLATE = app ++ ++SOURCES += main.cpp ++ ++TARGET = shader-cache-introspector ++ ++QT = core diff --git a/config.profiles/harmattan/patches/icu.diff b/config.profiles/harmattan/patches/icu.diff new file mode 100644 index 0000000..16a17fd --- /dev/null +++ b/config.profiles/harmattan/patches/icu.diff @@ -0,0 +1,732 @@ +diff --git a/configure b/configure +index 3a748e2..77232dc 100755 +--- a/configure ++++ b/configure +@@ -779,6 +779,7 @@ CFG_PULSEAUDIO=auto + CFG_COREWLAN=auto + CFG_ICD=auto + CFG_NOPROCESS=no ++CFG_ICU=no + + # initalize variables used for installation + QT_INSTALL_PREFIX= +@@ -940,7 +941,7 @@ while [ "$#" -gt 0 ]; do + VAL=no + ;; + #Qt style yes options +- -incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-xinput2|-egl|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-carbon|-universal|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-multimedia|-audio-backend|-svg|-declarative|-javascript-jit|-script|-scripttools|-rpath|-force-pkg-config|-s60|-usedeffiles) ++ -incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-xinput2|-egl|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-carbon|-universal|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-multimedia|-audio-backend|-svg|-declarative|-javascript-jit|-script|-scripttools|-rpath|-force-pkg-config|-s60|-usedeffiles|-icu) + VAR=`echo $1 | sed "s,^-\(.*\),\1,"` + VAL=yes + ;; +@@ -2242,6 +2243,13 @@ while [ "$#" -gt 0 ]; do + QT_CFLAGS_FPU=$VAL + fi + ;; ++ icu) ++ if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then ++ CFG_ICU="$VAL" ++ else ++ UNKNOWN_OPT=yes ++ fi ++ ;; + *) + UNKNOWN_OPT=yes + ;; +@@ -7040,6 +7048,10 @@ if [ "$CFG_ICD" = "yes" ]; then + QT_CONFIG="$QT_CONFIG icd" + fi + ++if [ "$CFG_ICU" = "yes" ]; then ++ QT_CONFIG="$QT_CONFIG icu" ++fi ++ + # + # Some Qt modules are too advanced in C++ for some old compilers + # Detect here the platforms where they are known to work. +diff --git a/src/corelib/tools/qchar.cpp b/src/corelib/tools/qchar.cpp +index 7cdc256..11a85d5 100644 +--- a/src/corelib/tools/qchar.cpp ++++ b/src/corelib/tools/qchar.cpp +@@ -57,6 +57,12 @@ + + QT_BEGIN_NAMESPACE + ++#ifdef QT_USE_ICU ++// from qlocale_icu.cpp ++extern uint qt_u_toUpper(uint c); ++extern uint qt_u_toLower(uint c); ++#endif ++ + #ifndef QT_NO_CODEC_FOR_C_STRINGS + # ifdef QT_NO_TEXTCODEC + # define QT_NO_CODEC_FOR_C_STRINGS +@@ -1076,6 +1082,12 @@ QChar::UnicodeVersion QChar::unicodeVersion(ushort ucs2) + */ + QChar QChar::toLower() const + { ++#ifdef QT_USE_ICU ++ uint res = qt_u_toLower(ucs); ++ if (res) ++ return QChar(res); ++ // else fall through ++#endif + const QUnicodeTables::Properties *p = qGetProp(ucs); + if (!p->lowerCaseSpecial) + return ucs + p->lowerCaseDiff; +@@ -1090,6 +1102,12 @@ QChar QChar::toLower() const + */ + uint QChar::toLower(uint ucs4) + { ++#ifdef QT_USE_ICU ++ uint res = qt_u_toLower(ucs4); ++ if (res) ++ return res; ++ // else fall through ++#endif + if (ucs4 > UNICODE_LAST_CODEPOINT) + return ucs4; + const QUnicodeTables::Properties *p = qGetProp(ucs4); +@@ -1106,6 +1124,12 @@ uint QChar::toLower(uint ucs4) + */ + ushort QChar::toLower(ushort ucs2) + { ++#ifdef QT_USE_ICU ++ uint res = qt_u_toLower(ucs2); ++ if (res) ++ return res & 0xffff; ++ // else fall through ++#endif + const QUnicodeTables::Properties *p = qGetProp(ucs2); + if (!p->lowerCaseSpecial) + return ucs2 + p->lowerCaseDiff; +@@ -1118,6 +1142,12 @@ ushort QChar::toLower(ushort ucs2) + */ + QChar QChar::toUpper() const + { ++#ifdef QT_USE_ICU ++ uint res = qt_u_toUpper(ucs); ++ if (res) ++ return QChar(res); ++ // else fall through ++#endif + const QUnicodeTables::Properties *p = qGetProp(ucs); + if (!p->upperCaseSpecial) + return ucs + p->upperCaseDiff; +@@ -1132,6 +1162,12 @@ QChar QChar::toUpper() const + */ + uint QChar::toUpper(uint ucs4) + { ++#ifdef QT_USE_ICU ++ uint res = qt_u_toUpper(ucs4); ++ if (res) ++ return res; ++ // else fall through ++#endif + if (ucs4 > UNICODE_LAST_CODEPOINT) + return ucs4; + const QUnicodeTables::Properties *p = qGetProp(ucs4); +@@ -1148,6 +1184,12 @@ uint QChar::toUpper(uint ucs4) + */ + ushort QChar::toUpper(ushort ucs2) + { ++#ifdef QT_USE_ICU ++ uint res = qt_u_toUpper(ucs2); ++ if (res) ++ return res & 0xffff; ++ // else fall through ++#endif + const QUnicodeTables::Properties *p = qGetProp(ucs2); + if (!p->upperCaseSpecial) + return ucs2 + p->upperCaseDiff; +diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp +index 6515edb..5470048 100644 +--- a/src/corelib/tools/qlocale.cpp ++++ b/src/corelib/tools/qlocale.cpp +@@ -134,6 +134,10 @@ void qt_symbianUpdateSystemPrivate(); + void qt_symbianInitSystemLocale(); + #endif + ++#ifdef QT_USE_ICU ++extern bool qt_initIcu(const QString &localeName); ++#endif ++ + /****************************************************************************** + ** Helpers for accessing Qt locale database + */ +@@ -2346,6 +2350,10 @@ void QLocale::setDefault(const QLocale &locale) + { + default_lp = locale.d(); + default_number_options = locale.numberOptions(); ++ ++#ifdef QT_USE_ICU ++ qt_initIcu(locale.name()); ++#endif + } + + /*! +diff --git a/src/corelib/tools/qlocale_icu.cpp b/src/corelib/tools/qlocale_icu.cpp +new file mode 100644 +index 0000000..7fe3801 +--- /dev/null ++++ b/src/corelib/tools/qlocale_icu.cpp +@@ -0,0 +1,247 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ++** All rights reserved. ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** This file is part of the QtCore module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** No Commercial Usage ++** This file contains pre-release code and may not be distributed. ++** You may use this file in accordance with the terms and conditions ++** contained in the Technology Preview License Agreement accompanying ++** this package. ++** ++** GNU Lesser General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU Lesser ++** General Public License version 2.1 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 2.1 requirements ++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** In addition, as a special exception, Nokia gives you certain additional ++** rights. These rights are described in the Nokia Qt LGPL Exception ++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ++** ++** If you have questions regarding the use of this file, please contact ++** Nokia at qt-info@nokia.com. ++** ++** ++** ++** ++** ++** ++** ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++#include "qglobal.h" ++#include "qlibrary.h" ++#include "qdebug.h" ++ ++#include "unicode/uversion.h" ++#include "unicode/ucol.h" ++ ++QT_BEGIN_NAMESPACE ++ ++typedef UCollator *(*Ptr_ucol_open)(const char *loc, UErrorCode *status); ++typedef void (*Ptr_ucol_close)(UCollator *coll); ++typedef UCollationResult (*Ptr_ucol_strcoll)(const UCollator *coll, const UChar *source, int32_t sourceLength, const UChar *target, int32_t targetLength); ++typedef int32_t (*Ptr_u_strToCase)(UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, const char *locale, UErrorCode *pErrorCode); ++ ++static Ptr_ucol_open ptr_ucol_open = 0; ++static Ptr_ucol_strcoll ptr_ucol_strcoll = 0; ++static Ptr_ucol_close ptr_ucol_close = 0; ++static Ptr_u_strToCase ptr_u_strToUpper = 0; ++static Ptr_u_strToCase ptr_u_strToLower = 0; ++ ++enum LibLoadStatus ++{ ++ ErrorLoading = -1, ++ NotLoaded = 0, ++ Loaded = 1 ++}; ++ ++static LibLoadStatus status = NotLoaded; ++ ++static UCollator *icuCollator = 0; ++ ++#define STRINGIFY2(x) #x ++#define STRINGIFY(x) STRINGIFY2(x) ++ ++bool qt_initIcu(const QString &localeString) ++{ ++ if (status == ErrorLoading) ++ return false; ++ ++ if (status == NotLoaded) { ++ ++ // resolve libicui18n ++ QLibrary lib(QLatin1String("icui18n"), QLatin1String(U_ICU_VERSION_SHORT)); ++ if (!lib.load()) { ++ qWarning() << "Unable to load library icui18n" << lib.errorString(); ++ status = ErrorLoading; ++ return false; ++ } ++ ++ ptr_ucol_open = (Ptr_ucol_open)lib.resolve("ucol_open"); ++ ptr_ucol_close = (Ptr_ucol_close)lib.resolve("ucol_close"); ++ ptr_ucol_strcoll = (Ptr_ucol_strcoll)lib.resolve("ucol_strcoll"); ++ ++ if (!ptr_ucol_open || !ptr_ucol_close || !ptr_ucol_strcoll) { ++ // try again with decorated symbol names ++ ptr_ucol_open = (Ptr_ucol_open)lib.resolve("ucol_open" STRINGIFY(U_ICU_VERSION_SUFFIX)); ++ ptr_ucol_close = (Ptr_ucol_close)lib.resolve("ucol_close" STRINGIFY(U_ICU_VERSION_SUFFIX)); ++ ptr_ucol_strcoll = (Ptr_ucol_strcoll)lib.resolve("ucol_strcoll" STRINGIFY(U_ICU_VERSION_SUFFIX)); ++ } ++ ++ if (!ptr_ucol_open || !ptr_ucol_close || !ptr_ucol_strcoll) { ++ ptr_ucol_open = 0; ++ ptr_ucol_close = 0; ++ ptr_ucol_strcoll = 0; ++ ++ qWarning("Unable to find symbols in icui18n"); ++ status = ErrorLoading; ++ return false; ++ } ++ ++ // resolve libicuuc ++ QLibrary ucLib(QLatin1String("icuuc"), QLatin1String(U_ICU_VERSION_SHORT)); ++ if (!ucLib.load()) { ++ qWarning() << "Unable to load library icuuc" << ucLib.errorString(); ++ status = ErrorLoading; ++ return false; ++ } ++ ++ ptr_u_strToUpper = (Ptr_u_strToCase)ucLib.resolve("u_strToUpper"); ++ ptr_u_strToLower = (Ptr_u_strToCase)ucLib.resolve("u_strToLower"); ++ ++ if (!ptr_u_strToUpper || !ptr_u_strToLower) { ++ ptr_u_strToUpper = (Ptr_u_strToCase)ucLib.resolve("u_strToUpper" STRINGIFY(U_ICU_VERSION_SUFFIX)); ++ ptr_u_strToLower = (Ptr_u_strToCase)ucLib.resolve("u_strToLower" STRINGIFY(U_ICU_VERSION_SUFFIX)); ++ } ++ ++ if (!ptr_u_strToUpper || !ptr_u_strToLower) { ++ ptr_u_strToUpper = 0; ++ ptr_u_strToLower = 0; ++ ++ qWarning("Unable to find symbols in icuuc"); ++ status = ErrorLoading; ++ return false; ++ } ++ ++ // success :) ++ status = Loaded; ++ } ++ ++ if (icuCollator) { ++ ptr_ucol_close(icuCollator); ++ icuCollator = 0; ++ } ++ ++ UErrorCode icuStatus = U_ZERO_ERROR; ++ icuCollator = ptr_ucol_open(localeString.toLatin1().constData(), &icuStatus); ++ ++ if (!icuCollator) { ++ qWarning("Unable to open locale %s in ICU, error code %d", qPrintable(localeString), icuStatus); ++ return false; ++ } ++ ++ return true; ++} ++ ++bool qt_ucol_strcoll(const QChar *source, int sourceLength, const QChar *target, int targetLength, int *result) ++{ ++ Q_ASSERT(result); ++ Q_ASSERT(source); ++ Q_ASSERT(target); ++ ++ if (!icuCollator) ++ return false; ++ ++ *result = ptr_ucol_strcoll(icuCollator, reinterpret_cast(source), int32_t(sourceLength), ++ reinterpret_cast(target), int32_t(targetLength)); ++ ++ return true; ++} ++ ++// caseFunc can either be u_strToUpper or u_strToLower ++static bool qt_u_strToCase(const QString &str, QString *out, const QLocale &locale, Ptr_u_strToCase caseFunc) ++{ ++ Q_ASSERT(out); ++ ++ if (!icuCollator) ++ return false; ++ ++ QString result(str.size(), Qt::Uninitialized); ++ ++ UErrorCode status = U_ZERO_ERROR; ++ ++ int32_t size = caseFunc(reinterpret_cast(result.data()), result.size(), ++ reinterpret_cast(str.constData()), str.size(), ++ locale.name().toLatin1().constData(), &status); ++ ++ if (U_FAILURE(status)) ++ return false; ++ ++ if (size < result.size()) { ++ result.resize(size); ++ } else if (size > result.size()) { ++ qDebug() << "RESULT SIZE MISMATCH"; ++ // the resulting string is larger than our source string ++ result.resize(size); ++ ++ status = U_ZERO_ERROR; ++ size = caseFunc(reinterpret_cast(result.data()), result.size(), ++ reinterpret_cast(str.constData()), str.size(), ++ locale.name().toLatin1().constData(), &status); ++ ++ if (U_FAILURE(status)) ++ return false; ++ ++ // if the sizes don't match now, we give up. ++ if (size != result.size()) ++ return false; ++ } ++ ++ *out = result; ++ return true; ++} ++ ++bool qt_u_strToUpper(const QString &str, QString *out, const QLocale &locale) ++{ ++ return qt_u_strToCase(str, out, locale, ptr_u_strToUpper); ++} ++ ++bool qt_u_strToLower(const QString &str, QString *out, const QLocale &locale) ++{ ++ return qt_u_strToCase(str, out, locale, ptr_u_strToLower); ++} ++ ++uint qt_u_toUpper(uint c) ++{ ++ if (c > 0xffff) ++ return 0; ++ ++ QString out; ++ if (qt_u_strToUpper(QChar(c), &out, QLocale()) && !out.isEmpty()) ++ return out.at(0).unicode(); ++ return 0; ++} ++ ++uint qt_u_toLower(uint c) ++{ ++ if (c > 0xffff) ++ return 0; ++ ++ QString out; ++ if (qt_u_strToLower(QChar(c), &out, QLocale()) && !out.isEmpty()) ++ return out.at(0).unicode(); ++ return 0; ++} ++ ++QT_END_NAMESPACE +diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp +index d641d74..0f5cee1 100644 +--- a/src/corelib/tools/qstring.cpp ++++ b/src/corelib/tools/qstring.cpp +@@ -112,6 +112,13 @@ int qFindString(const QChar *haystack, int haystackLen, int from, + int qFindStringBoyerMoore(const QChar *haystack, int haystackLen, int from, + const QChar *needle, int needleLen, Qt::CaseSensitivity cs); + ++#ifdef QT_USE_ICU ++// qlocale_icu.cpp ++extern bool qt_ucol_strcoll(const QChar *source, int sourceLength, const QChar *target, int targetLength, int *result); ++extern bool qt_u_strToUpper(const QString &str, QString *out, const QLocale &locale); ++extern bool qt_u_strToLower(const QString &str, QString *out, const QLocale &locale); ++#endif ++ + + // Unicode case-insensitive comparison + static int ucstricmp(const ushort *a, const ushort *ae, const ushort *b, const ushort *be) +@@ -4808,6 +4815,14 @@ int QString::localeAwareCompare_helper(const QChar *data1, int length1, + TPtrC p2 = TPtrC16(reinterpret_cast(data2), length2); + return p1.CompareC(p2); + #elif defined(Q_OS_UNIX) ++# if defined(QT_USE_ICU) ++ int res; ++ if (qt_ucol_strcoll(data1, length1, data2, length2, &res)) { ++ if (res == 0) ++ res = ucstrcmp(data1, length1, data2, length2); ++ return res; ++ } // else fall through ++# endif + // declared in + int delta = strcoll(toLocal8Bit_helper(data1, length1), toLocal8Bit_helper(data2, length2)); + if (delta == 0) +@@ -4943,6 +4958,15 @@ QString QString::toLower() const + if (!d->size) + return *this; + ++#ifdef QT_USE_ICU ++ { ++ QString result; ++ if (qt_u_strToLower(*this, &result, QLocale())) ++ return result; ++ // else fall through and use Qt's toUpper ++ } ++#endif ++ + const ushort *e = d->data + d->size; + + // this avoids one out of bounds check in the loop +@@ -5034,6 +5058,15 @@ QString QString::toUpper() const + if (!d->size) + return *this; + ++#ifdef QT_USE_ICU ++ { ++ QString result; ++ if (qt_u_strToUpper(*this, &result, QLocale())) ++ return result; ++ // else fall through and use Qt's toUpper ++ } ++#endif ++ + const ushort *e = d->data + d->size; + + // this avoids one out of bounds check in the loop +diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri +index d81ab04..46c39f3 100644 +--- a/src/corelib/tools/tools.pri ++++ b/src/corelib/tools/tools.pri +@@ -92,6 +92,11 @@ else:SOURCES += tools/qelapsedtimer_generic.cpp + contains(QT_CONFIG, zlib):include($$PWD/../../3rdparty/zlib.pri) + else:include($$PWD/../../3rdparty/zlib_dependency.pri) + ++contains(QT_CONFIG,icu) { ++ SOURCES += tools/qlocale_icu.cpp ++ DEFINES += QT_USE_ICU ++} ++ + DEFINES += HB_EXPORT=Q_CORE_EXPORT + INCLUDEPATH += ../3rdparty/harfbuzz/src + HEADERS += ../3rdparty/harfbuzz/src/harfbuzz.h +diff --git a/tests/auto/qchar/qchar.pro b/tests/auto/qchar/qchar.pro +index 3813e4e..d991365 100644 +--- a/tests/auto/qchar/qchar.pro ++++ b/tests/auto/qchar/qchar.pro +@@ -13,3 +13,5 @@ symbian: { + } else { + DEFINES += SRCDIR=\\\"$$PWD/\\\" + } ++ ++contains(QT_CONFIG,icu):DEFINES += QT_USE_ICU +diff --git a/tests/auto/qchar/tst_qchar.cpp b/tests/auto/qchar/tst_qchar.cpp +index 45dd7eb..514a836 100644 +--- a/tests/auto/qchar/tst_qchar.cpp ++++ b/tests/auto/qchar/tst_qchar.cpp +@@ -103,7 +103,8 @@ tst_QChar::~tst_QChar() + { } + + void tst_QChar::initTestCase() +-{ } ++{ ++} + + void tst_QChar::cleanupTestCase() + { } +@@ -114,6 +115,7 @@ void tst_QChar::init() + int argc = 0; + app = new QCoreApplication(argc, NULL); + #endif ++ QLocale::setDefault(QLocale::C); + } + + void tst_QChar::cleanup() +@@ -143,9 +145,36 @@ void tst_QChar::toUpper() + QVERIFY(QChar::toUpper((uint)0x1c8) == 0x1c7); + QVERIFY(QChar::toUpper((uint)0x1c9) == 0x1c7); + +- QVERIFY(QChar::toUpper((uint)0x10400) == 0x10400); +- QVERIFY(QChar::toUpper((uint)0x10428) == 0x10400); ++ QCOMPARE(QChar::toUpper((uint)0x10400), 0x10400u); ++ QCOMPARE(QChar::toUpper((uint)0x10428), 0x10400u); ++ ++#ifdef QT_USE_ICU ++ QCOMPARE(QChar('i').toUpper(), QChar('I')); ++ QCOMPARE(QChar::toUpper(ushort('i')), ushort('I')); ++ QCOMPARE(QChar::toUpper(uint('i')), uint('I')); ++ ++ QLocale::setDefault(QLocale(QLocale::Turkish, QLocale::Turkey)); ++ ++ // in Turkish locale, upper-caseing a 'i' will result in a capital I plus dot (0x0130) ++ QCOMPARE(QChar('i').toUpper(), QChar(0x0130u)); ++ QCOMPARE(QChar::toUpper(ushort('i')), ushort(0x0130u)); ++ QCOMPARE(QChar::toUpper(uint('i')), 0x0130u); ++ ++ // upper-casing a lower-case i without dot (0x0131) will result in 'I' ++ QCOMPARE(QChar(0x0131u).toUpper(), QChar('I')); ++ QCOMPARE(QChar::toUpper(ushort(0x0131u)), ushort('I')); ++ QCOMPARE(QChar::toUpper(uint(0x0131u)), uint('I')); ++ ++ // upper-casing an upper-case 0x0130 should do nothing ++ QCOMPARE(QChar(0x0130u).toUpper(), QChar(0x0130u)); ++ QCOMPARE(QChar::toUpper(ushort(0x0130u)), ushort(0x0130u)); ++ QCOMPARE(QChar::toUpper(uint(0x0130u)), uint(0x0130u)); + ++ // upper-casing an upper-case I should do nothing ++ QCOMPARE(QChar('I').toUpper(), QChar('I')); ++ QCOMPARE(QChar::toUpper(ushort('I')), ushort('I')); ++ QCOMPARE(QChar::toUpper(uint('I')), uint('I')); ++#endif + } + + void tst_QChar::toLower() +@@ -170,6 +199,34 @@ void tst_QChar::toLower() + + QVERIFY(QChar::toLower((uint)0x10400) == 0x10428); + QVERIFY(QChar::toLower((uint)0x10428) == 0x10428); ++ ++#ifdef QT_USE_ICU ++ QCOMPARE(QChar('I').toLower(), QChar('i')); ++ QCOMPARE(QChar::toLower(ushort('I')), ushort('i')); ++ QCOMPARE(QChar::toLower(uint('I')), uint('i')); ++ ++ QLocale::setDefault(QLocale(QLocale::Turkish, QLocale::Turkey)); ++ ++ // in turkish locale, lower-casing an 'I' will result with a lower-case i without dot (0x0131) ++ QCOMPARE(QChar('I').toLower(), QChar(0x0131u)); ++ QCOMPARE(QChar::toLower(ushort('I')), ushort(0x0131u)); ++ QCOMPARE(QChar::toLower(uint('I')), uint(0x0131u)); ++ ++ // lower-casing a captial I with dot (0x0130) will result in 'i' ++ QCOMPARE(QChar(0x0130u).toLower(), QChar('i')); ++ QCOMPARE(QChar::toLower(ushort(0x0130u)), ushort('i')); ++ QCOMPARE(QChar::toLower(uint(0x0130u)), uint('i')); ++ ++ // lower-casing a lower-case i should do nothing ++ QCOMPARE(QChar('i').toLower(), QChar('i')); ++ QCOMPARE(QChar::toLower(ushort('i')), ushort('i')); ++ QCOMPARE(QChar::toLower(uint('i')), uint('i')); ++ ++ // lower-casing a lower-case i without dot (0x0131) should do nothing ++ QCOMPARE(QChar(0x0131u).toLower(), QChar(0x0131u)); ++ QCOMPARE(QChar::toLower(ushort(0x0131u)), ushort(0x0131u)); ++ QCOMPARE(QChar::toLower(uint(0x0131u)), uint(0x0131u)); ++#endif + } + + void tst_QChar::toTitle() +diff --git a/tests/auto/qstring/qstring.pro b/tests/auto/qstring/qstring.pro +index ed758c6..92dd755 100644 +--- a/tests/auto/qstring/qstring.pro ++++ b/tests/auto/qstring/qstring.pro +@@ -6,3 +6,5 @@ symbian:LIBS += -llibm + QT = core + + DEFINES += QT_NO_CAST_TO_ASCII ++ ++contains(QT_CONFIG,icu):DEFINES += QT_USE_ICU +diff --git a/tests/auto/qstring/tst_qstring.cpp b/tests/auto/qstring/tst_qstring.cpp +index ecae3d8..6baf9fc 100644 +--- a/tests/auto/qstring/tst_qstring.cpp ++++ b/tests/auto/qstring/tst_qstring.cpp +@@ -210,6 +210,8 @@ private slots: + void task262677remove(); + void QTBUG10404_compareRef(); + void QTBUG9281_arg_locale(); ++ ++ void toUpperLower_icu(); + }; + + typedef QList IntList; +@@ -1544,6 +1546,11 @@ void tst_QString::toUpper() + QCOMPARE( lower.toUpper(), upper); + + ++#ifdef QT_USE_ICU ++ // test doesn't work with ICU support, since QChar is unaware of any locale ++ QEXPECT_FAIL("", "test doesn't work with ICU support, since QChar is unaware of any locale", Continue); ++ QVERIFY(false); ++#else + for (int i = 0; i < 65536; ++i) { + QString str(1, QChar(i)); + QString upper = str.toUpper(); +@@ -1551,6 +1558,7 @@ void tst_QString::toUpper() + if (upper.length() == 1) + QVERIFY(upper == QString(1, QChar(i).toUpper())); + } ++#endif + } + + void tst_QString::toLower() +@@ -1582,6 +1590,11 @@ void tst_QString::toLower() + upper += QChar(QChar::lowSurrogate(0x10400)); + QCOMPARE( upper.toLower(), lower); + ++#ifdef QT_USE_ICU ++ // test doesn't work with ICU support, since QChar is unaware of any locale ++ QEXPECT_FAIL("", "test doesn't work with ICU support, since QChar is unaware of any locale", Continue); ++ QVERIFY(false); ++#else + for (int i = 0; i < 65536; ++i) { + QString str(1, QChar(i)); + QString lower = str.toLower(); +@@ -1589,6 +1602,7 @@ void tst_QString::toLower() + if (lower.length() == 1) + QVERIFY(str.toLower() == QString(1, QChar(i).toLower())); + } ++#endif + } + + void tst_QString::trimmed() +@@ -4200,6 +4214,8 @@ void tst_QString::localeAwareCompare() + + #elif defined (Q_WS_MAC) + QSKIP("Setting the locale is not supported on OS X (you can set the C locale, but that won't affect CFStringCompare which is used to compare strings)", SkipAll); ++#elif defined(QT_USE_ICU) ++ QLocale::setDefault(QLocale(locale)); + #else + if (!locale.isEmpty()) { + const char *newLocale = setlocale(LC_ALL, locale.toLatin1()); +@@ -4211,6 +4227,11 @@ void tst_QString::localeAwareCompare() + } + #endif + ++#ifdef QT_USE_ICU ++ // ### for c1, ICU disagrees with libc on how to compare ++ QEXPECT_FAIL("c1", "ICU disagrees with test", Abort); ++#endif ++ + int testres = QString::localeAwareCompare(s1, s2); + if (result < 0) { + QVERIFY(testres < 0); +@@ -4912,6 +4933,40 @@ void tst_QString::QTBUG9281_arg_locale() + QLocale::setDefault(QLocale::C); + } + ++void tst_QString::toUpperLower_icu() ++{ ++#ifndef QT_USE_ICU ++ QSKIP("Qt was built without ICU support", QTest::SkipAll); ++#endif ++ ++ QString s = QString::fromLatin1("i"); ++ ++ QCOMPARE(s.toUpper(), QString::fromLatin1("I")); ++ QCOMPARE(s.toLower(), QString::fromLatin1("i")); ++ ++ QLocale::setDefault(QLocale(QLocale::Turkish, QLocale::Turkey)); ++ ++ // turkish locale has a capital I with a dot (U+0130, utf8 c4b0) ++ ++ QCOMPARE(s.toUpper(), QString::fromUtf8("\xc4\xb0")); ++ QCOMPARE(QString::fromUtf8("\xc4\xb0").toLower(), s); ++ ++ // nothing should happen here ++ QCOMPARE(s.toLower(), s); ++ QCOMPARE(QString::fromLatin1("I").toUpper(), QString::fromLatin1("I")); ++ ++ // U+0131, utf8 c4b1 is the lower-case i without a dot ++ QString sup = QString::fromUtf8("\xc4\xb1"); ++ ++ QCOMPARE(sup.toUpper(), QString::fromLatin1("I")); ++ QCOMPARE(QString::fromLatin1("I").toLower(), sup); ++ ++ // nothing should happen here ++ QCOMPARE(sup.toLower(), sup); ++ QCOMPARE(QString::fromLatin1("i").toLower(), QString::fromLatin1("i")); ++ ++ // the cleanup function will restore the default locale ++} + + + QTEST_APPLESS_MAIN(tst_QString) diff --git a/config.profiles/harmattan/patches/no_read_pro_from_quilt_dir.diff b/config.profiles/harmattan/patches/no_read_pro_from_quilt_dir.diff new file mode 100644 index 0000000..f5ddb67 --- /dev/null +++ b/config.profiles/harmattan/patches/no_read_pro_from_quilt_dir.diff @@ -0,0 +1,13 @@ +Index: qt-maemo-qtp/configure +=================================================================== +--- qt-maemo-qtp.orig/configure ++++ qt-maemo-qtp/configure +@@ -8465,7 +8465,7 @@ + # .projects.3 -> the rest + rm -f .projects .projects.1 .projects.2 .projects.3 + +-QMAKE_PROJECTS=`find "$relpath/." -name '*.pro' -print | sed 's-/\./-/-'` ++QMAKE_PROJECTS=`find "$relpath/." -name '*.pro' -a ! -path '*/.pc/*' -print | sed 's-/\./-/-'` + if [ -z "$AWK" ]; then + for p in `echo $QMAKE_PROJECTS`; do + echo "$p" >> .projects diff --git a/config.profiles/harmattan/patches/pinch_gesture_sent_twice.diff b/config.profiles/harmattan/patches/pinch_gesture_sent_twice.diff new file mode 100644 index 0000000..61dfbf9 --- /dev/null +++ b/config.profiles/harmattan/patches/pinch_gesture_sent_twice.diff @@ -0,0 +1,56 @@ +Index: qt-maemo-qtp/src/gui/kernel/qstandardgestures.cpp +=================================================================== +--- qt-maemo-qtp.orig/src/gui/kernel/qstandardgestures.cpp ++++ qt-maemo-qtp/src/gui/kernel/qstandardgestures.cpp +@@ -66,6 +66,9 @@ + #else + static_cast(target)->setAttribute(Qt::WA_AcceptTouchEvents); + #endif ++ } else if (target) { ++ return 0; // this assumes the target is a QGraphicsObject, so we return ++ // NULL to indicate that the recognizer doesn't support graphicsobject + } + return new QPanGesture; + } +@@ -157,7 +160,11 @@ + { + if (target && target->isWidgetType()) { + static_cast(target)->setAttribute(Qt::WA_AcceptTouchEvents); ++ } else if (target) { ++ return 0; // this assumes the target is a QGraphicsObject, so we return ++ // NULL to indicate that the recognizer doesn't support graphicsobject + } ++ + return new QPinchGesture; + } + +@@ -286,6 +293,9 @@ + { + if (target && target->isWidgetType()) { + static_cast(target)->setAttribute(Qt::WA_AcceptTouchEvents); ++ } else if (target) { ++ return 0; // this assumes the target is a QGraphicsObject, so we return ++ // NULL to indicate that the recognizer doesn't support graphicsobject + } + return new QSwipeGesture; + } +@@ -424,6 +434,9 @@ + { + if (target && target->isWidgetType()) { + static_cast(target)->setAttribute(Qt::WA_AcceptTouchEvents); ++ } else if (target) { ++ return 0; // this assumes the target is a QGraphicsObject, so we return ++ // NULL to indicate that the recognizer doesn't support graphicsobject + } + return new QTapGesture; + } +@@ -495,6 +508,9 @@ + { + if (target && target->isWidgetType()) { + static_cast(target)->setAttribute(Qt::WA_AcceptTouchEvents); ++ } else if (target) { ++ return 0; // this assumes the target is a QGraphicsObject, so we return ++ // NULL to indicate that the recognizer doesn't support graphicsobject + } + return new QTapAndHoldGesture; + } diff --git a/config.profiles/harmattan/patches/qgltexturecache.diff b/config.profiles/harmattan/patches/qgltexturecache.diff new file mode 100644 index 0000000..0fa8ad2 --- /dev/null +++ b/config.profiles/harmattan/patches/qgltexturecache.diff @@ -0,0 +1,23 @@ +Index: qt-maemo-qtp/src/opengl/qgl.cpp +=================================================================== +--- qt-maemo-qtp.orig/src/opengl/qgl.cpp ++++ qt-maemo-qtp/src/opengl/qgl.cpp +@@ -1831,18 +1831,6 @@ + void QGLTextureCache::insert(QGLContext* ctx, qint64 key, QGLTexture* texture, int cost) + { + QWriteLocker locker(&m_lock); +- if (m_cache.totalCost() + cost > m_cache.maxCost()) { +- // the cache is full - make an attempt to remove something +- const QList keys = m_cache.keys(); +- int i = 0; +- while (i < m_cache.count() +- && (m_cache.totalCost() + cost > m_cache.maxCost())) { +- QGLTexture *tex = m_cache.object(keys.at(i)); +- if (tex->context == ctx) +- m_cache.remove(keys.at(i)); +- ++i; +- } +- } + const QGLTextureCacheKey cacheKey = {key, QGLContextPrivate::contextGroup(ctx)}; + m_cache.insert(cacheKey, texture, cost); + } diff --git a/config.profiles/harmattan/patches/qwidget_x11.diff b/config.profiles/harmattan/patches/qwidget_x11.diff new file mode 100644 index 0000000..8bcb011 --- /dev/null +++ b/config.profiles/harmattan/patches/qwidget_x11.diff @@ -0,0 +1,39 @@ +commit 4ecc45086102807901a3bd2b9e02a169ca212716 +Author: Harald Fernengel +Date: Thu Dec 9 10:51:01 2010 +0100 + + Fix a rare race condition when showing windows + + When setting a window to translucent shortly before showing it with the + OpenGL graphics system, the hijacking would call XDestroyWindow without + resetting the internal state. This might lead to the window waiting for + a map notify message forever. + + The patch now properly resets the internal state when destroying the old + window, so it'll get mapped correctly when show() is called. + + Reviewed-by: Denis Dzyubenko + +Index: qt-maemo-qtp/src/gui/kernel/qwidget_x11.cpp +=================================================================== +--- qt-maemo-qtp.orig/src/gui/kernel/qwidget_x11.cpp ++++ qt-maemo-qtp/src/gui/kernel/qwidget_x11.cpp +@@ -961,8 +961,17 @@ + inputContext->setFocusWidget(q); + } + +- if (destroyw) ++ if (destroyw) { + qt_XDestroyWindow(q, dpy, destroyw); ++ if (QTLWExtra *topData = maybeTopData()) { ++#ifndef QT_NO_XSYNC ++ if (topData->syncUpdateCounter) ++ XSyncDestroyCounter(dpy, topData->syncUpdateCounter); ++#endif ++ // we destroyed our old window - reset the top-level state ++ createTLSysExtra(); ++ } ++ } + + // newly created windows are positioned at the window system's + // (0,0) position. If the parent uses wrect mapping to expand the diff --git a/config.profiles/harmattan/patches/qwidget_x11_mapping.diff b/config.profiles/harmattan/patches/qwidget_x11_mapping.diff new file mode 100644 index 0000000..4866cfb --- /dev/null +++ b/config.profiles/harmattan/patches/qwidget_x11_mapping.diff @@ -0,0 +1,17 @@ +Index: qt-maemo-qtp/src/gui/kernel/qwidget_x11.cpp +=================================================================== +--- qt-maemo-qtp.orig/src/gui/kernel/qwidget_x11.cpp ++++ qt-maemo-qtp/src/gui/kernel/qwidget_x11.cpp +@@ -1353,6 +1353,12 @@ + //cannot trust that !isWindow() implies parentWidget() before create + return (q->isWindow() || !q->parentWidget()) ? p : q->parentWidget()->d_func()->mapToGlobal(p); + } ++ ++ // we're not embedded - use the client rect to compute the global position ++ if (!q->window()->d_func()->topData()->embedded) ++ return mapFromWS(QPoint(pos.x() - q->data->crect.left(), pos.y() - q->data->crect.top())); ++ ++ // otherwise, go through the (slow-ish) X11 round-trip + int x, y; + Window child; + QPoint p = mapToWS(pos); diff --git a/config.profiles/harmattan/patches/runtime-window-geometry-revert.diff b/config.profiles/harmattan/patches/runtime-window-geometry-revert.diff new file mode 100644 index 0000000..af55a60 --- /dev/null +++ b/config.profiles/harmattan/patches/runtime-window-geometry-revert.diff @@ -0,0 +1,12 @@ +Index: qt-maemo-qtp/src/gui/painting/qgraphicssystem_runtime.cpp +=================================================================== +--- qt-maemo-qtp.orig/src/gui/painting/qgraphicssystem_runtime.cpp ++++ qt-maemo-qtp/src/gui/painting/qgraphicssystem_runtime.cpp +@@ -285,7 +285,6 @@ + + void QRuntimeWindowSurface::setGeometry(const QRect &rect) + { +- QWindowSurface::setGeometry(rect); + m_windowSurface->setGeometry(rect); + } + diff --git a/config.profiles/harmattan/patches/series b/config.profiles/harmattan/patches/series new file mode 100644 index 0000000..f2ee5f9 --- /dev/null +++ b/config.profiles/harmattan/patches/series @@ -0,0 +1,14 @@ +tst_qscrollbar.diff +signon_authenticator4.diff +pinch_gesture_sent_twice.diff +no_read_pro_from_quilt_dir.diff +tst_qvariant.diff +icu.diff +qgltexturecache.diff +qwidget_x11.diff +qwidget_x11_mapping.diff +glshadercache.diff +temppath.diff +tst_qprogressbar.diff +default_widget_size.diff +runtime-window-geometry-revert.diff diff --git a/config.profiles/harmattan/patches/signon_authenticator4.diff b/config.profiles/harmattan/patches/signon_authenticator4.diff new file mode 100644 index 0000000..63e8d51 --- /dev/null +++ b/config.profiles/harmattan/patches/signon_authenticator4.diff @@ -0,0 +1,230 @@ +Index: qt-maemo-qtp/src/3rdparty/signon/signon.pri +=================================================================== +--- /dev/null ++++ qt-maemo-qtp/src/3rdparty/signon/signon.pri +@@ -0,0 +1,2 @@ ++# signon dependency ++CONFIG += qdbus +Index: qt-maemo-qtp/src/network/access/access.pri +=================================================================== +--- qt-maemo-qtp.orig/src/network/access/access.pri ++++ qt-maemo-qtp/src/network/access/access.pri +@@ -61,3 +61,4 @@ + access/qnetworkdiskcache.cpp + + include($$PWD/../../3rdparty/zlib_dependency.pri) ++include($$PWD/../../3rdparty/signon/signon.pri) +Index: qt-maemo-qtp/src/network/kernel/qauthenticator.cpp +=================================================================== +--- qt-maemo-qtp.orig/src/network/kernel/qauthenticator.cpp ++++ qt-maemo-qtp/src/network/kernel/qauthenticator.cpp +@@ -129,6 +129,9 @@ + \sa QSslSocket + */ + ++#ifndef QT_NO_SIGNON ++#include ++#endif //QT_NO_SIGNON + + /*! + Constructs an empty authentication object +@@ -421,17 +424,40 @@ + { + QByteArray response; + const char *methodString = 0; ++#ifndef QT_NO_SIGNON ++ bool valid = false; ++ qint32 id = 0; ++#endif //QT_NO_SIGNON ++ + switch(method) { + case QAuthenticatorPrivate::None: + methodString = ""; + phase = Done; + break; + case QAuthenticatorPrivate::Plain: ++#ifndef QT_NO_SIGNON ++ id = this->options.value(QLatin1String("identity")).toInt(&valid); ++ if (valid) { ++ //get response from sso ++ QVariantMap signon = signonResponse(id, QLatin1String("password"),QVariantMap()); ++ response = '\0' + signon.value(QLatin1String("UserName")).toString().toUtf8() ++ + '\0' + signon.value(QLatin1String("Secret")).toString().toUtf8(); ++ } else ++#endif //QT_NO_SIGNON + response = '\0' + user.toUtf8() + '\0' + password.toUtf8(); + phase = Done; + break; + case QAuthenticatorPrivate::Basic: + methodString = "Basic "; ++#ifndef QT_NO_SIGNON ++ id = this->options.value(QLatin1String("identity")).toInt(&valid); ++ if (valid) { ++ //get response from sso ++ QVariantMap signon = signonResponse(id, QLatin1String("password"),QVariantMap()); ++ response = signon.value(QLatin1String("UserName")).toString().toLatin1() ++ + ':' + signon.value(QLatin1String("Secret")).toString().toLatin1(); ++ } else ++#endif //QT_NO_SIGNON + response = user.toLatin1() + ':' + password.toLatin1(); + response = response.toBase64(); + phase = Done; +@@ -613,6 +639,90 @@ + return hash.result().toHex(); + } + ++#ifndef QT_NO_SIGNON ++ ++static QVariantMap signonResponse(const quint32 id, const QString &method, QVariantMap args) ++{ ++ //check dbus connection ++ QDBusConnection connection = QDBusConnection::sessionBus(); ++ if (!QDBusConnection::sessionBus().isConnected()) { ++ qCritical() << "DBus connection failed"; ++ return QVariantMap(); ++ } ++ ++ QDBusMessage msg = ++ QDBusMessage::createMethodCall(QLatin1String("com.nokia.SingleSignOn"), ++ QLatin1String("/com/nokia/SingleSignOn") , ++ QLatin1String("com.nokia.SingleSignOn.AuthService"), ++ QLatin1String("getAuthSessionObjectPath")); ++ msg << id << method; ++ QDBusReply pathReply = connection.call(msg); ++ ++ QString sessionPath; ++ if (pathReply.isValid()) { ++ sessionPath = pathReply.value(); ++ } else { ++ qDebug() << pathReply.error(); ++ return QVariantMap(); ++ } ++ ++ //authenticate using auth session ++ msg = QDBusMessage::createMethodCall(QLatin1String("com.nokia.SingleSignOn"), ++ sessionPath, QString(), ++ QLatin1String("process")); ++ msg << args << method; ++ QDBusReply reply = connection.call(msg); ++ ++ if (reply.isValid()) { ++ QVariantMap map = reply.value(); ++ return map; ++ } else { ++ qDebug() << reply.error(); ++ return QVariantMap(); ++ } ++ return QVariantMap(); ++} ++ ++static QByteArray signonDigestMd5( ++ const quint32 id, ++ const QByteArray &alg, ++ QString &user, ++ const QByteArray &realm, ++ const QByteArray &nonce, /* nonce from server */ ++ QByteArray &nonceCount, /* 8 hex digits */ ++ QByteArray &cNonce, /* client nonce */ ++ const QByteArray &qop, /* qop-value: "", "auth", "auth-int" */ ++ const QByteArray &method, /* method from the request */ ++ const QByteArray &digestUri, /* requested URL */ ++ const QByteArray &hEntity /* H(entity body) if qop="auth-int" */ ++ ) ++{ ++ QByteArray digest = QByteArray(); ++ nonceCount = "00000001"; ++ ++ QVariantMap args; ++ args.insert(QLatin1String("Algorithm"), alg); ++ args.insert(QLatin1String("Realm"), QLatin1String(realm)); ++ args.insert(QLatin1String("nonce"), nonce); ++ args.insert(QLatin1String("nonceCount"), nonceCount); ++ args.insert(QLatin1String("cNonce"), cNonce); ++ args.insert(QLatin1String("qop"), qop); ++ args.insert(QLatin1String("method"), method); ++ args.insert(QLatin1String("digestUri"), digestUri); ++ args.insert(QLatin1String("Entity"), hEntity); ++ ++ QVariantMap response = signonResponse(id, QLatin1String("digest"), args); ++ ++ if (response.isEmpty()) ++ return digest; ++ digest = response.value(QLatin1String("Digest")).toByteArray(); ++ user = response.value(QLatin1String("UserName")).toString(); ++ cNonce = response.value(QLatin1String("cNonce")).toByteArray(); ++ ++ return digest; ++} ++#endif //QT_NO_SIGNON ++ + QByteArray QAuthenticatorPrivate::digestMd5Response(const QByteArray &challenge, const QByteArray &method, const QByteArray &path) + { + QHash options = parseDigestAuthenticationChallenge(challenge); +@@ -625,9 +735,23 @@ + QByteArray nonce = options.value("nonce"); + QByteArray opaque = options.value("opaque"); + QByteArray qop = options.value("qop"); ++ QByteArray response; + + // qDebug() << "calculating digest: method=" << method << "path=" << path; +- QByteArray response = digestMd5ResponseHelper(options.value("algorithm"), user.toLatin1(), ++ ++#ifndef QT_NO_SIGNON ++ bool valid = false; ++ qint32 id = this->options.value(QLatin1String("identity")).toInt(&valid); ++ if (valid) { ++ //get response from sso ++ response = signonDigestMd5(id, options.value("algorithm"), user, ++ realm.toLatin1(), ++ nonce, nonceCountString, ++ cnonce, qop, method, ++ path, QByteArray()); ++ } else ++#endif //QT_NO_SIGNON ++ response = digestMd5ResponseHelper(options.value("algorithm"), user.toLatin1(), + realm.toLatin1(), password.toLatin1(), + nonce, nonceCountString, + cnonce, qop, method, +Index: qt-maemo-qtp/src/network/kernel/qauthenticator_p.h +=================================================================== +--- qt-maemo-qtp.orig/src/network/kernel/qauthenticator_p.h ++++ qt-maemo-qtp/src/network/kernel/qauthenticator_p.h +@@ -109,6 +109,23 @@ + + }; + ++#ifndef QT_NO_SIGNON ++ static QVariantMap signonResponse(const quint32 id, const QString &method, QVariantMap args); ++ static QByteArray signonDigestMd5( ++ const quint32 id, ++ const QByteArray &alg, ++ QString &user, ++ const QByteArray &realm, ++ const QByteArray &nonce, /* nonce from server */ ++ QByteArray &nonceCount, /* 8 hex digits */ ++ QByteArray &cNonce, /* client nonce */ ++ const QByteArray &qop, /* qop-value: "", "auth", "auth-int" */ ++ const QByteArray &method, /* method from the request */ ++ const QByteArray &digestUri, /* requested URL */ ++ const QByteArray &hEntity /* H(entity body) if qop="auth-int" */ ++ ); ++#endif //QT_NO_SIGNON ++ + + QT_END_NAMESPACE + +Index: qt-maemo-qtp/src/src.pro +=================================================================== +--- qt-maemo-qtp.orig/src/src.pro ++++ qt-maemo-qtp/src/src.pro +@@ -4,8 +4,9 @@ + unset(SRC_SUBDIRS) + win32:SRC_SUBDIRS += src_winmain + symbian:SRC_SUBDIRS += src_s60main +-SRC_SUBDIRS += src_corelib src_xml src_network src_sql src_testlib ++SRC_SUBDIRS += src_corelib src_xml + !symbian:contains(QT_CONFIG, dbus):SRC_SUBDIRS += src_dbus ++SRC_SUBDIRS += src_network src_sql src_testlib + !contains(QT_CONFIG, no-gui): SRC_SUBDIRS += src_gui + !wince*:!symbian:!vxworks:contains(QT_CONFIG, qt3support): SRC_SUBDIRS += src_qt3support + diff --git a/config.profiles/harmattan/patches/temppath.diff b/config.profiles/harmattan/patches/temppath.diff new file mode 100644 index 0000000..065c2d0 --- /dev/null +++ b/config.profiles/harmattan/patches/temppath.diff @@ -0,0 +1,28 @@ +Index: qt-maemo-qtp/mkspecs/linux-g++-maemo/qplatformdefs.h +=================================================================== +--- qt-maemo-qtp.orig/mkspecs/linux-g++-maemo/qplatformdefs.h ++++ qt-maemo-qtp/mkspecs/linux-g++-maemo/qplatformdefs.h +@@ -43,3 +43,8 @@ + + #define QT_GUI_DOUBLE_CLICK_RADIUS 20 + #define QT_GUI_DRAG_DISTANCE 16 ++ ++// TMPDIR sometimes points to /tmp and sometimes to /var/tmp ++// To guarantee native platform key generation for QSharedMemory and friends, ++// we must hard code the temp path to /var/tmp here. ++#define QT_UNIX_TEMP_PATH_OVERRIDE "/var/tmp" +Index: qt-maemo-qtp/src/corelib/io/qfsfileengine_unix.cpp +=================================================================== +--- qt-maemo-qtp.orig/src/corelib/io/qfsfileengine_unix.cpp ++++ qt-maemo-qtp/src/corelib/io/qfsfileengine_unix.cpp +@@ -643,7 +643,9 @@ + + QString QFSFileEngine::tempPath() + { +-#if defined(Q_OS_SYMBIAN) ++#if defined(QT_UNIX_TEMP_PATH_OVERRIDE) ++ QString temp = QLatin1String(QT_UNIX_TEMP_PATH_OVERRIDE); ++#elif defined(Q_OS_SYMBIAN) + TFileName symbianPath = PathInfo::PhoneMemoryRootPath(); + QString temp = QDir::fromNativeSeparators(qt_TDesC2QString(symbianPath)); + temp += QLatin1String( "temp/"); diff --git a/config.profiles/harmattan/patches/tst_qprogressbar.diff b/config.profiles/harmattan/patches/tst_qprogressbar.diff new file mode 100644 index 0000000..d252fe3 --- /dev/null +++ b/config.profiles/harmattan/patches/tst_qprogressbar.diff @@ -0,0 +1,19 @@ +Index: qt-maemo-qtp/tests/auto/qprogressbar/tst_qprogressbar.cpp +=================================================================== +--- qt-maemo-qtp.orig/tests/auto/qprogressbar/tst_qprogressbar.cpp ++++ qt-maemo-qtp/tests/auto/qprogressbar/tst_qprogressbar.cpp +@@ -179,10 +179,14 @@ + bar.repainted = false; + bar.setFormat("%v of %m (%p%)"); + qApp->processEvents(); ++ ++#if 0 // Removed + #ifndef Q_WS_MAC + // The Mac scroll bar is animated, which means we get paint events all the time. + QVERIFY(!bar.repainted); + #endif ++#endif ++ + QCOMPARE(bar.text(), QString("1 of 10 (10%)")); + bar.setRange(5, 5); + bar.setValue(5); diff --git a/config.profiles/harmattan/patches/tst_qscrollbar.diff b/config.profiles/harmattan/patches/tst_qscrollbar.diff new file mode 100644 index 0000000..3c777a9 --- /dev/null +++ b/config.profiles/harmattan/patches/tst_qscrollbar.diff @@ -0,0 +1,12 @@ +Index: qt-maemo-qtp/tests/auto/qscrollbar/tst_qscrollbar.cpp +=================================================================== +--- qt-maemo-qtp.orig/tests/auto/qscrollbar/tst_qscrollbar.cpp ++++ qt-maemo-qtp/tests/auto/qscrollbar/tst_qscrollbar.cpp +@@ -104,6 +104,7 @@ + + void tst_QScrollBar::task_209492() + { ++ QSKIP("Unstable test on Harmattan", SkipSingle); + class MyScrollArea : public QScrollArea + { + public: diff --git a/config.profiles/harmattan/patches/tst_qvariant.diff b/config.profiles/harmattan/patches/tst_qvariant.diff new file mode 100644 index 0000000..bcded52 --- /dev/null +++ b/config.profiles/harmattan/patches/tst_qvariant.diff @@ -0,0 +1,21 @@ +Index: qt-maemo-qtp/tests/auto/qvariant/tst_qvariant.cpp +=================================================================== +--- qt-maemo-qtp.orig/tests/auto/qvariant/tst_qvariant.cpp ++++ qt-maemo-qtp/tests/auto/qvariant/tst_qvariant.cpp +@@ -3122,6 +3122,7 @@ + + void tst_QVariant::numericalConvert() + { ++ int low_int = 3; + QVariant vfloat(float(5.3)); + QVariant vdouble(double(5.3)); + QVariant vreal(qreal(5.3)); +@@ -3137,7 +3138,7 @@ + + for(int i = 0; i < vect.size(); i++) { + double num = 5.3; +- if (i >= 3 && i <= 7) ++ if (i >= low_int && i <= 7) + num = 5; + QVariant *v = vect.at(i); + QCOMPARE(v->toFloat() , float(num)); diff --git a/config.profiles/harmattan/qt4-acceptance-tests.lintian b/config.profiles/harmattan/qt4-acceptance-tests.lintian new file mode 100644 index 0000000..c44aad8 --- /dev/null +++ b/config.profiles/harmattan/qt4-acceptance-tests.lintian @@ -0,0 +1,6 @@ +qt4-acceptance-tests: unknown-control-file digsigsums +qt4-acceptance-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbusconnection +qt4-acceptance-tests: file-in-unusual-dir usr/tests/qt4/tst_qhash +qt4-acceptance-tests: file-in-unusual-dir usr/tests/qt4/tst_qlist +qt4-acceptance-tests: file-in-unusual-dir usr/tests/qt4/tst_qmap +qt4-acceptance-tests: non-standard-dir-in-usr usr/tests/ diff --git a/config.profiles/harmattan/qt4-declarative-qmlviewer.install b/config.profiles/harmattan/qt4-declarative-qmlviewer.install new file mode 100644 index 0000000..2822108 --- /dev/null +++ b/config.profiles/harmattan/qt4-declarative-qmlviewer.install @@ -0,0 +1,3 @@ +usr/bin/qmlviewer +usr/share/applications/QMLViewer.desktop +usr/share/icons/hicolor/64x64/apps/QMLViewer.png diff --git a/config.profiles/harmattan/qt4-declarative-qmlviewer.lintian b/config.profiles/harmattan/qt4-declarative-qmlviewer.lintian new file mode 100644 index 0000000..4acdec6 --- /dev/null +++ b/config.profiles/harmattan/qt4-declarative-qmlviewer.lintian @@ -0,0 +1 @@ +qt4-declarative-qmlviewer: unknown-control-file digsigsums diff --git a/config.profiles/harmattan/qt4-doc-html.doc-base b/config.profiles/harmattan/qt4-doc-html.doc-base new file mode 100644 index 0000000..58063c6 --- /dev/null +++ b/config.profiles/harmattan/qt4-doc-html.doc-base @@ -0,0 +1,11 @@ +Document: qt4-doc-html +Title: Qt4 Reference Documentation +Author: Trolltech AS +Abstract: Qt is a cross-platform C++ application framework. Qt's + primary feature is its rich set of widgets that provide standard GUI + functionality. +Section: Apps/programming + +Format: HTML +Index: /usr/share/doc/qt4-doc-html/html/index.html +Files: /usr/share/doc/qt4-doc-html/html/*.html diff --git a/config.profiles/harmattan/qt4-doc-html.install b/config.profiles/harmattan/qt4-doc-html.install new file mode 100644 index 0000000..8467be4 --- /dev/null +++ b/config.profiles/harmattan/qt4-doc-html.install @@ -0,0 +1,2 @@ +usr/share/qt4/doc/html + diff --git a/config.profiles/harmattan/qt4-doc-html.links b/config.profiles/harmattan/qt4-doc-html.links new file mode 100644 index 0000000..d1fed65 --- /dev/null +++ b/config.profiles/harmattan/qt4-doc-html.links @@ -0,0 +1,2 @@ +usr/share/qt4/doc/html usr/share/doc/qt4-doc-html/html + diff --git a/config.profiles/harmattan/qt4-doc.install b/config.profiles/harmattan/qt4-doc.install new file mode 100644 index 0000000..1037a6c --- /dev/null +++ b/config.profiles/harmattan/qt4-doc.install @@ -0,0 +1,3 @@ +usr/share/qt4/doc/qch/* +usr/share/qt4/doc/src/* + diff --git a/config.profiles/harmattan/qt4-linguist-tools.install b/config.profiles/harmattan/qt4-linguist-tools.install new file mode 100644 index 0000000..73c0bb1 --- /dev/null +++ b/config.profiles/harmattan/qt4-linguist-tools.install @@ -0,0 +1,4 @@ +usr/bin/native-lrelease +usr/bin/host-lrelease +usr/bin/lupdate +usr/bin/lconvert diff --git a/config.profiles/harmattan/qt4-linguist-tools.lintian b/config.profiles/harmattan/qt4-linguist-tools.lintian new file mode 100644 index 0000000..0f8ed2b --- /dev/null +++ b/config.profiles/harmattan/qt4-linguist-tools.lintian @@ -0,0 +1,4 @@ +qt4-linguist-tools: unknown-control-file digsigsums +qt4-linguist-tools: binary-from-other-architecture ./usr/bin/host-lrelease +qt4-linguist-tools: binary-or-shlib-defines-rpath ./usr/bin/host-lrelease /scratchbox/host_shared/lib +qt4-linguist-tools: binary-or-shlib-defines-rpath ./usr/bin/host-lrelease /host_usr/lib diff --git a/config.profiles/harmattan/qt4-linguist-tools.postinst b/config.profiles/harmattan/qt4-linguist-tools.postinst new file mode 100644 index 0000000..2453b95 --- /dev/null +++ b/config.profiles/harmattan/qt4-linguist-tools.postinst @@ -0,0 +1,16 @@ +#!/bin/sh + +set -e + +PREFIX=native +if [ -f /targets/links/scratchbox.config ]; then + PREFIX=host +fi + +BINARIES="lrelease" + +for bin in $BINARIES; do + ln -sf "/usr/bin/${PREFIX}-${bin}" "/usr/bin/${bin}" +done + +#DEBHELPER# diff --git a/config.profiles/harmattan/qt4-linguist-tools.prerm b/config.profiles/harmattan/qt4-linguist-tools.prerm new file mode 100644 index 0000000..04b51bd --- /dev/null +++ b/config.profiles/harmattan/qt4-linguist-tools.prerm @@ -0,0 +1,16 @@ +#!/bin/sh + +set -e + +BINARIES="lrelease" + +case "$1" in + upgrade) ;; + remove|failed-upgrade|deconfigure) + for bin in $BINARIES; do + rm -f "/usr/bin/${bin}" + done + ;; +esac + +#DEBHELPER# diff --git a/config.profiles/harmattan/qt4-maemo-auto-tests.lintian b/config.profiles/harmattan/qt4-maemo-auto-tests.lintian new file mode 100644 index 0000000..3745c80 --- /dev/null +++ b/config.profiles/harmattan/qt4-maemo-auto-tests.lintian @@ -0,0 +1,41 @@ +qt4-maemo-auto-tests: unknown-control-file digsigsums +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbusabstractadaptor +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbusabstractinterface +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbuscontext +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbusinterface +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbuslocalcalls +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbusmetaobject +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbusmetatype +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbuspendingcall +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbuspendingreply +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbusreply +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbusservicewatcher +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbusthreading +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdbusxmlparser +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qdebug +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qmutexlocker +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qnetworkaddressentry +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qnetworkcookie +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qnetworkcookiejar +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qnetworkproxy +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qnetworkrequest +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qobjectrace +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qpainterpathstroker +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qpen +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qpoint +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qpolygon +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qquaternion +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qqueue +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qrand +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qreadlocker +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qreadwritelock +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qrect +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qringbuffer +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qscopedpointer +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qscriptclass +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qscriptcontextinfo +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qscriptstring +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qscriptvalueiterator +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qsequentialanimationgroup +qt4-maemo-auto-tests: file-in-unusual-dir usr/tests/qt4/tst_qset +qt4-maemo-auto-tests: non-standard-dir-in-usr usr/tests/ diff --git a/config.profiles/harmattan/readdir-hppa-test.c b/config.profiles/harmattan/readdir-hppa-test.c new file mode 100644 index 0000000..eb893ba --- /dev/null +++ b/config.profiles/harmattan/readdir-hppa-test.c @@ -0,0 +1,25 @@ +#include +#include +#include +#include + +main() { + int return_code; + DIR *dir; + struct dirent entry; + struct dirent *result; + + if ((dir = opendir(".")) == NULL) + perror("opendir() error"); + else { + // puts("contents of .:"); + for (return_code = readdir_r(dir, &entry, &result); + result != NULL && return_code == 0; + return_code = readdir_r(dir, &entry, &result)) + printf("%s\n", entry.d_name); + if (return_code != 0) + perror("readdir_r() error"); + closedir(dir); + } +} + diff --git a/config.profiles/harmattan/rules b/config.profiles/harmattan/rules new file mode 100755 index 0000000..3042551 --- /dev/null +++ b/config.profiles/harmattan/rules @@ -0,0 +1,404 @@ +#!/usr/bin/make -f + +export QTDIR := $(shell pwd) +export PATH := $(QTDIR)/bin:$(PATH) +# workaround to use lrelease. +export LD_LIBRARY_PATH := $(QTDIR)/lib:$(LD_LIBRARY_PATH) +export QT_PLUGIN_PATH := $(QTDIR)/plugins +export DH_VERBOSE=1 + +# Only present in official source package +#QTVERSION := $(shell ls changes-* | cut -f2 -d '-') +CURRENTVERSION := $(shell head -1 debian/changelog | sed 's/[^(]*(\([^)]*\)).*/\1/') + +include /usr/share/cdbs/1/rules/debhelper.mk +include /usr/share/cdbs/1/class/makefile.mk +include /usr/share/cdbs/1/rules/patchsys-quilt.mk +include /usr/share/cdbs/1/rules/utils.mk + +# Find out how many parallel threads to run +TMP_BUILD_OPTS = $(subst $(comma),$(space),$(DEB_BUILD_OPTIONS)) +ifneq (,$(filter parallel=%,$(TMP_BUILD_OPTS))) + NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(TMP_BUILD_OPTS))) + PARALLEL_MAKEFLAGS += -j$(NUMJOBS) +endif +BUILD_NOOPT := no +ifneq (,$(filter noopt,$(TMP_BUILD_OPTS))) + BUILD_NOOPT := yes +endif +BUILD_DOCS := yes +ifneq (,$(filter nodoc,$(TMP_BUILD_OPTS))) + BUILD_DOCS := no +endif +ifneq (,$(filter nodocs,$(TMP_BUILD_OPTS))) + BUILD_DOCS := no +endif +TRY_TARGET_BUILD := no +ifneq (,$(filter native-tools,$(TMP_BUILD_OPTS))) + TRY_TARGET_BUILD := yes +endif + +DEB_MAKE_INVOKE := $(MAKE) $(PARALLEL_MAKEFLAGS) +DEB_MAKE_BUILD_TARGET := sub-src +DEB_MAKE_INSTALL_TARGET := INSTALL_ROOT=$(DEB_DESTDIR) install +DEB_DH_INSTALL_SOURCEDIR := debian/tmp + +# Ensure the *.debug files aren't included in any package other than libqt4-dbg +DEB_DH_INSTALL_ARGS := --exclude=.debug + +DEB_MAKE_CLEAN_TARGET := confclean distclean + +# Shlibs of the current upstream version +DEB_DH_MAKESHLIBS_ARGS_ALL := -V + +DEB_DH_SHLIBDEPS_ARGS_ALL := --exclude=.debug -Xusr/bin/host- + +# Only present in official source package +#DEB_INSTALL_CHANGELOGS_ALL := changes-$(QTVERSION) + +QT_MAEMO_TESTDIR := debian/tests +export QMAKEFEATURES=$(CURDIR)/debian/tests +export QMAKE_INVOKE=$(CURDIR)/bin/qmake +export QMAKE_BUILD_ROOT=$(CURDIR) + +#Test packages that will run using -style option +QT_AUTOTESTS_GUI_STYLE := "libqt4-gui-tests" + +# Select OpenGL backend driver +# Enable multituch support +ifeq ($(DEB_HOST_ARCH),arm) + CONFIG_ARCH_OPT = armv6 +else + ifeq ($(DEB_HOST_ARCH),armel) + CONFIG_ARCH_OPT = armv6 + else + CONFIG_ARCH_OPT = i386 + endif + +endif + +EXTRA_CONFIGURE_OPTS += -DQT_QLOCALE_USES_FCVT -DQT_EXPERIMENTAL_CLIENT_DECORATIONS -DQT_MEEGO_EXPERIMENTAL_SHADERCACHE -DQT_MEEGO_EXPERIMENTAL_SHADERCACHE_TRACE + +# Check if running inside scratchbox, and that host-gcc works +IN_SBOX = $(shell if [ -f /targets/links/scratchbox.config ]; then echo yes; else echo no; fi) +HOST_GCC_WORKS = $(shell if host-gcc --version > /dev/null; then echo yes; else echo no; fi) +TARGET_BUILD = no +ifeq ($(TRY_TARGET_BUILD),yes) + ifeq ($(IN_SBOX),yes) + ifeq ($(HOST_GCC_WORKS),yes) + TARGET_BUILD = yes + endif + endif +# Except don't use host-gcc if building for i386 + ifeq ($(DEB_HOST_ARCH),i386) + TARGET_BUILD = no + endif +endif + +TARGET_PLATFORM = linux-g++-maemo +HOST_PLATFORM = unsupported/linux-host-g++ +PLATFORM_FLAG = -platform $(TARGET_PLATFORM) +FORCE_PKG_CONFIG_FLAG = +HOST_EXLUDES = +ifeq ($(TARGET_BUILD),yes) + PLATFORM_FLAG = -platform $(HOST_PLATFORM) \ + -xplatform $(TARGET_PLATFORM) + FORCE_PKG_CONFIG_FLAG = -force-pkg-config + HOST_EXCLUDES := usr/bin/host- usr/bin/qmake +endif + +DEB_STRIP_EXCLUDE := $(HOST_EXCLUDES) + +# Determine target architecture +ifeq ($(DEB_HOST_ARCH_OS),linux) + ifeq ($(CONFIG_ARCH_OPT),armv6) + GL_BACKEND=es2 + EXTRA_CONFIGURE_OPTS += -graphicssystem runtime \ + -runtimegraphicssystem meego + CONFIG_BUILD_OPT = -release + else + GL_BACKEND=desktop + CONFIG_BUILD_OPT = -debug + endif +else + TARGET_PLATFORM = glibc-g++ +endif + +#If noopt is selected, force -debug and some compilation flags +ifeq ($(BUILD_NOOPT),yes) + CONFIG_BUILD_OPT = -debug + CFLAGS = -g + CXXFLAGS = -g + export CFLAGS + export CXXFLAGS +endif + +MAKE_DOCS := -make docs +DOCS_EXCLUDE := +ifeq ($(BUILD_DOCS),no) + MAKE_DOCS := -nomake docs +endif + +common-build-arch:: debian/stamp-makefile-build-tools + +debian/stamp-makefile-build-tools: debian/stamp-makefile-build + $(DEB_MAKE_INVOKE) sub-tools + touch $@ + +common-configure-arch:: config.status + +config.status: + # Create mkspecs/glibc-g++ from mkspecs/linux-g++, needed by GNU/kFreeBSD + # we cannot use directly linux-g++ due to src/corelib/io/io.pri + rm -rf mkspecs/glibc-g++ + cp -a mkspecs/linux-g++ mkspecs/glibc-g++ + ./configure -opensource \ + -confirm-license \ + $(CONFIG_BUILD_OPT) \ + -prefix "/usr" \ + -bindir "/usr/bin" \ + -libdir "/usr/lib" \ + -docdir "/usr/share/qt4/doc" \ + -headerdir "/usr/include/qt4" \ + -datadir "/usr/share/qt4" \ + -plugindir "/usr/lib/qt4/plugins" \ + -importdir "/usr/lib/qt4/imports" \ + -translationdir "/usr/share/qt4/translations" \ + -sysconfdir "/etc/xdg" \ + $(PLATFORM_FLAG) \ + $(FORCE_PKG_CONFIG_FLAG) \ + -arch $(CONFIG_ARCH_OPT) \ + -fast \ + -no-optimized-qmake \ + -reduce-relocations \ + -no-separate-debug-info \ + -no-rpath \ + -system-zlib \ + -system-libtiff \ + -system-libpng \ + -system-libjpeg \ + -no-nas-sound \ + -qt-gif \ + -no-qt3support \ + -no-libmng \ + -opengl $(GL_BACKEND) \ + -accessibility \ + -make tools \ + $(MAKE_DOCS) \ + -nomake examples \ + -nomake demos \ + -little-endian \ + -no-cups \ + -no-gtkstyle \ + -exceptions \ + -no-xinerama \ + -no-xcursor \ + -dbus-linked \ + -glib \ + -no-pch \ + -gstreamer \ + -svg \ + -no-webkit \ + -no-sql-ibase \ + -xmlpatterns \ + -system-sqlite \ + -plugin-sql-sqlite \ + -openssl \ + -phonon \ + -xinput2 \ + -icu \ + $(EXTRA_CONFIGURE_OPTS) + +BINARY_NAMES := qmake moc lrelease rcc uic +HOST_BINARIES := $(addprefix $(CURDIR)/bin/, $(addprefix host-, $(BINARY_NAMES))) + +# host-prefixed binaries are to be copied anyway regardless of the platform +common-build-arch:: $(HOST_BINARIES) debian/stamp-makefile-build-target-binaries + +$(HOST_BINARIES): + cp "$(subst host-,,$@)" "$@" + if [ -n "$(HOST_EXCLUDES)" ]; then host-strip --strip-all "$@"; fi + +debian/stamp-makefile-build-target-binaries: $(HOST_BINARIES) +# Build target-platform tools when cross-compiling + # First make sure qdoc3 is built + if [ "x$(BUILD_DOCS)" = "xyes" ]; then $(DEB_MAKE_INVOKE) -C tools/qdoc3; fi + # Keep qmake as is while building the rest, build into native-qmake + (cd qmake && $(DEB_MAKE_INVOKE) clean && $(QMAKE_INVOKE) -spec "$(CURDIR)/mkspecs/$(TARGET_PLATFORM)" && $(DEB_MAKE_INVOKE) "TARGET=$(QTDIR)/bin/native-qmake") + # bootstrap needs to be first + for dir in src/tools/bootstrap src/tools/moc tools/linguist/lrelease src/tools/rcc src/tools/uic; do \ + (cd "$$dir" && $(DEB_MAKE_INVOKE) clean && $(QMAKE_INVOKE) -spec "$(CURDIR)/mkspecs/$(TARGET_PLATFORM)" && $(DEB_MAKE_INVOKE)) \ + done + #Use the host binaries for the rest of the Qt build + for binary in moc rcc uic lrelease; do \ + mv "$(CURDIR)/bin/$$binary" "$(CURDIR)/bin/native-$$binary" ; \ + cp "$(CURDIR)/bin/host-$$binary" "$(CURDIR)/bin/$$binary"; \ + done + touch $@ + +#Build the auto tests +TEST_PACKAGES := $(filter %-tests, $(DEB_PACKAGES)) +common-build-arch:: $(addprefix debian/stamp-makefile-build-autotest-,$(TEST_PACKAGES)) + +BUILD_TEST_PACKAGE_NAME = $(subst debian/stamp-makefile-build-autotest-,,$@) +BUILD_TEST_DIR = build_tests/$(BUILD_TEST_PACKAGE_NAME) +$(addprefix debian/stamp-makefile-build-autotest-,$(TEST_PACKAGES)) : + rm -f tests/auto/$(BUILD_TEST_PACKAGE_NAME).pro + cp debian/tests/$(BUILD_TEST_PACKAGE_NAME).pro tests/auto + mkdir -p $(BUILD_TEST_DIR) + cd $(BUILD_TEST_DIR) && $(QMAKE_INVOKE) -recursive $(CURDIR)/tests/auto/$(BUILD_TEST_PACKAGE_NAME).pro CONFIG+=maemo_tests + $(DEB_MAKE_INVOKE) -C $(BUILD_TEST_DIR) + touch $@ + + +clean:: +# Extra stuff missed by confclean/distclean + + # Misc. files + rm -f \ + config.status \ + config.tests/.qmake.cache \ + .qmake.cache \ + examples/dbus/*/Makefile.* \ + mkspecs/qconfig.pri \ + src/corelib/global/qconfig.* \ + src/tools/uic/qclass_lib_map.h \ + lib/*.so.* \ + lib/*.la \ + tests/auto/libqt4-gui-tests.pri \ + tests/auto/maemo-auto.pro \ + tests/auto/qt4-acceptance-tests.pri \ + tests/auto/qt4-maemo-auto-tests.pri \ + ; + + # Misc. directories + rm -rf \ + examples/tools/plugandpaint/plugins/ \ + examples/tools/styleplugin/styles/ \ + mkspecs/glibc-g++/ \ + plugins/ \ + include/ \ + doc-build/ \ + doc/html/ \ + doc/qch/ \ + ; + + # hppa test directory + rm -rf debian/hppa-tmp + + # Leftover dirs + find -depth -type d \( -false \ + -o -name debug-shared \ + -o -name debug-static \ + -o -name \*.gch \ + -o -name .moc\* \ + -o -name .obj\* \ + -o -name .pch \ + -o -name pkgconfig \ + -o -name .rcc \ + -o -name release-shared \ + -o -name release-static \ + -o -name .uic \ + \) -print0 | xargs -0 rm -rf + + # Leftover files and all symlinks except those in .git + find \( -false \ + -o \( -name \*.a -a ! -path \*/tests/auto/qdir/types/\*.a \) \ + -o -name Makefile.Debug \ + -o -name Makefile.Release \ + -o -name \*.o \ + -o -name \*.prl \ + -o \( -name \*.so -a ! -path \*/tests/auto/qlibrary/library_path/invalid.so \) \ + -o -name \*.so.debug \ + -o -type l \ + \! -path ./.git/\* \ + \) -print0 | xargs -0 rm -rf + + # Delete all Makefiles, excluding some from src/3rdparty + find $(CURDIR) -name Makefile \ + ! -path $(CURDIR)/src/3rdparty/Makefile \ + ! -path $(CURDIR)/src/3rdparty/freetype/\* \ + ! -path $(CURDIR)/src/3rdparty/zlib/\* \ + ! -path $(CURDIR)/src/3rdparty/ptmalloc/Makefile \ + ! -path $(CURDIR)/util/gencmap/Makefile \ + -print0 | xargs -0 rm -rf + + # Any remaining executables + find $(CURDIR) -type f -perm +111 -exec file -i '{}' \; \ + | grep -e application/x-executable \ + | cut -d ':' -f 1 | xargs rm -f + + # Generated on build + rm -f debian/shlibs.local + rm -f debian/stamp-makefile-build-tools + rm -f debian/stamp-makefile-build-docs + rm -f debian/stamp-makefile-build-target-binaries + rm -f $(addprefix debian/stamp-makefile-build-autotest-,$(TEST_PACKAGES)) + rm -f $(addprefix debian/,$(addsuffix .install, $(TEST_PACKAGES))) + rm -f $(addprefix tests/auto/,$(addsuffix .pro, $(TEST_PACKAGES))) + rm -rf build_tests/ + + +common-install-arch:: + mkdir -p $(DEB_DESTDIR)/usr/share/qt4/translations/ + cp $(CURDIR)/translations/*.ts $(DEB_DESTDIR)/usr/share/qt4/translations/. + find $(DEB_DESTDIR)/usr/share/qt4/translations/ -type f -name "*.ts" | xargs $(CURDIR)/bin/lrelease + rm -rf $(DEB_DESTDIR)/usr/share/qt4/translations/*.ts +# Fix wrong path in pkgconfig files + find $(DEB_DESTDIR)/usr/lib/pkgconfig -type f -name '*.pc' \ + -exec perl -pi -e "s, -L$(CURDIR)/?\S+,,g" {} \; +# Fix wrong path in prl files + find $(DEB_DESTDIR)/usr/lib -type f -name '*.prl' \ + -exec perl -pi -e "s, -L$(CURDIR)/\S+,,g" {} \; + find $(DEB_DESTDIR)/usr/lib -type f -name '*.prl' \ + -exec sed -i -e "/^QMAKE_PRL_BUILD_DIR/d;s/\(QMAKE_PRL_LIBS =\).*/\1/" {} \; + + +install/qt4-declarative-qmlviewer:: + install -p -D "debian/QMLViewer.desktop" "$(DEB_DESTDIR)/usr/share/applications/QMLViewer.desktop" + install -p -D "debian/QMLViewer.png" "$(DEB_DESTDIR)/usr/share/icons/hicolor/64x64/apps/QMLViewer.png" + + +$(patsubst %,install/%,$(TEST_PACKAGES)) :: install/%: + rm -f debian/$(cdbs_curpkg).install + $(DEB_MAKE_INVOKE) -C build_tests/$(cdbs_curpkg) $(DEB_MAKE_INSTALL_TARGET) + $(DEB_MAKE_INVOKE) -C build_tests/$(cdbs_curpkg) QTM_TEST_INSTALL_FILE=$(CURDIR)/debian/$(cdbs_curpkg).install installtests + if [ -z "$(findstring $(cdbs_curpkg),$(QT_AUTOTESTS_GUI_STYLE))" ]; then \ + $(QT_MAEMO_TESTDIR)/create_tests_xml -t $(QT_MAEMO_TESTDIR) \ + -i $(DEB_DESTDIR) -p $(CURDIR)/debian/$(cdbs_curpkg).install ;\ + else \ + $(QT_MAEMO_TESTDIR)/create_tests_xml -t $(QT_MAEMO_TESTDIR) -c "-style plastique" \ + -i $(DEB_DESTDIR) -p $(CURDIR)/debian/$(cdbs_curpkg).install ;\ + fi + +common-install-arch:: + find "$(CURDIR)/bin" -name "host-*" -exec install -p -D {} "$(DEB_DESTDIR)/usr/bin" \; + find "$(CURDIR)/bin" -name "native-*" -exec install -p -D {} "$(DEB_DESTDIR)/usr/bin" \; + + +install/libqt4-doc:: + mkdir -p "$(DEB_DESTDIR)/usr/share/qt4/doc/html/" + if [ "x$(BUILD_DOCS)" = "xno" ]; then touch "$(DEB_DESTDIR)/usr/share/qt4/doc/html/BUILT_WITH_NODOCS"; fi + +common-build-indep:: debian/stamp-makefile-build-docs + +debian/stamp-makefile-build-docs: + if [ "x$(BUILD_DOCS)" = "xyes" ]; then $(DEB_MAKE_INVOKE) docs; fi + touch $@ + +binary-predeb/libqt4-dev:: + sed -i -e 's/#PLATFORM_ARG#/$(TARGET_PLATFORM)/g' debian/$(cdbs_curpkg)/DEBIAN/postinst + +# Automatically install lintian overrides, stolen from debian-qt-kde.mk +$(patsubst %,binary-install/%,$(DEB_PACKAGES)) :: binary-install/%: + if test -e debian/$(cdbs_curpkg).lintian; then \ + install -p -D -m644 debian/$(cdbs_curpkg).lintian \ + debian/$(cdbs_curpkg)/usr/share/lintian/overrides/$(cdbs_curpkg); \ + fi + +# Generate shlibs local files +$(patsubst %,binary-fixup/%,$(DEB_ALL_PACKAGES)) :: binary-fixup/%: binary-strip/% + if test -e debian/$(cdbs_curpkg)/DEBIAN/shlibs ; then \ + sed 's/>=[^)]*/= $(CURRENTVERSION)/' debian/$(cdbs_curpkg)/DEBIAN/shlibs >> debian/shlibs.local ;\ + fi + diff --git a/config.profiles/harmattan/source.lintian-overrides b/config.profiles/harmattan/source.lintian-overrides new file mode 100644 index 0000000..1835a30 --- /dev/null +++ b/config.profiles/harmattan/source.lintian-overrides @@ -0,0 +1,5 @@ +qt4-x11 source: changelog-should-mention-nmu +qt4-x11 source: native-package-with-dash-version +qt4-x11 source: source-nmu-has-incorrect-version-number +qt4-x11 source: virtual-package-depends-without-real-package-depends build-depends: libgl-dev +qt4-x11 source: virtual-package-depends-without-real-package-depends build-depends: libgl1 diff --git a/config.profiles/harmattan/source/format b/config.profiles/harmattan/source/format new file mode 100644 index 0000000..89ae9db --- /dev/null +++ b/config.profiles/harmattan/source/format @@ -0,0 +1 @@ +3.0 (native) diff --git a/config.profiles/harmattan/tests/create_tests_xml b/config.profiles/harmattan/tests/create_tests_xml new file mode 100755 index 0000000..d6122bc --- /dev/null +++ b/config.profiles/harmattan/tests/create_tests_xml @@ -0,0 +1,174 @@ +#!/bin/sh + +############################################################################# +## +## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +## All rights reserved. +## Contact: Nokia Corporation (qt-info@nokia.com) +## +## This file is the build configuration utility of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:LGPL$ +## No Commercial Usage +## This file contains pre-release code and may not be distributed. +## You may use this file in accordance with the terms and conditions +## contained in the Technology Preview License Agreement accompanying +## this package. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 2.1 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 2.1 requirements +## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +## +## In addition, as a special exception, Nokia gives you certain additional +## rights. These rights are described in the Nokia Qt LGPL Exception +## version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +## +## If you have questions regarding the use of this file, please contact +## Nokia at qt-info@nokia.com. +## +## +## +## +## +## +## +## +## $QT_END_LICENSE$ +## +############################################################################# + + +set -e +#set -u + +xmlInstallDir="usr/share" + +testSuiteHeader="testsuite_header.txt" +testSuiteFooter="testsuite_footer.txt" +testSetTemplate="testset.txt" + + +#------------------------------------------------------------------------------- +#Parameters: $1 the project file where the tests are defined +#------------------------------------------------------------------------------- +create_test_xml() +{ + + mkdir -p "$installDir/$xmlInstallDir/$packageName" + xmlFile="$installDir/$xmlInstallDir/$packageName/tests.xml" + + + begin_test_suite $xmlFile + + for testApp in $(< "$installFile"); do + if file -i "$installDir/$testApp"|grep -e "application/x-executable" ; then + add_test_set "$testApp" "$xmlFile" + fi + done + + end_test_suite $xmlFile + + echo "$xmlInstallDir/$packageName/tests.xml" >> "$installFile" + +} + +#------------------------------------------------------------------------------- +#Parameters: $1 the xml output file' +#------------------------------------------------------------------------------- +begin_test_suite() +{ + optstr="/ "$1" +} + +#Parameters: $1 the xml output file +end_test_suite() +{ + cat "$templateDir/$testSuiteFooter" >> "$1" +} + +#------------------------------------------------------------------------------- +#Parameters: $1 the name of the test application +#Parameters: $2 the xml output file +#------------------------------------------------------------------------------- +add_test_set() +{ + templateSetFile="$templateDir/$testSetTemplate" + testSuiteName=$(basename $1) + add_set_name "$testSuiteName" "$templateSetFile" |add_description "$testSuiteName" |add_case_name "$testSuiteName" |add_step "$1" >> "$2" +} + +add_set_name() +{ + optstr="/&2 + exit 1 +fi + +while [ $# -gt 0 ]; do + case "$1" in + -t) templateDir=$(cd "$2"; pwd) + shift + ;; + -i) installDir=$(cd "$2"; pwd) + shift + ;; + -p) installFile="$2" + packageName=$(basename "$installFile" ".install") + shift + ;; + -c) testCliOptions="$2" + shift + ;; + *) projFileList="$projFileList $1";; + esac + shift +done + + +create_test_xml diff --git a/config.profiles/harmattan/tests/libqt4-gui-tests.pro b/config.profiles/harmattan/tests/libqt4-gui-tests.pro new file mode 100644 index 0000000..d00f139 --- /dev/null +++ b/config.profiles/harmattan/tests/libqt4-gui-tests.pro @@ -0,0 +1,64 @@ +#Staging tests for gui +TEMPLATE = subdirs + +SUBDIRS += modeltest \ + qabstractbutton \ + qabstractitemmodel \ + qabstractprintdialog \ + qabstractproxymodel \ + qabstractslider \ + qabstractspinbox \ + qabstracttextdocumentlayout \ + qabstractvideobuffer \ + qabstractvideosurface \ + qaction \ + qfileiconprovider \ + qfocusframe \ + qfont \ + qfontmetrics \ + qformlayout \ + qgraphicslayout \ + qnetworkcachemetadata \ + qpaintengine \ + qpalette \ + qparallelanimationgroup \ + qpauseanimation \ + qpicture \ + qplaintextedit \ + qpointer \ + qprinterinfo \ + qprogressbar \ + qprogressdialog \ + qpropertyanimation \ + qradiobutton \ + qregexpvalidator \ + qscriptenginedebugger \ + qscrollarea \ + qscrollbar \ + qsharedpointer_and_qwidget \ + qsignalmapper \ + qslider \ + qsortfilterproxymodel \ + qspinbox \ + qstackedlayout \ + qstackedwidget \ + qstandarditem \ + qstandarditemmodel \ + qstatemachine \ + qstringlistmodel \ + qstyleoption \ + qsyntaxhighlighter \ + qtextblock \ + qtextcursor \ + qtextformat \ + qtextlist \ + qtextobject \ + qtextscriptengine \ + qtexttable \ + qtoolbox \ + qtoolbutton \ + qtreewidgetitemiterator \ + qundogroup \ + qundostack \ + qvideosurfaceformat \ + qwidgetaction diff --git a/config.profiles/harmattan/tests/maemo_tests.prf b/config.profiles/harmattan/tests/maemo_tests.prf new file mode 100644 index 0000000..1b87781 --- /dev/null +++ b/config.profiles/harmattan/tests/maemo_tests.prf @@ -0,0 +1,57 @@ +############################################################################# +## +## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +## All rights reserved. +## Contact: Nokia Corporation (qt-info@nokia.com) +## +## This file is the build configuration utility of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:LGPL$ +## No Commercial Usage +## This file contains pre-release code and may not be distributed. +## You may use this file in accordance with the terms and conditions +## contained in the Technology Preview License Agreement accompanying +## this package. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 2.1 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 2.1 requirements +## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +## +## In addition, as a special exception, Nokia gives you certain additional +## rights. These rights are described in the Nokia Qt LGPL Exception +## version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +## +## If you have questions regarding the use of this file, please contact +## Nokia at qt-info@nokia.com. +## +## +## +## +## +## +## +## +## $QT_END_LICENSE$ +## +############################################################################# + +load(qttest_p4) + +installtests.CONFIG = recursive +!contains(TEMPLATE, subdirs): for(install_set, INSTALLS) { + contains(install_set, target) { + installtests.commands += echo $${target.path}/$${TARGET} >> \$(QTM_TEST_INSTALL_FILE) ; + } else { + install_set_path=$$member($${install_set}.path) + installtests.commands += echo $${install_set_path} >> \$(QTM_TEST_INSTALL_FILE) ; + } +} + +QMAKE_EXTRA_TARGETS += installtests + +DEFINES -= $$find(DEFINES, SRCDIR.*) +DEFINES += SRCDIR=\\\"$${target.path}\\\" diff --git a/config.profiles/harmattan/tests/qt4-acceptance-tests.pro b/config.profiles/harmattan/tests/qt4-acceptance-tests.pro new file mode 100644 index 0000000..4549f7a --- /dev/null +++ b/config.profiles/harmattan/tests/qt4-acceptance-tests.pro @@ -0,0 +1,6 @@ +#Acceptance tests +TEMPLATE = subdirs +SUBDIRS += qdbusconnection \ + qhash \ + qlist \ + qmap diff --git a/config.profiles/harmattan/tests/qt4-maemo-auto-tests.pro b/config.profiles/harmattan/tests/qt4-maemo-auto-tests.pro new file mode 100644 index 0000000..bd218f5 --- /dev/null +++ b/config.profiles/harmattan/tests/qt4-maemo-auto-tests.pro @@ -0,0 +1,44 @@ +#Staging tests that require no data or style ibfo +TEMPLATE = subdirs +SUBDIRS += qdbusabstractadaptor \ + qdbusabstractinterface \ + qdbuscontext \ + qdbusinterface \ + qdbuslocalcalls \ + qdbusmetaobject \ + qdbusmetatype \ + qdbuspendingcall \ + qdbuspendingreply \ + qdbusreply \ + qdbusservicewatcher \ + qdbusthreading \ + qdbusxmlparser \ + qdebug \ + qeventloop \ + qmutexlocker \ + qnetworkaddressentry \ + qnetworkproxy \ + qnetworkrequest \ + qnetworkcookie \ + qnetworkcookiejar \ + qobjectrace \ + qpainterpathstroker \ + qpen \ + qpoint \ + qpolygon \ + qquaternion \ + qqueue \ + qrand \ + qreadlocker \ + qreadwritelock \ + qrect \ + qringbuffer \ + qscopedpointer \ + qscriptclass \ + qscriptcontextinfo \ + qscriptstring \ + qscriptvalueiterator \ + qsequentialanimationgroup \ + qset \ + qwaitcondition + diff --git a/config.profiles/harmattan/tests/tests.xml b/config.profiles/harmattan/tests/tests.xml new file mode 100644 index 0000000..e276bfa --- /dev/null +++ b/config.profiles/harmattan/tests/tests.xml @@ -0,0 +1,320 @@ + + + + + + qt4-acceptance-tests:tst_qhash + + qt4-acceptance-tests:tst_qhash:insert1 + /usr/tests/qt4/tst_qhash insert1 + + + qt4-acceptance-tests:tst_qhash:erase + /usr/tests/qt4/tst_qhash erase + + + qt4-acceptance-tests:tst_qhash:key + /usr/tests/qt4/tst_qhash key + + + qt4-acceptance-tests:tst_qhash:count + /usr/tests/qt4/tst_qhash count + + + qt4-acceptance-tests:tst_qhash:clear + /usr/tests/qt4/tst_qhash clear + + + qt4-acceptance-tests:tst_qhash:empty + /usr/tests/qt4/tst_qhash empty + + + qt4-acceptance-tests:tst_qhash:find + /usr/tests/qt4/tst_qhash find + + + qt4-acceptance-tests:tst_qhash:constFind + /usr/tests/qt4/tst_qhash constFind + + + qt4-acceptance-tests:tst_qhash:contains + /usr/tests/qt4/tst_qhash contains + + + qt4-acceptance-tests:tst_qhash:take + /usr/tests/qt4/tst_qhash take + + + qt4-acceptance-tests:tst_qhash:operator_eq + /usr/tests/qt4/tst_qhash operator_eq + + + qt4-acceptance-tests:tst_qhash:rehash_isnt_quadratic + /usr/tests/qt4/tst_qhash rehash_isnt_quadratic + + + qt4-acceptance-tests:tst_qhash:dont_need_default_constructor + /usr/tests/qt4/tst_qhash dont_need_default_constructor + + + qt4-acceptance-tests:tst_qhash:qhash + /usr/tests/qt4/tst_qhash qhash + + + qt4-acceptance-tests:tst_qhash:qmultihash_specific + /usr/tests/qt4/tst_qhash qmultihash_specific + + + qt4-acceptance-tests:tst_qhash:compare + /usr/tests/qt4/tst_qhash compare + + + qt4-acceptance-tests:tst_qhash:compare2 + /usr/tests/qt4/tst_qhash compare2 + + + qt4-acceptance-tests:tst_qhash:iterators + /usr/tests/qt4/tst_qhash iterators + + + qt4-acceptance-tests:tst_qhash:keys_values_uniqueKeys + /usr/tests/qt4/tst_qhash keys_values_uniqueKeys + + + qt4-acceptance-tests:tst_qhash:noNeedlessRehashes + /usr/tests/qt4/tst_qhash noNeedlessRehashes + + + true + true + + + + qt4-acceptance-tests:tst_qdbusconnection + + qt4-acceptance-tests:tst_qdbusconnection:noConnection + /usr/tests/qt4/tst_qdbusconnection noConnection + + + qt4-acceptance-tests:tst_qdbusconnection:connectToBus + /usr/tests/qt4/tst_qdbusconnection connectToBus + + + qt4-acceptance-tests:tst_qdbusconnection:connect + /usr/tests/qt4/tst_qdbusconnection connect + + + qt4-acceptance-tests:tst_qdbusconnection:send + /usr/tests/qt4/tst_qdbusconnection send + + + qt4-acceptance-tests:tst_qdbusconnection:sendAsync + /usr/tests/qt4/tst_qdbusconnection sendAsync + + + qt4-acceptance-tests:tst_qdbusconnection:sendSignal + /usr/tests/qt4/tst_qdbusconnection sendSignal + + + qt4-acceptance-tests:tst_qdbusconnection:registerObject + /usr/tests/qt4/tst_qdbusconnection registerObject + + + qt4-acceptance-tests:tst_qdbusconnection:registerObject2 + /usr/tests/qt4/tst_qdbusconnection registerObject2 + + + qt4-acceptance-tests:tst_qdbusconnection:registerQObjectChildren + /usr/tests/qt4/tst_qdbusconnection registerQObjectChildren + + + qt4-acceptance-tests:tst_qdbusconnection:callSelf + /usr/tests/qt4/tst_qdbusconnection callSelf + + + qt4-acceptance-tests:tst_qdbusconnection:callSelfByAnotherName + /usr/tests/qt4/tst_qdbusconnection callSelfByAnotherName + + + qt4-acceptance-tests:tst_qdbusconnection:multipleInterfacesInQObject + /usr/tests/qt4/tst_qdbusconnection multipleInterfacesInQObject + + + qt4-acceptance-tests:tst_qdbusconnection:slotsWithLessParameters + /usr/tests/qt4/tst_qdbusconnection slotsWithLessParameters + + + true + true + + + + qt4-acceptance-tests:tst_qaction + + qt4-acceptance-tests:tst_qaction:getSetCheck + /usr/tests/qt4/tst_qaction getSetCheck + + + qt4-acceptance-tests:tst_qaction:setText + /usr/tests/qt4/tst_qaction setText + + + qt4-acceptance-tests:tst_qaction:setIconText + /usr/tests/qt4/tst_qaction setIconText + + + qt4-acceptance-tests:tst_qaction:actionEvent + /usr/tests/qt4/tst_qaction actionEvent + + + qt4-acceptance-tests:tst_qaction:setStandardKeys + /usr/tests/qt4/tst_qaction setStandardKeys + + + qt4-acceptance-tests:tst_qaction:alternateShortcuts + /usr/tests/qt4/tst_qaction alternateShortcuts + + + qt4-acceptance-tests:tst_qaction:enabledVisibleInteraction + /usr/tests/qt4/tst_qaction enabledVisibleInteraction + + + qt4-acceptance-tests:tst_qaction:task200823_tooltip + /usr/tests/qt4/tst_qaction task200823_tooltip + + + qt4-acceptance-tests:tst_qaction:task229128TriggeredSignalWithoutActiongroup + /usr/tests/qt4/tst_qaction task229128TriggeredSignalWithoutActiongroup + + + qt4-acceptance-tests:tst_qaction:task229128TriggeredSignalWhenInActiongroup + /usr/tests/qt4/tst_qaction task229128TriggeredSignalWhenInActiongroup + + + true + true + + + + qt4-acceptance-tests:tst_qlist + + qt4-acceptance-tests:tst_qlist:length + /usr/tests/qt4/tst_qlist length + + + qt4-acceptance-tests:tst_qlist:lengthSignature + /usr/tests/qt4/tst_qlist lengthSignature + + + qt4-acceptance-tests:tst_qlist:append + /usr/tests/qt4/tst_qlist append + + + true + true + + + + qt4-acceptance-tests:tst_qgraphicslayout + + qt4-acceptance-tests:tst_qgraphicslayout:sizeHints + /usr/tests/qt4/tst_qgraphicslayout sizeHints + + + qt4-acceptance-tests:tst_qgraphicslayout:compressLayoutRequest + /usr/tests/qt4/tst_qgraphicslayout compressLayoutRequest + + + qt4-acceptance-tests:tst_qgraphicslayout:automaticReparenting + /usr/tests/qt4/tst_qgraphicslayout automaticReparenting + + + qt4-acceptance-tests:tst_qgraphicslayout:verifyActivate + /usr/tests/qt4/tst_qgraphicslayout verifyActivate + + + qt4-acceptance-tests:tst_qgraphicslayout:constructors + /usr/tests/qt4/tst_qgraphicslayout constructors + + + qt4-acceptance-tests:tst_qgraphicslayout:alternativeLayoutItems + /usr/tests/qt4/tst_qgraphicslayout alternativeLayoutItems + + + qt4-acceptance-tests:tst_qgraphicslayout:ownership + /usr/tests/qt4/tst_qgraphicslayout ownership + + + true + true + + + + qt4-acceptance-tests:tst_qmap + + qt4-acceptance-tests:tst_qmap:count + /usr/tests/qt4/tst_qmap count + + + qt4-acceptance-tests:tst_qmap:clear + /usr/tests/qt4/tst_qmap clear + + + qt4-acceptance-tests:tst_qmap:beginEnd + /usr/tests/qt4/tst_qmap beginEnd + + + qt4-acceptance-tests:tst_qmap:key + /usr/tests/qt4/tst_qmap key + + + qt4-acceptance-tests:tst_qmap:operator_eq + /usr/tests/qt4/tst_qmap operator_eq + + + qt4-acceptance-tests:tst_qmap:empty + /usr/tests/qt4/tst_qmap empty + + + qt4-acceptance-tests:tst_qmap:contains + /usr/tests/qt4/tst_qmap contains + + + qt4-acceptance-tests:tst_qmap:find + /usr/tests/qt4/tst_qmap find + + + qt4-acceptance-tests:tst_qmap:constFind + /usr/tests/qt4/tst_qmap constFind + + + qt4-acceptance-tests:tst_qmap:lowerUpperBound + /usr/tests/qt4/tst_qmap lowerUpperBound + + + qt4-acceptance-tests:tst_qmap:mergeCompare + /usr/tests/qt4/tst_qmap mergeCompare + + + qt4-acceptance-tests:tst_qmap:take + /usr/tests/qt4/tst_qmap take + + + qt4-acceptance-tests:tst_qmap:iterators + /usr/tests/qt4/tst_qmap iterators + + + qt4-acceptance-tests:tst_qmap:keys_values_uniqueKeys + /usr/tests/qt4/tst_qmap keys_values_uniqueKeys + + + qt4-acceptance-tests:tst_qmap:qmultimap_specific + /usr/tests/qt4/tst_qmap qmultimap_specific + + + true + true + + + + diff --git a/config.profiles/harmattan/tests/testset.txt b/config.profiles/harmattan/tests/testset.txt new file mode 100644 index 0000000..62de93d --- /dev/null +++ b/config.profiles/harmattan/tests/testset.txt @@ -0,0 +1,11 @@ + + ##Package-name:test_name## + + ##Package-name:test_name## + ##/usr/tests/qtm/tst_foo## + + + true + true + + diff --git a/config.profiles/harmattan/tests/testsuite_footer.txt b/config.profiles/harmattan/tests/testsuite_footer.txt new file mode 100644 index 0000000..8c71c93 --- /dev/null +++ b/config.profiles/harmattan/tests/testsuite_footer.txt @@ -0,0 +1,2 @@ + + diff --git a/config.profiles/harmattan/tests/testsuite_header.txt b/config.profiles/harmattan/tests/testsuite_header.txt new file mode 100644 index 0000000..4c57f76 --- /dev/null +++ b/config.profiles/harmattan/tests/testsuite_header.txt @@ -0,0 +1,4 @@ + + + + -- cgit v0.12 From ccd2feb1ec829af15073763218c258cb4d0b0525 Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Mon, 14 Mar 2011 10:51:50 +1000 Subject: Harmattan: fixed license headers. --- config.profiles/harmattan/configure-pulse.sh | 41 +++++++++++++++++++++++++ config.profiles/harmattan/manpages/lrelease.1 | 44 ++++++++++++++++++++------- config.profiles/harmattan/manpages/lupdate.1 | 44 ++++++++++++++++++++------- config.profiles/harmattan/manpages/moc.1 | 40 +++++++++++++++++++++--- config.profiles/harmattan/manpages/qmake.1 | 38 +++++++++++++++++++++++ config.profiles/harmattan/manpages/qtconfig.1 | 40 +++++++++++++++++++++++- config.profiles/harmattan/manpages/uic.1 | 40 +++++++++++++++++++++--- config.profiles/harmattan/readdir-hppa-test.c | 40 ++++++++++++++++++++++++ 8 files changed, 295 insertions(+), 32 deletions(-) diff --git a/config.profiles/harmattan/configure-pulse.sh b/config.profiles/harmattan/configure-pulse.sh index c683705..bc1615b 100755 --- a/config.profiles/harmattan/configure-pulse.sh +++ b/config.profiles/harmattan/configure-pulse.sh @@ -1,4 +1,45 @@ #/bin/sh +############################################################################# +## +## Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +## All rights reserved. +## Contact: Nokia Corporation (qt-info@nokia.com) +## +## This file is the build configuration utility of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:LGPL$ +## No Commercial Usage +## This file contains pre-release code and may not be distributed. +## You may use this file in accordance with the terms and conditions +## contained in the Technology Preview License Agreement accompanying +## this package. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 2.1 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 2.1 requirements +## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +## +## In addition, as a special exception, Nokia gives you certain additional +## rights. These rights are described in the Nokia Qt LGPL Exception +## version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +## +## If you have questions regarding the use of this file, please contact +## Nokia at qt-info@nokia.com. +## +## +## +## +## +## +## +## +## $QT_END_LICENSE$ +## +############################################################################# + # Fail on error set -e diff --git a/config.profiles/harmattan/manpages/lrelease.1 b/config.profiles/harmattan/manpages/lrelease.1 index 174d40c..79a10fe 100644 --- a/config.profiles/harmattan/manpages/lrelease.1 +++ b/config.profiles/harmattan/manpages/lrelease.1 @@ -1,19 +1,41 @@ -.TH lrelease 1 "18 October 2001" "Trolltech AS" \" -*- nroff -*- +.TH lrelease 1 "18 October 2001" "Nokia Corporation and/or its subsidiary(-ies)" \" -*- nroff -*- .\" -.\" Copyright 2001 Trolltech AS. All rights reserved. +.\" Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +.\" All rights reserved. +.\" Contact: Nokia Corporation (qt-info@nokia.com) .\" -.\" This file may be distributed and/or modified under the terms of the -.\" GNU General Public License version 2 as published by the Free Software -.\" Foundation and appearing in the file LICENSE.GPL included in the -.\" packaging of this file. +.\" This file is part of the QtGui module of the Qt Toolkit. .\" -.\" This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -.\" WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +.\" $QT_BEGIN_LICENSE:LGPL$ +.\" No Commercial Usage +.\" This file contains pre-release code and may not be distributed. +.\" You may use this file in accordance with the terms and conditions +.\" contained in the Technology Preview License Agreement accompanying +.\" this package. .\" -.\" See http://www.trolltech.com/gpl/ for GPL licensing information. +.\" GNU Lesser General Public License Usage +.\" Alternatively, this file may be used under the terms of the GNU Lesser +.\" General Public License version 2.1 as published by the Free Software +.\" Foundation and appearing in the file LICENSE.LGPL included in the +.\" packaging of this file. Please review the following information to +.\" ensure the GNU Lesser General Public License version 2.1 requirements +.\" will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. .\" -.\" Contact info@trolltech.com if any conditions of this licensing are -.\" not clear to you. +.\" In addition, as a special exception, Nokia gives you certain additional +.\" rights. These rights are described in the Nokia Qt LGPL Exception +.\" version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +.\" +.\" If you have questions regarding the use of this file, please contact +.\" Nokia at qt-info@nokia.com. +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" $QT_END_LICENSE$ .\" .SH NAME lrelease \- generate Qt message files from Qt Linguist translation files diff --git a/config.profiles/harmattan/manpages/lupdate.1 b/config.profiles/harmattan/manpages/lupdate.1 index 722657d..c0771df 100644 --- a/config.profiles/harmattan/manpages/lupdate.1 +++ b/config.profiles/harmattan/manpages/lupdate.1 @@ -1,19 +1,41 @@ -.TH lupdate 1 "18 October 2001" "Trolltech AS" \" -*- nroff -*- +.TH lupdate 1 "18 October 2001" "Nokia Corporation and/or its subsidiary(-ies)" \" -*- nroff -*- .\" -.\" Copyright 2001 Trolltech AS. All rights reserved. +.\" Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +.\" All rights reserved. +.\" Contact: Nokia Corporation (qt-info@nokia.com) .\" -.\" This file may be distributed and/or modified under the terms of the -.\" GNU General Public License version 2 as published by the Free Software -.\" Foundation and appearing in the file LICENSE.GPL included in the -.\" packaging of this file. +.\" This file is part of the QtGui module of the Qt Toolkit. .\" -.\" This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -.\" WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +.\" $QT_BEGIN_LICENSE:LGPL$ +.\" No Commercial Usage +.\" This file contains pre-release code and may not be distributed. +.\" You may use this file in accordance with the terms and conditions +.\" contained in the Technology Preview License Agreement accompanying +.\" this package. .\" -.\" See http://www.trolltech.com/gpl/ for GPL licensing information. +.\" GNU Lesser General Public License Usage +.\" Alternatively, this file may be used under the terms of the GNU Lesser +.\" General Public License version 2.1 as published by the Free Software +.\" Foundation and appearing in the file LICENSE.LGPL included in the +.\" packaging of this file. Please review the following information to +.\" ensure the GNU Lesser General Public License version 2.1 requirements +.\" will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. .\" -.\" Contact info@trolltech.com if any conditions of this licensing are -.\" not clear to you. +.\" In addition, as a special exception, Nokia gives you certain additional +.\" rights. These rights are described in the Nokia Qt LGPL Exception +.\" version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +.\" +.\" If you have questions regarding the use of this file, please contact +.\" Nokia at qt-info@nokia.com. +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" $QT_END_LICENSE$ .\" .SH NAME lupdate \- update Qt Linguist translation files diff --git a/config.profiles/harmattan/manpages/moc.1 b/config.profiles/harmattan/manpages/moc.1 index 131827a..a11e101 100644 --- a/config.profiles/harmattan/manpages/moc.1 +++ b/config.profiles/harmattan/manpages/moc.1 @@ -1,11 +1,41 @@ -.TH moc 1 "24 June 2001" "Trolltech AS" \" -*- nroff -*- +.TH moc 1 "24 June 2001" "Nokia Corporation and/or its subsidiary(-ies)" \" -*- nroff -*- .\" -.\" $Id: qt/moc.1 3.3.4 edited May 27 2003 $ +.\" Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +.\" All rights reserved. +.\" Contact: Nokia Corporation (qt-info@nokia.com) .\" -.\" Copyright 1992-2002 Trolltech AS. All rights reserved. +.\" This file is part of the QtGui module of the Qt Toolkit. .\" -.\" This file is part of Qt and may be distributed and used according to -.\" the terms and conditions described in the LICENSE file. +.\" $QT_BEGIN_LICENSE:LGPL$ +.\" No Commercial Usage +.\" This file contains pre-release code and may not be distributed. +.\" You may use this file in accordance with the terms and conditions +.\" contained in the Technology Preview License Agreement accompanying +.\" this package. +.\" +.\" GNU Lesser General Public License Usage +.\" Alternatively, this file may be used under the terms of the GNU Lesser +.\" General Public License version 2.1 as published by the Free Software +.\" Foundation and appearing in the file LICENSE.LGPL included in the +.\" packaging of this file. Please review the following information to +.\" ensure the GNU Lesser General Public License version 2.1 requirements +.\" will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +.\" +.\" In addition, as a special exception, Nokia gives you certain additional +.\" rights. These rights are described in the Nokia Qt LGPL Exception +.\" version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +.\" +.\" If you have questions regarding the use of this file, please contact +.\" Nokia at qt-info@nokia.com. +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" $QT_END_LICENSE$ .\" .nh .SH NAME diff --git a/config.profiles/harmattan/manpages/qmake.1 b/config.profiles/harmattan/manpages/qmake.1 index 62ab78a..b6e2c30 100644 --- a/config.profiles/harmattan/manpages/qmake.1 +++ b/config.profiles/harmattan/manpages/qmake.1 @@ -1,4 +1,42 @@ .TH QMAKE 1 "2005-07-23" +.\" +.\" Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +.\" All rights reserved. +.\" Contact: Nokia Corporation (qt-info@nokia.com) +.\" +.\" This file is part of the QtGui module of the Qt Toolkit. +.\" +.\" $QT_BEGIN_LICENSE:LGPL$ +.\" No Commercial Usage +.\" This file contains pre-release code and may not be distributed. +.\" You may use this file in accordance with the terms and conditions +.\" contained in the Technology Preview License Agreement accompanying +.\" this package. +.\" +.\" GNU Lesser General Public License Usage +.\" Alternatively, this file may be used under the terms of the GNU Lesser +.\" General Public License version 2.1 as published by the Free Software +.\" Foundation and appearing in the file LICENSE.LGPL included in the +.\" packaging of this file. Please review the following information to +.\" ensure the GNU Lesser General Public License version 2.1 requirements +.\" will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +.\" +.\" In addition, as a special exception, Nokia gives you certain additional +.\" rights. These rights are described in the Nokia Qt LGPL Exception +.\" version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +.\" +.\" If you have questions regarding the use of this file, please contact +.\" Nokia at qt-info@nokia.com. +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" $QT_END_LICENSE$ +.\" .SH NAME qmake \- cross-platform makefile generator for Qt diff --git a/config.profiles/harmattan/manpages/qtconfig.1 b/config.profiles/harmattan/manpages/qtconfig.1 index 08989fb..854c88f 100644 --- a/config.profiles/harmattan/manpages/qtconfig.1 +++ b/config.profiles/harmattan/manpages/qtconfig.1 @@ -1,4 +1,42 @@ -.TH "qtconfig" "1" "3.0.3" "Troll Tech AS, Norway." "" +.TH "qtconfig" "1" "3.0.3" "Nokia Corporation and/or its subsidiary(-ies)" "" +.\" +.\" Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +.\" All rights reserved. +.\" Contact: Nokia Corporation (qt-info@nokia.com) +.\" +.\" This file is part of the QtGui module of the Qt Toolkit. +.\" +.\" $QT_BEGIN_LICENSE:LGPL$ +.\" No Commercial Usage +.\" This file contains pre-release code and may not be distributed. +.\" You may use this file in accordance with the terms and conditions +.\" contained in the Technology Preview License Agreement accompanying +.\" this package. +.\" +.\" GNU Lesser General Public License Usage +.\" Alternatively, this file may be used under the terms of the GNU Lesser +.\" General Public License version 2.1 as published by the Free Software +.\" Foundation and appearing in the file LICENSE.LGPL included in the +.\" packaging of this file. Please review the following information to +.\" ensure the GNU Lesser General Public License version 2.1 requirements +.\" will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +.\" +.\" In addition, as a special exception, Nokia gives you certain additional +.\" rights. These rights are described in the Nokia Qt LGPL Exception +.\" version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +.\" +.\" If you have questions regarding the use of this file, please contact +.\" Nokia at qt-info@nokia.com. +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" $QT_END_LICENSE$ +.\" .SH "NAME" .LP qtconfig \- Configuration tool for Qt diff --git a/config.profiles/harmattan/manpages/uic.1 b/config.profiles/harmattan/manpages/uic.1 index 79d03b8..b781900 100644 --- a/config.profiles/harmattan/manpages/uic.1 +++ b/config.profiles/harmattan/manpages/uic.1 @@ -1,9 +1,41 @@ -.TH uic 1 "2 Aug 2001" "Trolltech AS" \" -*- nroff -*- +.TH uic 1 "2 Aug 2001" "Nokia Corporation and/or its subsidiary(-ies)" \" -*- nroff -*- .\" -.\" Copyright 2000 Trolltech AS. All rights reserved. +.\" Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +.\" All rights reserved. +.\" Contact: Nokia Corporation (qt-info@nokia.com) .\" -.\" This file is part of Qt and may be distributed and used according to -.\" the terms and conditions described in the LICENSE file. +.\" This file is part of the QtGui module of the Qt Toolkit. +.\" +.\" $QT_BEGIN_LICENSE:LGPL$ +.\" No Commercial Usage +.\" This file contains pre-release code and may not be distributed. +.\" You may use this file in accordance with the terms and conditions +.\" contained in the Technology Preview License Agreement accompanying +.\" this package. +.\" +.\" GNU Lesser General Public License Usage +.\" Alternatively, this file may be used under the terms of the GNU Lesser +.\" General Public License version 2.1 as published by the Free Software +.\" Foundation and appearing in the file LICENSE.LGPL included in the +.\" packaging of this file. Please review the following information to +.\" ensure the GNU Lesser General Public License version 2.1 requirements +.\" will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +.\" +.\" In addition, as a special exception, Nokia gives you certain additional +.\" rights. These rights are described in the Nokia Qt LGPL Exception +.\" version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +.\" +.\" If you have questions regarding the use of this file, please contact +.\" Nokia at qt-info@nokia.com. +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" +.\" $QT_END_LICENSE$ .\" .SH NAME uic \- Qt user interface compiler diff --git a/config.profiles/harmattan/readdir-hppa-test.c b/config.profiles/harmattan/readdir-hppa-test.c index eb893ba..1162840 100644 --- a/config.profiles/harmattan/readdir-hppa-test.c +++ b/config.profiles/harmattan/readdir-hppa-test.c @@ -1,3 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ #include #include #include -- cgit v0.12 From 99aa67f649c44dda8c0da639b4925dbb0e4c9b70 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Mon, 14 Mar 2011 13:53:44 +0200 Subject: Fix qgraphicstransform autotest for Symbian, where qreal is float. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-number: QTBUG-17907 Reviewed-by: Samuel Rødal --- tests/auto/qgraphicstransform/tst_qgraphicstransform.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/tests/auto/qgraphicstransform/tst_qgraphicstransform.cpp b/tests/auto/qgraphicstransform/tst_qgraphicstransform.cpp index 79f2213..9434a0b 100644 --- a/tests/auto/qgraphicstransform/tst_qgraphicstransform.cpp +++ b/tests/auto/qgraphicstransform/tst_qgraphicstransform.cpp @@ -163,10 +163,11 @@ static inline bool fuzzyCompare(qreal p1, qreal p2) { // increase delta on small machines using float instead of double if (sizeof(qreal) == sizeof(float)) - return (qAbs(p1 - p2) <= 0.00002f * qMin(qAbs(p1), qAbs(p2))); + return (qAbs(p1 - p2) <= 0.00003f * qMin(qAbs(p1), qAbs(p2))); else return (qAbs(p1 - p2) <= 0.00001f * qMin(qAbs(p1), qAbs(p2))); } + static bool fuzzyCompare(const QTransform& t1, const QTransform& t2) { return fuzzyCompare(t1.m11(), t2.m11()) && @@ -180,6 +181,15 @@ static bool fuzzyCompare(const QTransform& t1, const QTransform& t2) fuzzyCompare(t1.m33(), t2.m33()); } +static inline bool fuzzyCompare(const QMatrix4x4& m1, const QMatrix4x4& m2) +{ + bool ok = true; + for (int y = 0; y < 4; ++y) + for (int x = 0; x < 4; ++x) + ok &= fuzzyCompare(m1(y, x), m2(y, x)); + return ok; +} + void tst_QGraphicsTransform::rotation() { QGraphicsRotation rotation; @@ -267,7 +277,7 @@ void tst_QGraphicsTransform::rotation3d() // because the deg2rad value in QTransform is not accurate // enough to match what QMatrix4x4 is doing. } else { - QVERIFY(qFuzzyCompare(t, r)); + QVERIFY(fuzzyCompare(t, r)); } //now let's check that a null vector will not change the transform -- cgit v0.12 From ad5ef5c565b0399c65827d67be8ff00fa8db1a68 Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Mon, 14 Mar 2011 14:23:31 +0200 Subject: QS60Style slows down layout switch by updating widgets unnecessarily Remove refreshUi() method frmo QS60Style. It might have been necessary two years ago, when we didn't have proper polishing of QWidgets (when style changed), but it is no longer needed. It just slows down orientation switch. Task-number: QTBUG-17840 Reviewed-by: Tomi Vihria --- src/gui/styles/qs60style.cpp | 19 ------------------- src/gui/styles/qs60style_p.h | 2 -- src/gui/styles/qs60style_s60.cpp | 1 - 3 files changed, 22 deletions(-) diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 87d990e..15cb5c6 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -630,25 +630,6 @@ QPixmap QS60StylePrivate::cachedFrame(SkinFrameElements frame, const QSize &size return result; } -void QS60StylePrivate::refreshUI() -{ - QList widgets = QApplication::allWidgets(); - - for (int i = 0; i < widgets.size(); ++i) { - QWidget *widget = widgets.at(i); - if (widget == 0) - continue; - - if (widget->style()) { - widget->style()->polish(widget); - QEvent event(QEvent::StyleChange); - qApp->sendEvent(widget, &event); - } - widget->update(); - widget->updateGeometry(); - } -} - void QS60StylePrivate::setFont(QWidget *widget) const { QS60StyleEnums::FontCategories fontCategory = QS60StyleEnums::FC_Undefined; diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h index 242c451..c64cbb1 100644 --- a/src/gui/styles/qs60style_p.h +++ b/src/gui/styles/qs60style_p.h @@ -592,8 +592,6 @@ private: static QPixmap cachedFrame(SkinFrameElements frame, const QSize &size, SkinElementFlags flags = KDefaultSkinElementFlags); - static void refreshUI(); - // set S60 font for widget void setFont(QWidget *widget) const; void setThemePalette(QWidget *widget) const; diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index 600c631..b4785dc 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -1429,7 +1429,6 @@ void QS60StylePrivate::handleDynamicLayoutVariantSwitch() { clearCaches(QS60StylePrivate::CC_LayoutChange); setActiveLayout(); - refreshUI(); foreach (QWidget *widget, QApplication::allWidgets()) widget->ensurePolished(); } -- cgit v0.12 From 5f2eccbc8a392784868dd9919442642b4a9f9ef8 Mon Sep 17 00:00:00 2001 From: Martin Petersson Date: Mon, 14 Mar 2011 14:25:33 +0100 Subject: SSL: Fix certification loading on Mac OS X 10.5 Do not add the expired certificates on Mac OS X 10.5. Task-number: QTBUG-14520 Reviewed-by: Markus Goetz --- src/network/ssl/qsslsocket_openssl.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index 84e14ff..0866534 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -312,9 +312,18 @@ init_context: q_X509_STORE_add_cert(ctx->cert_store, (X509 *)caCertificate.handle()); } } + + bool addExpiredCerts = true; +#if defined(Q_OS_MAC) && (MAC_OS_X_VERSION_MAX_ALLOWED == MAC_OS_X_VERSION_10_5) + //On Leopard SSL does not work if we add the expired certificates. + if (QSysInfo::MacintoshVersion == QSysInfo::MV_10_5) + addExpiredCerts = false; +#endif // now add the expired certs - foreach (const QSslCertificate &caCertificate, expiredCerts) { - q_X509_STORE_add_cert(ctx->cert_store, (X509 *)caCertificate.handle()); + if (addExpiredCerts) { + foreach (const QSslCertificate &caCertificate, expiredCerts) { + q_X509_STORE_add_cert(ctx->cert_store, (X509 *)caCertificate.handle()); + } } // Register a custom callback to get all verification errors. -- cgit v0.12 From c30714122c58a3dc6fd8401427da60c4afc4127b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Mon, 14 Mar 2011 14:35:22 +0100 Subject: Prevented infinite recursion in QPainterPath::contains(). Limit the amount of recursions in qt_painterpath_isect_curve to prevent a crash. Task-number: QTBUG-16422 Reviewed-by: Kim --- src/gui/painting/qpainterpath.cpp | 8 ++++---- tests/auto/qpainterpath/tst_qpainterpath.cpp | 5 +++++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/gui/painting/qpainterpath.cpp b/src/gui/painting/qpainterpath.cpp index 7ecf10a..88eef99 100644 --- a/src/gui/painting/qpainterpath.cpp +++ b/src/gui/painting/qpainterpath.cpp @@ -1690,7 +1690,7 @@ static void qt_painterpath_isect_line(const QPointF &p1, } static void qt_painterpath_isect_curve(const QBezier &bezier, const QPointF &pt, - int *winding) + int *winding, int depth = 0) { qreal y = pt.y(); qreal x = pt.x(); @@ -1705,7 +1705,7 @@ static void qt_painterpath_isect_curve(const QBezier &bezier, const QPointF &pt, // hit lower limit... This is a rough threshold, but its a // tradeoff between speed and precision. const qreal lower_bound = qreal(.001); - if (bounds.width() < lower_bound && bounds.height() < lower_bound) { + if (depth == 32 || (bounds.width() < lower_bound && bounds.height() < lower_bound)) { // We make the assumption here that the curve starts to // approximate a line after while (i.e. that it doesn't // change direction drastically during its slope) @@ -1718,8 +1718,8 @@ static void qt_painterpath_isect_curve(const QBezier &bezier, const QPointF &pt, // split curve and try again... QBezier first_half, second_half; bezier.split(&first_half, &second_half); - qt_painterpath_isect_curve(first_half, pt, winding); - qt_painterpath_isect_curve(second_half, pt, winding); + qt_painterpath_isect_curve(first_half, pt, winding, depth + 1); + qt_painterpath_isect_curve(second_half, pt, winding, depth + 1); } } diff --git a/tests/auto/qpainterpath/tst_qpainterpath.cpp b/tests/auto/qpainterpath/tst_qpainterpath.cpp index 00f9b91..4ade9ad 100644 --- a/tests/auto/qpainterpath/tst_qpainterpath.cpp +++ b/tests/auto/qpainterpath/tst_qpainterpath.cpp @@ -290,6 +290,11 @@ void tst_QPainterPath::contains_QPointF_data() QTest::newRow("horizontal cubic, out left") << path << QPointF(0, 100) << false; QTest::newRow("horizontal cubic, out right") << path << QPointF(300, 100) < Date: Mon, 14 Mar 2011 17:28:15 +0100 Subject: QNAM HTTP: error() in case connection is closed unexpectedly Task-number: QT-4658 Task-number: QT-3494 Reviewed-by: Peter Hartmann --- .../access/qhttpnetworkconnectionchannel.cpp | 15 +++++++++++++- tests/auto/qnetworkreply/tst_qnetworkreply.cpp | 24 +++++++++++++++------- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index 82b5ce3..700b455 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -963,8 +963,20 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket } else { errorCode = QNetworkReply::RemoteHostClosedError; } + } else if (state == QHttpNetworkConnectionChannel::ReadingState) { + if (!reply->d_func()->expectContent()) { + // No content expected, this is a valid way to have the connection closed by the server + return; + } + if (reply->contentLength() == -1 && !reply->d_func()->isChunked()) { + // There was no content-length header and it's not chunked encoding, + // so this is a valid way to have the connection closed by the server + return; + } + // ok, we got a disconnect even though we did not expect it + errorCode = QNetworkReply::RemoteHostClosedError; } else { - return; + errorCode = QNetworkReply::RemoteHostClosedError; } break; case QAbstractSocket::SocketTimeoutError: @@ -992,6 +1004,7 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket if (reply) { reply->d_func()->errorString = errorString; emit reply->finishedWithError(errorCode, errorString); + reply = 0; } // send the next request QMetaObject::invokeMethod(that, "_q_startNextRequest", Qt::QueuedConnection); diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp index 8274140..39bb0fc 100644 --- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp @@ -951,6 +951,7 @@ tst_QNetworkReply::tst_QNetworkReply() qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType >(); + qRegisterMetaType(); Q_SET_DEFAULT_IAP @@ -2572,6 +2573,9 @@ void tst_QNetworkReply::ioGetFromHttpBrokenServer_data() QTest::newRow("justHalfStatus+disconnect") << QByteArray("HTTP/1.1") << true; QTest::newRow("justStatus+disconnect") << QByteArray("HTTP/1.1 200 OK\r\n") << true; QTest::newRow("justStatusAndHalfHeaders+disconnect") << QByteArray("HTTP/1.1 200 OK\r\nContent-L") << true; + + QTest::newRow("halfContent+disconnect") << QByteArray("HTTP/1.1 200 OK\r\nContent-Length: 4\r\n\r\nAB") << true; + } void tst_QNetworkReply::ioGetFromHttpBrokenServer() @@ -2583,29 +2587,35 @@ void tst_QNetworkReply::ioGetFromHttpBrokenServer() QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort()))); QNetworkReplyPtr reply = manager.get(request); + QSignalSpy spy(reply, SIGNAL(error(QNetworkReply::NetworkError))); + connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); QTestEventLoop::instance().enterLoop(10); QVERIFY(!QTestEventLoop::instance().timeout()); QCOMPARE(reply->url(), request.url()); + QCOMPARE(spy.count(), 1); QVERIFY(reply->error() != QNetworkReply::NoError); } void tst_QNetworkReply::ioGetFromHttpStatus100_data() { QTest::addColumn("dataToSend"); - QTest::newRow("normal") << QByteArray("HTTP/1.1 100 Continue\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"); - QTest::newRow("minimal") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"); - QTest::newRow("minimal2") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\r\n\r\n"); - QTest::newRow("minimal3") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\n\n"); - QTest::newRow("with_headers") << QByteArray("HTTP/1.1 100 Continue\r\nBla: x\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"); - QTest::newRow("with_headers2") << QByteArray("HTTP/1.1 100 Continue\nBla: x\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n"); + QTest::addColumn("statusCode"); + QTest::newRow("normal") << QByteArray("HTTP/1.1 100 Continue\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200; + QTest::newRow("minimal") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200; + QTest::newRow("minimal2") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\r\n\r\n") << 200; + QTest::newRow("minimal3") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\n\n") << 200; + QTest::newRow("minimal+404") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 204 No Content\r\n\r\n") << 204; + QTest::newRow("with_headers") << QByteArray("HTTP/1.1 100 Continue\r\nBla: x\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200; + QTest::newRow("with_headers2") << QByteArray("HTTP/1.1 100 Continue\nBla: x\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200; } void tst_QNetworkReply::ioGetFromHttpStatus100() { QFETCH(QByteArray, dataToSend); + QFETCH(int, statusCode); MiniHttpServer server(dataToSend); server.doClose = true; @@ -2618,7 +2628,7 @@ void tst_QNetworkReply::ioGetFromHttpStatus100() QCOMPARE(reply->url(), request.url()); QCOMPARE(reply->error(), QNetworkReply::NoError); - QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); + QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), statusCode); QVERIFY(reply->rawHeader("bla").isNull()); } -- cgit v0.12 From 774cb9eca9ea243436dbf61cdb7081fc270cdec9 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Tue, 15 Mar 2011 10:25:54 +1000 Subject: Remove bindings before assigning constants in VME Change-Id: I4c246cbcf8d0168cb4af028d6d04088fe20cdbba Task-number: QTBUG-17276 --- src/declarative/qml/qdeclarativevme.cpp | 63 ++++++++++++++++++++++ .../data/InlineAssignmentsOverrideBindingsType.qml | 7 +++ .../InlineAssignmentsOverrideBindingsType2.qml | 5 ++ .../data/inlineAssignmentsOverrideBindings.qml | 6 +++ .../tst_qdeclarativelanguage.cpp | 12 ++++- 5 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/InlineAssignmentsOverrideBindingsType.qml create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/InlineAssignmentsOverrideBindingsType2.qml create mode 100644 tests/auto/declarative/qdeclarativelanguage/data/inlineAssignmentsOverrideBindings.qml diff --git a/src/declarative/qml/qdeclarativevme.cpp b/src/declarative/qml/qdeclarativevme.cpp index 2d551f2..781e1b8 100644 --- a/src/declarative/qml/qdeclarativevme.cpp +++ b/src/declarative/qml/qdeclarativevme.cpp @@ -127,6 +127,22 @@ void QDeclarativeVME::runDeferred(QObject *object) run(stack, ctxt, comp, start, count, QBitField()); } +inline bool fastHasBinding(QObject *o, int index) +{ + QDeclarativeData *ddata = static_cast(QObjectPrivate::get(o)->declarativeData); + + return ddata && (ddata->bindingBitsSize > index) && + (ddata->bindingBits[index / 32] & (1 << (index % 32))); +} + +static void removeBindingOnProperty(QObject *o, int index) +{ + QDeclarativeAbstractBinding *binding = QDeclarativePropertyPrivate::setBinding(o, index, -1, 0); + if (binding) binding->destroy(); +} + +#define CLEAN_PROPERTY(o, index) if (fastHasBinding(o, index)) removeBindingOnProperty(o, index) + QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, QDeclarativeContextData *ctxt, QDeclarativeCompiledData *comp, @@ -336,6 +352,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::StoreVariant: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeString.propertyIndex); + // XXX - can be more efficient QVariant v = QDeclarativeStringConverters::variantFromString(primitives.at(instr.storeString.value)); void *a[] = { &v, 0, &status, &flags }; @@ -347,6 +365,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::StoreVariantInteger: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeString.propertyIndex); + QVariant v(instr.storeInteger.value); void *a[] = { &v, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, @@ -357,6 +377,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::StoreVariantDouble: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeString.propertyIndex); + QVariant v(instr.storeDouble.value); void *a[] = { &v, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, @@ -367,6 +389,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::StoreVariantBool: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeString.propertyIndex); + QVariant v(instr.storeBool.value); void *a[] = { &v, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, @@ -377,6 +401,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::StoreString: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeString.propertyIndex); + void *a[] = { (void *)&primitives.at(instr.storeString.value), 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, instr.storeString.propertyIndex, a); @@ -386,6 +412,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::StoreUrl: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeUrl.propertyIndex); + void *a[] = { (void *)&urls.at(instr.storeUrl.value), 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, instr.storeUrl.propertyIndex, a); @@ -395,6 +423,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::StoreFloat: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeFloat.propertyIndex); + float f = instr.storeFloat.value; void *a[] = { &f, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, @@ -405,6 +435,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::StoreDouble: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeDouble.propertyIndex); + double d = instr.storeDouble.value; void *a[] = { &d, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, @@ -415,6 +447,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::StoreBool: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeBool.propertyIndex); + void *a[] = { (void *)&instr.storeBool.value, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, instr.storeBool.propertyIndex, a); @@ -424,6 +458,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::StoreInteger: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeInteger.propertyIndex); + void *a[] = { (void *)&instr.storeInteger.value, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, instr.storeInteger.propertyIndex, a); @@ -433,6 +469,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::StoreColor: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeColor.propertyIndex); + QColor c = QColor::fromRgba(instr.storeColor.value); void *a[] = { &c, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, @@ -443,6 +481,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::StoreDate: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeDate.propertyIndex); + QDate d = QDate::fromJulianDay(instr.storeDate.value); void *a[] = { &d, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, @@ -453,6 +493,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::StoreTime: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeTime.propertyIndex); + QTime t; t.setHMS(intData.at(instr.storeTime.valueIndex), intData.at(instr.storeTime.valueIndex+1), @@ -467,6 +509,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::StoreDateTime: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeDateTime.propertyIndex); + QTime t; t.setHMS(intData.at(instr.storeDateTime.valueIndex+1), intData.at(instr.storeDateTime.valueIndex+2), @@ -482,6 +526,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::StorePoint: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeRealPair.propertyIndex); + QPoint p = QPointF(floatData.at(instr.storeRealPair.valueIndex), floatData.at(instr.storeRealPair.valueIndex+1)).toPoint(); void *a[] = { &p, 0, &status, &flags }; @@ -493,6 +539,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::StorePointF: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeRealPair.propertyIndex); + QPointF p(floatData.at(instr.storeRealPair.valueIndex), floatData.at(instr.storeRealPair.valueIndex+1)); void *a[] = { &p, 0, &status, &flags }; @@ -504,6 +552,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::StoreSize: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeRealPair.propertyIndex); + QSize p = QSizeF(floatData.at(instr.storeRealPair.valueIndex), floatData.at(instr.storeRealPair.valueIndex+1)).toSize(); void *a[] = { &p, 0, &status, &flags }; @@ -515,6 +565,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::StoreSizeF: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeRealPair.propertyIndex); + QSizeF s(floatData.at(instr.storeRealPair.valueIndex), floatData.at(instr.storeRealPair.valueIndex+1)); void *a[] = { &s, 0, &status, &flags }; @@ -526,6 +578,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::StoreRect: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeRect.propertyIndex); + QRect r = QRectF(floatData.at(instr.storeRect.valueIndex), floatData.at(instr.storeRect.valueIndex+1), floatData.at(instr.storeRect.valueIndex+2), @@ -539,6 +593,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::StoreRectF: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeRect.propertyIndex); + QRectF r(floatData.at(instr.storeRect.valueIndex), floatData.at(instr.storeRect.valueIndex+1), floatData.at(instr.storeRect.valueIndex+2), @@ -552,6 +608,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::StoreVector3D: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeVector3D.propertyIndex); + QVector3D p(floatData.at(instr.storeVector3D.valueIndex), floatData.at(instr.storeVector3D.valueIndex+1), floatData.at(instr.storeVector3D.valueIndex+2)); @@ -565,6 +623,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, { QObject *assignObj = stack.pop(); QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeObject.propertyIndex); void *a[] = { (void *)&assignObj, 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, @@ -576,6 +635,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, case QDeclarativeInstruction::AssignCustomType: { QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.assignCustomType.propertyIndex); + QDeclarativeCompiledData::CustomTypeData data = customTypeData.at(instr.assignCustomType.valueIndex); const QString &primitive = primitives.at(data.index); QDeclarativeMetaType::StringConverter converter = @@ -780,6 +841,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, { QObject *assign = stack.pop(); QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeObject.propertyIndex); QVariant v = QVariant::fromValue(assign); void *a[] = { &v, 0, &status, &flags }; @@ -792,6 +854,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack &stack, { QObject *assign = stack.pop(); QObject *target = stack.top(); + CLEAN_PROPERTY(target, instr.storeObject.propertyIndex); int coreIdx = instr.storeObject.propertyIndex; QMetaProperty prop = target->metaObject()->property(coreIdx); diff --git a/tests/auto/declarative/qdeclarativelanguage/data/InlineAssignmentsOverrideBindingsType.qml b/tests/auto/declarative/qdeclarativelanguage/data/InlineAssignmentsOverrideBindingsType.qml new file mode 100644 index 0000000..4526cf0 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/InlineAssignmentsOverrideBindingsType.qml @@ -0,0 +1,7 @@ +import QtQuick 1.0 + +QtObject { + property InlineAssignmentsOverrideBindingsType2 nested: InlineAssignmentsOverrideBindingsType2 { + value: 19 * 33 + } +} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/InlineAssignmentsOverrideBindingsType2.qml b/tests/auto/declarative/qdeclarativelanguage/data/InlineAssignmentsOverrideBindingsType2.qml new file mode 100644 index 0000000..4127ca4 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/InlineAssignmentsOverrideBindingsType2.qml @@ -0,0 +1,5 @@ +import QtQuick 1.0 + +QtObject { + property int value +} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/inlineAssignmentsOverrideBindings.qml b/tests/auto/declarative/qdeclarativelanguage/data/inlineAssignmentsOverrideBindings.qml new file mode 100644 index 0000000..8f3c5ce --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/inlineAssignmentsOverrideBindings.qml @@ -0,0 +1,6 @@ +import QtQuick 1.0 + +InlineAssignmentsOverrideBindingsType { + property int test: nested.value + nested.value: 11 +} diff --git a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp index f3f41a9..5a2591f 100644 --- a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp +++ b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp @@ -134,6 +134,7 @@ private slots: void dontDoubleCallClassBegin(); void reservedWords_data(); void reservedWords(); + void inlineAssignmentsOverrideBindings(); void basicRemote_data(); void basicRemote(); @@ -1413,9 +1414,18 @@ void tst_qdeclarativelanguage::testType(const QString& qml, const QString& type, } } +// QTBUG-17276 +void tst_qdeclarativelanguage::inlineAssignmentsOverrideBindings() +{ + QDeclarativeComponent component(&engine, TEST_FILE("inlineAssignmentsOverrideBindings.qml")); -// Import tests (QT-558) + QObject *o = component.create(); + QVERIFY(o != 0); + QCOMPARE(o->property("test").toInt(), 11); + delete o; +} +// Import tests (QT-558) void tst_qdeclarativelanguage::importsBuiltin_data() { // QT-610 -- cgit v0.12 From ce38c6e3a9b7eb336cbd9cd1e9520a5000c8f8ac Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Tue, 15 Mar 2011 13:53:34 +1000 Subject: Regression: currentIndex was not set correctly after model cleared. Change b3080d78f2ff2d98410249e09d5d7d6e20fd155c stopped the currentIndex from being updated when a new item is added to an empty view. Change-Id: I77a0789fcf3693034a2d7aca173fec669b913b18 Task-number: QTBUG-18123 Reviewed-by: Bea Lam --- .../graphicsitems/qdeclarativegridview.cpp | 6 ++-- .../graphicsitems/qdeclarativelistview.cpp | 6 ++-- .../tst_qdeclarativegridview.cpp | 39 ++++++++++++++++++++++ .../tst_qdeclarativelistview.cpp | 7 ++++ 4 files changed, 53 insertions(+), 5 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp index 5c2f781..c0cbed0 100644 --- a/src/declarative/graphicsitems/qdeclarativegridview.cpp +++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp @@ -2834,11 +2834,9 @@ void QDeclarativeGridView::itemsInserted(int modelIndex, int count) if (d->currentItem) { d->currentItem->index = d->currentIndex; d->currentItem->setPosition(d->colPosAt(d->currentIndex), d->rowPosAt(d->currentIndex)); - } else if (!d->currentIndex || (d->currentIndex < 0 && !d->currentIndexCleared)) { - d->updateCurrent(0); } emit currentIndexChanged(); - } else if (d->itemCount == 0 && d->currentIndex == -1) { + } else if (d->itemCount == 0 && (!d->currentIndex || (d->currentIndex < 0 && !d->currentIndexCleared))) { setCurrentIndex(0); } @@ -2906,6 +2904,8 @@ void QDeclarativeGridView::itemsRemoved(int modelIndex, int count) d->currentIndex = -1; if (d->itemCount) d->updateCurrent(qMin(modelIndex, d->itemCount-1)); + else + emit currentIndexChanged(); } // update visibleIndex diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index 2c23a1b..6ae1ddc 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -3272,10 +3272,10 @@ void QDeclarativeListView::itemsInserted(int modelIndex, int count) if (d->currentItem) { d->currentItem->index = d->currentIndex; d->currentItem->setPosition(d->currentItem->position() + diff); - } else if (!d->currentIndex || (d->currentIndex < 0 && !d->currentIndexCleared)) { - d->updateCurrent(0); } emit currentIndexChanged(); + } else if (!d->itemCount && (!d->currentIndex || (d->currentIndex < 0 && !d->currentIndexCleared))) { + d->updateCurrent(0); } // Update the indexes of the following visible items. for (; index < d->visibleItems.count(); ++index) { @@ -3356,6 +3356,8 @@ void QDeclarativeListView::itemsRemoved(int modelIndex, int count) d->currentIndex = -1; if (d->itemCount) d->updateCurrent(qMin(modelIndex, d->itemCount-1)); + else + emit currentIndexChanged(); } // update visibleIndex diff --git a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp index 5ced02b..c183934 100644 --- a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp +++ b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp @@ -69,6 +69,7 @@ private slots: void changed(); void inserted(); void removed(); + void clear(); void moved(); void changeFlow(); void currentIndex(); @@ -501,6 +502,44 @@ void tst_QDeclarativeGridView::removed() delete canvas; } +void tst_QDeclarativeGridView::clear() +{ + QDeclarativeView *canvas = createView(); + + TestModel model; + for (int i = 0; i < 30; i++) + model.addItem("Item" + QString::number(i), ""); + + QDeclarativeContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("testModel", &model); + ctxt->setContextProperty("testRightToLeft", QVariant(false)); + ctxt->setContextProperty("testTopToBottom", QVariant(false)); + + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/gridview1.qml")); + qApp->processEvents(); + + QDeclarativeGridView *gridview = findItem(canvas->rootObject(), "grid"); + QVERIFY(gridview != 0); + + QDeclarativeItem *contentItem = gridview->contentItem(); + QVERIFY(contentItem != 0); + + model.clear(); + + QVERIFY(gridview->count() == 0); + QVERIFY(gridview->currentItem() == 0); + QVERIFY(gridview->contentY() == 0); + QVERIFY(gridview->currentIndex() == -1); + + // confirm sanity when adding an item to cleared list + model.addItem("New", "1"); + QVERIFY(gridview->count() == 1); + QVERIFY(gridview->currentItem() != 0); + QVERIFY(gridview->currentIndex() == 0); + + delete canvas; +} + void tst_QDeclarativeGridView::moved() { QDeclarativeView *canvas = createView(); diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp index c87318e..2267a89 100644 --- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -741,6 +741,13 @@ void tst_QDeclarativeListView::clear() QTRY_VERIFY(listview->count() == 0); QTRY_VERIFY(listview->currentItem() == 0); QTRY_VERIFY(listview->contentY() == 0); + QVERIFY(listview->currentIndex() == -1); + + // confirm sanity when adding an item to cleared list + model.addItem("New", "1"); + QTRY_VERIFY(listview->count() == 1); + QVERIFY(listview->currentItem() != 0); + QVERIFY(listview->currentIndex() == 0); delete canvas; } -- cgit v0.12 From 77342ad3e7beecb75c136ee26c0c77cd1a41b415 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Tue, 15 Mar 2011 14:26:20 +1000 Subject: Border still drawn on Rectangle elements when border.width == 0 The _valid flag did not consider both color alpha and line width in both setters. Change-Id: Iba544d65a0a40e36f1e09091e007418c9eefa0cd Task-number: QTBUG-18102 Reviewed-by: Alan Alpert --- src/declarative/graphicsitems/qdeclarativerectangle.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativerectangle.cpp b/src/declarative/graphicsitems/qdeclarativerectangle.cpp index d962919..8f59073 100644 --- a/src/declarative/graphicsitems/qdeclarativerectangle.cpp +++ b/src/declarative/graphicsitems/qdeclarativerectangle.cpp @@ -70,7 +70,7 @@ QT_BEGIN_NAMESPACE void QDeclarativePen::setColor(const QColor &c) { _color = c; - _valid = _color.alpha() ? true : false; + _valid = (_color.alpha() && _width >= 1) ? true : false; emit penChanged(); } @@ -80,7 +80,7 @@ void QDeclarativePen::setWidth(int w) return; _width = w; - _valid = (_width < 1) ? false : true; + _valid = (_color.alpha() && _width >= 1) ? true : false; emit penChanged(); } -- cgit v0.12 From e546b6b38f95e6496fd53efba41442cde879819a Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Tue, 15 Mar 2011 08:22:13 +0200 Subject: Prevent null pointer crash when closing splitview Prevents crash when focus item is not set and splitview is closed. This is partial fix to QTBUG-17045. Task-number: QTBUG-17045 Reviewed-by: Guoqing Zhang --- src/gui/inputmethod/qcoefepinputcontext_s60.cpp | 3 ++- src/gui/widgets/qcombobox.cpp | 28 +++++++++++-------------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index 73aa982..9d8dd41 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -394,7 +394,8 @@ void QCoeFepInputContext::resetSplitViewWidget(bool keepInputWidget) if (!alwaysResize) { if (gv->scene()) { - disconnect(gv->scene()->focusItem()->toGraphicsObject(), SIGNAL(cursorPositionChanged()), this, SLOT(translateInputWidget())); + if (gv->scene()->focusItem()) + disconnect(gv->scene()->focusItem()->toGraphicsObject(), SIGNAL(cursorPositionChanged()), this, SLOT(translateInputWidget())); QGraphicsItem *rootItem; foreach (QGraphicsItem *item, gv->scene()->items()) { if (!item->parentItem()) { diff --git a/src/gui/widgets/qcombobox.cpp b/src/gui/widgets/qcombobox.cpp index dbbf49a..af2440a 100644 --- a/src/gui/widgets/qcombobox.cpp +++ b/src/gui/widgets/qcombobox.cpp @@ -2348,7 +2348,7 @@ void QComboBox::showPopup() initStyleOption(&opt); QRect listRect(style->subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxListBoxPopup, this)); - QRect screen = d->popupGeometry(QApplication::desktop()->screenNumber(this)); + QRect screen = qt_TRect2QRect(static_cast(S60->appUi())->ClientRect()); QPoint below = mapToGlobal(listRect.bottomLeft()); int belowHeight = screen.bottom() - below.y(); QPoint above = mapToGlobal(listRect.topLeft()); @@ -2476,18 +2476,10 @@ void QComboBox::showPopup() listRect.setWidth(listRect.height()); //by default popup is centered on screen in landscape listRect.moveCenter(screen.center()); - if (staConTopRect.IsEmpty()) { - TRect cbaRect = TRect(); - AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EControlPane, cbaRect); - AknLayoutUtils::TAknCbaLocation cbaLocation = AknLayoutUtils::CbaLocation(); - switch (cbaLocation) { - case AknLayoutUtils::EAknCbaLocationRight: - listRect.setRight(screen.right()); - break; - case AknLayoutUtils::EAknCbaLocationLeft: - listRect.setLeft(screen.left()); - break; - } + if (staConTopRect.IsEmpty() && AknLayoutUtils::CbaLocation() != AknLayoutUtils::EAknCbaLocationBottom) { + // landscape without stacon, menu should be at the right + (opt.direction == Qt::LeftToRight) ? listRect.setRight(screen.right()) : + listRect.setLeft(screen.left()); } } #endif @@ -2706,7 +2698,7 @@ void QComboBox::changeEvent(QEvent *e) initStyleOption(&opt); if (style()->styleHint(QStyle::SH_ComboBox_Popup, &opt, this)) { - const QRect screen = d->popupGeometry(QApplication::desktop()->screenNumber(this)); + QRect screen = qt_TRect2QRect(static_cast(S60->appUi())->ClientRect()); QRect listRect(style()->subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxListBoxPopup, this)); @@ -2721,13 +2713,13 @@ void QComboBox::changeEvent(QEvent *e) listRect.setWidth(listRect.height()); //by default popup is centered on screen in landscape listRect.moveCenter(screen.center()); - if (staConTopRect.IsEmpty()) { + if (staConTopRect.IsEmpty() && AknLayoutUtils::CbaLocation() != AknLayoutUtils::EAknCbaLocationBottom) { // landscape without stacon, menu should be at the right (opt.direction == Qt::LeftToRight) ? listRect.setRight(screen.right()) : listRect.setLeft(screen.left()); } - d->container->setGeometry(listRect); } + d->container->setGeometry(listRect); } } #endif @@ -2760,6 +2752,10 @@ void QComboBox::changeEvent(QEvent *e) void QComboBox::resizeEvent(QResizeEvent *) { Q_D(QComboBox); +#ifdef Q_WS_S60 + if (d->viewContainer() && d->viewContainer()->isVisible()) + showPopup(); +#endif d->updateLineEditGeometry(); } -- cgit v0.12 From d919343e91fd5e6771f11cb59d4730ec83ed7381 Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Tue, 15 Mar 2011 08:32:22 +0200 Subject: Remove changes from fix to QTBUG-17045 that were not related to the fix There were changes included in the fix for QTBUG-17045 that were not supposed to be part of that fix. These changes to qcombobox.cpp are now removed. Task-number: QTBUG-17045 Reviewed-by: TrustMe --- src/gui/widgets/qcombobox.cpp | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/gui/widgets/qcombobox.cpp b/src/gui/widgets/qcombobox.cpp index af2440a..dbbf49a 100644 --- a/src/gui/widgets/qcombobox.cpp +++ b/src/gui/widgets/qcombobox.cpp @@ -2348,7 +2348,7 @@ void QComboBox::showPopup() initStyleOption(&opt); QRect listRect(style->subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxListBoxPopup, this)); - QRect screen = qt_TRect2QRect(static_cast(S60->appUi())->ClientRect()); + QRect screen = d->popupGeometry(QApplication::desktop()->screenNumber(this)); QPoint below = mapToGlobal(listRect.bottomLeft()); int belowHeight = screen.bottom() - below.y(); QPoint above = mapToGlobal(listRect.topLeft()); @@ -2476,10 +2476,18 @@ void QComboBox::showPopup() listRect.setWidth(listRect.height()); //by default popup is centered on screen in landscape listRect.moveCenter(screen.center()); - if (staConTopRect.IsEmpty() && AknLayoutUtils::CbaLocation() != AknLayoutUtils::EAknCbaLocationBottom) { - // landscape without stacon, menu should be at the right - (opt.direction == Qt::LeftToRight) ? listRect.setRight(screen.right()) : - listRect.setLeft(screen.left()); + if (staConTopRect.IsEmpty()) { + TRect cbaRect = TRect(); + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EControlPane, cbaRect); + AknLayoutUtils::TAknCbaLocation cbaLocation = AknLayoutUtils::CbaLocation(); + switch (cbaLocation) { + case AknLayoutUtils::EAknCbaLocationRight: + listRect.setRight(screen.right()); + break; + case AknLayoutUtils::EAknCbaLocationLeft: + listRect.setLeft(screen.left()); + break; + } } } #endif @@ -2698,7 +2706,7 @@ void QComboBox::changeEvent(QEvent *e) initStyleOption(&opt); if (style()->styleHint(QStyle::SH_ComboBox_Popup, &opt, this)) { - QRect screen = qt_TRect2QRect(static_cast(S60->appUi())->ClientRect()); + const QRect screen = d->popupGeometry(QApplication::desktop()->screenNumber(this)); QRect listRect(style()->subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxListBoxPopup, this)); @@ -2713,13 +2721,13 @@ void QComboBox::changeEvent(QEvent *e) listRect.setWidth(listRect.height()); //by default popup is centered on screen in landscape listRect.moveCenter(screen.center()); - if (staConTopRect.IsEmpty() && AknLayoutUtils::CbaLocation() != AknLayoutUtils::EAknCbaLocationBottom) { + if (staConTopRect.IsEmpty()) { // landscape without stacon, menu should be at the right (opt.direction == Qt::LeftToRight) ? listRect.setRight(screen.right()) : listRect.setLeft(screen.left()); } + d->container->setGeometry(listRect); } - d->container->setGeometry(listRect); } } #endif @@ -2752,10 +2760,6 @@ void QComboBox::changeEvent(QEvent *e) void QComboBox::resizeEvent(QResizeEvent *) { Q_D(QComboBox); -#ifdef Q_WS_S60 - if (d->viewContainer() && d->viewContainer()->isVisible()) - showPopup(); -#endif d->updateLineEditGeometry(); } -- cgit v0.12 From 7480f77039bf104c0b9a0763898038ce988dc4b3 Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Tue, 15 Mar 2011 11:54:30 +0200 Subject: Regression: QS60Style: Theme background is incorrect Fix for QTBUG-16816 cause theme background to display incorrectly after a layout switch is done. Theme background is shown "tiled" instead of being whole screen size. This is because the setBackgroundTexture() call was removed to "save" QPixmap creation. Unfortunately, it really skips the background texture creation, but does not re-create a new one for the new layout, so portrait background is used again. This leads to tiling the image. Let's just return the call to the setBackgroundTexture() (this will eventually anyway be "optimized" with fix for QTBUG-14910). Task-number: QTBUG-17930 Reviewed-by: Laszlo Agocs --- src/gui/styles/qs60style_s60.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index b4785dc..8e442bf 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -1428,6 +1428,7 @@ QS60Style::QS60Style() void QS60StylePrivate::handleDynamicLayoutVariantSwitch() { clearCaches(QS60StylePrivate::CC_LayoutChange); + setBackgroundTexture(qApp); setActiveLayout(); foreach (QWidget *widget, QApplication::allWidgets()) widget->ensurePolished(); -- cgit v0.12 From 7dfa50a9b97d28813341329a55aa1a4b5a7de527 Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Tue, 15 Mar 2011 13:31:39 +0200 Subject: QS60Style: use placeholder texture when polishing widgets and palette Background texture is not created until it is actually painted. This allows skipping the whole background texture creation, if app overwrites the QPalette::Window with its own data (image or color). When widget is drawn and style notices that the widget is still using a placeholder (1*1 red QPixmap) texture, it creates the real texture and uses that for drawing. Note that accessing QPalette::Window will give the placeholder pixmap. Which is then again replaced with the real texture, if it is drawn through the qt_s60_fill_background(). Task-number: QTBUG-14910 Reviewed-by: Laszlo Agocs --- src/gui/styles/qs60style.cpp | 22 +++++++++++++++++----- src/gui/styles/qs60style_p.h | 4 ++++ src/gui/styles/qs60style_s60.cpp | 14 ++++++++++++-- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 15cb5c6..c100330 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -118,6 +118,7 @@ const short *QS60StylePrivate::m_pmPointer = QS60StylePrivate::data[0]; // theme background texture QPixmap *QS60StylePrivate::m_background = 0; +QPixmap *QS60StylePrivate::m_placeHolderTexture = 0; // theme palette QPalette *QS60StylePrivate::m_themePalette = 0; @@ -155,6 +156,10 @@ const double KTabFontMul = 0.72; QS60StylePrivate::~QS60StylePrivate() { clearCaches(); //deletes also background image + if (m_placeHolderTexture) { + delete m_placeHolderTexture; + m_placeHolderTexture = 0; + } deleteThemePalette(); #ifdef Q_WS_S60 removeAnimations(); @@ -505,7 +510,10 @@ void QS60StylePrivate::setBackgroundTexture(QApplication *app) const { Q_UNUSED(app) QPalette applicationPalette = QApplication::palette(); - applicationPalette.setBrush(QPalette::Window, backgroundTexture()); + // The initial QPalette::Window is just a placeHolder QPixmap to save RAM + // if the actual texture is not needed. The real texture is created just before + // painting it in qt_s60_fill_background(). + applicationPalette.setBrush(QPalette::Window, placeHolderTexture()); setThemePalette(&applicationPalette); } @@ -700,8 +708,10 @@ void QS60StylePrivate::setThemePalette(QPalette *palette) const palette->setColor(QPalette::LinkVisited, palette->color(QPalette::Link).darker()); palette->setColor(QPalette::Highlight, s60Color(QS60StyleEnums::CL_QsnHighlightColors, 2, 0)); - // set background image as a texture brush - palette->setBrush(QPalette::Window, backgroundTexture()); + // The initial QPalette::Window is just a placeHolder QPixmap to save RAM + // if the actual texture is not needed. The real texture is created just before + // painting it in qt_s60_fill_background(). + palette->setBrush(QPalette::Window, placeHolderTexture()); // set as transparent so that styled full screen theme background is visible palette->setBrush(QPalette::Base, Qt::transparent); // set button color based on pixel colors @@ -3529,10 +3539,12 @@ extern QPoint qt_s60_fill_background_offset(const QWidget *targetWidget); bool qt_s60_fill_background(QPainter *painter, const QRegion &rgn, const QBrush &brush) { - const QPixmap backgroundTexture(QS60StylePrivate::backgroundTexture()); - if (backgroundTexture.cacheKey() != brush.texture().cacheKey()) + const QPixmap placeHolder(QS60StylePrivate::placeHolderTexture()); + if (placeHolder.cacheKey() != brush.texture().cacheKey()) return false; + const QPixmap backgroundTexture(QS60StylePrivate::backgroundTexture()); + const QPaintDevice *target = painter->device(); if (target->devType() == QInternal::Widget) { const QWidget *widget = static_cast(target); diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h index c64cbb1..8c023bf 100644 --- a/src/gui/styles/qs60style_p.h +++ b/src/gui/styles/qs60style_p.h @@ -555,6 +555,7 @@ public: static QPixmap frame(SkinFrameElements frame, const QSize &size, SkinElementFlags flags = KDefaultSkinElementFlags); static QPixmap backgroundTexture(); + static QPixmap placeHolderTexture(); #ifdef Q_WS_S60 void handleDynamicLayoutVariantSwitch(); @@ -614,6 +615,9 @@ private: // Contains background texture. static QPixmap *m_background; + // Placeholder pixmap for the real background texture. + static QPixmap *m_placeHolderTexture; + const static SkinElementFlags KDefaultSkinElementFlags; // defined theme palette static QPalette *m_themePalette; diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index 8e442bf..1ff195d 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -66,7 +66,6 @@ #include #include #include - #include #if !defined(QT_NO_STYLE_S60) || defined(QT_PLUGIN) @@ -1408,12 +1407,23 @@ QPixmap QS60StylePrivate::backgroundTexture() if (createNewBackground) { QPixmap background = part(QS60StyleEnums::SP_QsnBgScreen, - QSize(applicationRect.Width(), applicationRect.Height()), 0, SkinElementFlags()); + QSize(applicationRect.Width(), applicationRect.Height()), 0, SkinElementFlags()); m_background = new QPixmap(background); } return *m_background; } +// Generates 1*1 red pixmap as a placeholder for real texture. +// The actual theme texture is drawn in qt_s60_fill_background(). +QPixmap QS60StylePrivate::placeHolderTexture() +{ + if (!m_placeHolderTexture) { + m_placeHolderTexture = new QPixmap(1,1); + m_placeHolderTexture->fill(Qt::red); + } + return *m_placeHolderTexture; +} + QSize QS60StylePrivate::screenSize() { return QSize(S60->screenWidthInPixels, S60->screenHeightInPixels); -- cgit v0.12 From f9a297d9b2331adab2116210d3c527fae22e336e Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Tue, 15 Mar 2011 13:42:20 +0200 Subject: Avoid panics in QDesktopWidget on Symbian emulator. There is usually only one screen on the emulator and it was incorrectly assumed that ScreenDevice() would return null for a non-existing screen. It panics instead so the entire call must be skipped. Reviewed-by: Sami Merila --- src/gui/kernel/qdesktopwidget_s60.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/gui/kernel/qdesktopwidget_s60.cpp b/src/gui/kernel/qdesktopwidget_s60.cpp index c3963f4..62a4d40 100644 --- a/src/gui/kernel/qdesktopwidget_s60.cpp +++ b/src/gui/kernel/qdesktopwidget_s60.cpp @@ -188,12 +188,14 @@ void QDesktopWidgetPrivate::cleanup() void QDesktopWidgetPrivate::init_sys() { #if defined(Q_SYMBIAN_SUPPORTS_MULTIPLE_SCREENS) - CWsScreenDevice *dev = S60->screenDevice(1); - if (dev) { - displayControl = static_cast( - dev->GetInterface(MDisplayControl::ETypeId)); - if (displayControl) { - displayControl->EnableDisplayChangeEvents(ETrue); + if (S60->screenCount() > 1) { + CWsScreenDevice *dev = S60->screenDevice(1); + if (dev) { + displayControl = static_cast( + dev->GetInterface(MDisplayControl::ETypeId)); + if (displayControl) { + displayControl->EnableDisplayChangeEvents(ETrue); + } } } #endif -- cgit v0.12 From b3b332a50a6288164ca86d0691e9615f9c19abda Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Tue, 15 Mar 2011 13:46:46 +0100 Subject: Fix the license info for bin/elf2e32_qtwrapper.pl. Reviewed-by: TrustMe --- bin/elf2e32_qtwrapper.pl | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/bin/elf2e32_qtwrapper.pl b/bin/elf2e32_qtwrapper.pl index 64d485b..a2aff75 100755 --- a/bin/elf2e32_qtwrapper.pl +++ b/bin/elf2e32_qtwrapper.pl @@ -1,4 +1,44 @@ #!/usr/bin/perl -w +############################################################################# +## +## Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +## All rights reserved. +## Contact: Nokia Corporation (qt-info@nokia.com) +## +## This file is part of the S60 port of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:LGPL$ +## No Commercial Usage +## This file contains pre-release code and may not be distributed. +## You may use this file in accordance with the terms and conditions +## contained in the Technology Preview License Agreement accompanying +## this package. +## +## GNU Lesser General Public License Usage +## Alternatively, this file may be used under the terms of the GNU Lesser +## General Public License version 2.1 as published by the Free Software +## Foundation and appearing in the file LICENSE.LGPL included in the +## packaging of this file. Please review the following information to +## ensure the GNU Lesser General Public License version 2.1 requirements +## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +## +## In addition, as a special exception, Nokia gives you certain additional +## rights. These rights are described in the Nokia Qt LGPL Exception +## version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +## +## If you have questions regarding the use of this file, please contact +## Nokia at qt-info@nokia.com. +## +## +## +## +## +## +## +## +## $QT_END_LICENSE$ +## +############################################################################# # A script to get around some shortcomings in elf2e32, namely: # - Returning 0 even when there are errors. -- cgit v0.12 From fd8183129d0efe99e0d28f524264c59fb9155b80 Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Tue, 15 Mar 2011 14:54:42 +0100 Subject: Adjust right bearing when breaking with line separators If we found a forced line break with line separator (e.g. '\n'), take the right bearing of previous glyph into account, otherwise the resulting text width will be slightly smaller than the one without a line separator. Task-number: QTBUG-17020 Reviewed-by: Eskil --- src/gui/text/qtextlayout.cpp | 47 ++++++++++++++++-------------- tests/auto/qtextlayout/tst_qtextlayout.cpp | 17 +++++++++++ 2 files changed, 42 insertions(+), 22 deletions(-) diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index a996f59..905f81b 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -1682,6 +1682,7 @@ namespace { int glyphCount; int maxGlyphs; int currentPosition; + glyph_t previousGlyph; QFixed minw; QFixed softHyphenWidth; @@ -1709,6 +1710,15 @@ namespace { return glyphs.glyphs[logClusters[currentPosition - 1]]; } + inline void saveCurrentGlyph() + { + previousGlyph = 0; + if (currentPosition > 0 && + logClusters[currentPosition - 1] < glyphs.numGlyphs) { + previousGlyph = currentGlyph(); // needed to calculate right bearing later + } + } + inline void adjustRightBearing(glyph_t glyph) { qreal rb; @@ -1723,6 +1733,12 @@ namespace { adjustRightBearing(currentGlyph()); } + inline void adjustPreviousRightBearing() + { + if (previousGlyph > 0) + adjustRightBearing(previousGlyph); + } + inline void resetRightBearing() { rightBearing = QFixed(1); // Any positive number is defined as invalid since only @@ -1798,22 +1814,7 @@ void QTextLine::layout_helper(int maxGlyphs) lbh.manualWrap = (wrapMode == QTextOption::ManualWrap || wrapMode == QTextOption::NoWrap); int item = -1; - int newItem = -1; - int left = 0; - int right = eng->layoutData->items.size()-1; - while(left <= right) { - int middle = ((right-left)/2)+left; - if (line.from > eng->layoutData->items[middle].position) - left = middle+1; - else if(line.from < eng->layoutData->items[middle].position) - right = middle-1; - else { - newItem = middle; - break; - } - } - if (newItem == -1) - newItem = right; + int newItem = eng->findItem(line.from); LB_DEBUG("from: %d: item=%d, total %d, width available %f", line.from, newItem, eng->layoutData->items.size(), line.width.toReal()); @@ -1825,6 +1826,7 @@ void QTextLine::layout_helper(int maxGlyphs) lbh.currentPosition = line.from; int end = 0; lbh.logClusters = eng->layoutData->logClustersPtr; + lbh.previousGlyph = 0; while (newItem < eng->layoutData->items.size()) { lbh.resetRightBearing(); @@ -1885,6 +1887,7 @@ void QTextLine::layout_helper(int maxGlyphs) current, lbh.logClusters, lbh.glyphs); } else { lbh.tmpData.length++; + lbh.adjustPreviousRightBearing(); } line += lbh.tmpData; goto found; @@ -1915,9 +1918,7 @@ void QTextLine::layout_helper(int maxGlyphs) } else { lbh.whiteSpaceOrObject = false; bool sb_or_ws = false; - glyph_t previousGlyph = 0; - if (lbh.currentPosition > 0 && lbh.logClusters[lbh.currentPosition - 1] 0) - lbh.adjustRightBearing(previousGlyph); + else + lbh.adjustPreviousRightBearing(); + if (!breakany) { line.textWidth += lbh.softHyphenWidth; } @@ -1979,6 +1981,7 @@ void QTextLine::layout_helper(int maxGlyphs) goto found; } } + lbh.saveCurrentGlyph(); } if (lbh.currentPosition == end) newItem = item + 1; diff --git a/tests/auto/qtextlayout/tst_qtextlayout.cpp b/tests/auto/qtextlayout/tst_qtextlayout.cpp index 0f1ff66..2d15566 100644 --- a/tests/auto/qtextlayout/tst_qtextlayout.cpp +++ b/tests/auto/qtextlayout/tst_qtextlayout.cpp @@ -124,6 +124,7 @@ private slots: void lineWidthFromBOM(); void textWidthVsWIdth(); void textWidthWithStackedTextEngine(); + void textWidthWithLineSeparator(); private: QFont testFont; @@ -1399,5 +1400,21 @@ void tst_QTextLayout::textWidthWithStackedTextEngine() QCOMPARE(line.naturalTextWidth(), fm.width(text)); } +void tst_QTextLayout::textWidthWithLineSeparator() +{ + QString s1("Save Project"), s2("Save Project\ntest"); + s2.replace('\n', QChar::LineSeparator); + + QTextLayout layout1(s1), layout2(s2); + layout1.beginLayout(); + layout2.beginLayout(); + + QTextLine line1 = layout1.createLine(); + QTextLine line2 = layout2.createLine(); + line1.setLineWidth(0x1000); + line2.setLineWidth(0x1000); + QCOMPARE(line1.naturalTextWidth(), line2.naturalTextWidth()); +} + QTEST_MAIN(tst_QTextLayout) #include "tst_qtextlayout.moc" -- cgit v0.12 From b17ee2af5e3453191bb4568a388ea042562e1abc Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 15 Mar 2011 16:29:26 +0100 Subject: Designer: Fix a bug clearing the Z-Order when adding a new widget. Wrong list was used when adding widgets. Task-number: QTBUG-18120 Reviewed-by: Jarek Kobus --- tools/designer/src/components/formeditor/qdesigner_resource.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/designer/src/components/formeditor/qdesigner_resource.cpp b/tools/designer/src/components/formeditor/qdesigner_resource.cpp index 430b070..6d718bb 100644 --- a/tools/designer/src/components/formeditor/qdesigner_resource.cpp +++ b/tools/designer/src/components/formeditor/qdesigner_resource.cpp @@ -1190,7 +1190,7 @@ QWidget *QDesignerResource::createWidget(const QString &widgetName, QWidget *par parentWidget->setProperty("_q_widgetOrder", qVariantFromValue(list)); QList zOrder = qVariantValue(parentWidget->property("_q_zOrder")); zOrder.append(w); - parentWidget->setProperty("_q_zOrder", qVariantFromValue(list)); + parentWidget->setProperty("_q_zOrder", qVariantFromValue(zOrder)); } } else { core()->metaDataBase()->add(w); -- cgit v0.12 From f4244785cb8875b177274db485a346605f05ed7c Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 15 Mar 2011 16:32:53 +0100 Subject: Designer: Fix a bug affecting tab reordering of promoted tab widgets. Event filter was added twice due to widget initialization being done twice caused by recursion of WidgetFactory::createWidget() in the case of a fallback to promotion when a custom widget plugin is missing. Task-number: QTBUG-18121 Reviewed-by: Jarek Kobus --- tools/designer/src/lib/shared/widgetfactory.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/designer/src/lib/shared/widgetfactory.cpp b/tools/designer/src/lib/shared/widgetfactory.cpp index 887bb04..36f795e 100644 --- a/tools/designer/src/lib/shared/widgetfactory.cpp +++ b/tools/designer/src/lib/shared/widgetfactory.cpp @@ -412,8 +412,10 @@ QWidget *WidgetFactory::createWidget(const QString &widgetName, QWidget *parentW // Currently happens in the case of Q3-Support widgets baseClass =fallBackBaseClass; } - w = createWidget(baseClass, parentWidget); - promoteWidget(core(),w,widgetName); + if (QWidget *promotedWidget = createWidget(baseClass, parentWidget)) { + promoteWidget(core(), promotedWidget, widgetName); + return promotedWidget; // Do not initialize twice. + } } while (false); Q_ASSERT(w != 0); -- cgit v0.12 From 2355774b061d9e7213634ddec3c50280c4b10b70 Mon Sep 17 00:00:00 2001 From: Jani Hautakangas Date: Tue, 8 Mar 2011 00:26:05 +0200 Subject: Initial implementation of GLES2.0 resource pooling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Keep the implementation in separate qpixmapdata_poolgl.cpp file until the pooling has been verified and confirmed to work ok. Task-number: QTBUG-15253 QTBUG-17850 Reviewed-by: Samuel Rødal --- src/gui/kernel/qwidget.cpp | 4 +- .../gl2paintengineex/qpaintengineex_opengl2.cpp | 28 +- src/opengl/opengl.pro | 9 +- src/opengl/qgl.cpp | 19 +- src/opengl/qgl.h | 1 + src/opengl/qgl_symbian.cpp | 1 + src/opengl/qgltexturepool.cpp | 241 ++++++ src/opengl/qgltexturepool_p.h | 147 ++++ src/opengl/qgraphicssystem_gl.cpp | 11 +- src/opengl/qgraphicssystem_gl_p.h | 4 + src/opengl/qpixmapdata_gl_p.h | 42 +- src/opengl/qpixmapdata_poolgl.cpp | 902 +++++++++++++++++++++ src/opengl/qwindowsurface_gl.cpp | 79 +- src/s60installs/bwins/QtOpenGLu.def | 7 + src/s60installs/eabi/QtOpenGLu.def | 6 + 15 files changed, 1482 insertions(+), 19 deletions(-) create mode 100644 src/opengl/qgltexturepool.cpp create mode 100644 src/opengl/qgltexturepool_p.h create mode 100644 src/opengl/qpixmapdata_poolgl.cpp diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 1786e65..e8d9efd 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -1326,8 +1326,8 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) //give potential windows a bigger "pre-initial" size; create_sys() will give them a new size later #ifdef Q_OS_SYMBIAN if (isGLWidget) { - // Don't waste GPU mem for unnecessary large egl surface - data.crect = QRect(0,0,2,2); + // Don't waste GPU mem for unnecessary large egl surface until resized by application + data.crect = QRect(0,0,1,1); } else { data.crect = parentWidget ? QRect(0,0,100,30) : QRect(0,0,360,640); } diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp index cda31e5..c8786fb 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp @@ -1335,11 +1335,14 @@ void QGL2PaintEngineEx::drawPixmap(const QRectF& dest, const QPixmap & pixmap, c ensureActive(); d->transferMode(ImageDrawingMode); + QGLContext::BindOptions bindOptions = QGLContext::InternalBindOption|QGLContext::CanFlipNativePixmapBindOption; +#ifdef QGL_USE_TEXTURE_POOL + bindOptions |= QGLContext::TemporarilyCachedBindOption; +#endif + glActiveTexture(GL_TEXTURE0 + QT_IMAGE_TEXTURE_UNIT); QGLTexture *texture = - ctx->d_func()->bindTexture(pixmap, GL_TEXTURE_2D, GL_RGBA, - QGLContext::InternalBindOption - | QGLContext::CanFlipNativePixmapBindOption); + ctx->d_func()->bindTexture(pixmap, GL_TEXTURE_2D, GL_RGBA, bindOptions); GLfloat top = texture->options & QGLContext::InvertedYBindOption ? (pixmap.height() - src.top()) : src.top(); GLfloat bottom = texture->options & QGLContext::InvertedYBindOption ? (pixmap.height() - src.bottom()) : src.bottom(); @@ -1351,6 +1354,12 @@ void QGL2PaintEngineEx::drawPixmap(const QRectF& dest, const QPixmap & pixmap, c d->updateTextureFilter(GL_TEXTURE_2D, GL_CLAMP_TO_EDGE, state()->renderHints & QPainter::SmoothPixmapTransform, texture->id); d->drawTexture(dest, srcRect, pixmap.size(), isOpaque, isBitmap); + + if (texture->options&QGLContext::TemporarilyCachedBindOption) { + // pixmap was temporarily cached as a QImage texture by pooling system + // and should be destroyed immediately + QGLTextureCache::instance()->remove(ctx, texture->id); + } } void QGL2PaintEngineEx::drawImage(const QRectF& dest, const QImage& image, const QRectF& src, @@ -1375,12 +1384,23 @@ void QGL2PaintEngineEx::drawImage(const QRectF& dest, const QImage& image, const glActiveTexture(GL_TEXTURE0 + QT_IMAGE_TEXTURE_UNIT); - QGLTexture *texture = ctx->d_func()->bindTexture(image, GL_TEXTURE_2D, GL_RGBA, QGLContext::InternalBindOption); + QGLContext::BindOptions bindOptions = QGLContext::InternalBindOption; +#ifdef QGL_USE_TEXTURE_POOL + bindOptions |= QGLContext::TemporarilyCachedBindOption; +#endif + + QGLTexture *texture = ctx->d_func()->bindTexture(image, GL_TEXTURE_2D, GL_RGBA, bindOptions); GLuint id = texture->id; d->updateTextureFilter(GL_TEXTURE_2D, GL_CLAMP_TO_EDGE, state()->renderHints & QPainter::SmoothPixmapTransform, id); d->drawTexture(dest, src, image.size(), !image.hasAlphaChannel()); + + if (texture->options&QGLContext::TemporarilyCachedBindOption) { + // image was temporarily cached by texture pooling system + // and should be destroyed immediately + QGLTextureCache::instance()->remove(ctx, texture->id); + } } void QGL2PaintEngineEx::drawStaticTextItem(QStaticTextItem *textItem) diff --git a/src/opengl/opengl.pro b/src/opengl/opengl.pro index 0e82467..6bbf99b 100644 --- a/src/opengl/opengl.pro +++ b/src/opengl/opengl.pro @@ -148,11 +148,16 @@ embedded { } symbian { + DEFINES += QGL_USE_TEXTURE_POOL + SOURCES -= qpixmapdata_gl.cpp SOURCES += qgl_symbian.cpp \ + qpixmapdata_poolgl.cpp \ qglpixelbuffer_egl.cpp \ - qgl_egl.cpp + qgl_egl.cpp \ + qgltexturepool.cpp - HEADERS += qgl_egl_p.h + HEADERS += qgl_egl_p.h \ + qgltexturepool_p.h symbian:TARGET.UID3 = 0x2002131A } diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 062218c..ded7aa8 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -93,6 +93,10 @@ #include "qlibrary.h" #include +#ifdef QGL_USE_TEXTURE_POOL +#include +#endif + QT_BEGIN_NAMESPACE @@ -2022,6 +2026,10 @@ struct DDSFormat { the pixmap/image that it stems from, e.g. installing destruction hooks in them. + \omitvalue TemporarilyCachedBindOption Used by paint engines on some + platforms to indicate that the pixmap or image texture is possibly + cached only temporarily and must be destroyed immediately after the use. + \omitvalue InternalBindOption */ @@ -2529,8 +2537,18 @@ QGLTexture* QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G #endif const QImage &constRef = img; // to avoid detach in bits()... +#ifdef QGL_USE_TEXTURE_POOL + QGLTexturePool::instance()->createPermanentTexture(tx_id, + target, + 0, internalFormat, + img.width(), img.height(), + externalFormat, + pixel_type, + constRef.bits()); +#else glTexImage2D(target, 0, internalFormat, img.width(), img.height(), 0, externalFormat, pixel_type, constRef.bits()); +#endif #if defined(QT_OPENGL_ES_2) if (genMipmap) glGenerateMipmap(target); @@ -2569,7 +2587,6 @@ QGLTexture *QGLContextPrivate::textureCacheLookup(const qint64 key, GLenum targe return 0; } - /*! \internal */ QGLTexture *QGLContextPrivate::bindTexture(const QPixmap &pixmap, GLenum target, GLint format, QGLContext::BindOptions options) { diff --git a/src/opengl/qgl.h b/src/opengl/qgl.h index 9443c74..7d72c8a 100644 --- a/src/opengl/qgl.h +++ b/src/opengl/qgl.h @@ -329,6 +329,7 @@ public: MemoryManagedBindOption = 0x0010, // internal flag CanFlipNativePixmapBindOption = 0x0020, // internal flag + TemporarilyCachedBindOption = 0x0040, // internal flag DefaultBindOption = LinearFilteringBindOption | InvertedYBindOption diff --git a/src/opengl/qgl_symbian.cpp b/src/opengl/qgl_symbian.cpp index a9e2248..2978514 100644 --- a/src/opengl/qgl_symbian.cpp +++ b/src/opengl/qgl_symbian.cpp @@ -52,6 +52,7 @@ #include // to access QWExtra #include "qgl_egl_p.h" #include "qpixmapdata_gl_p.h" +#include "qgltexturepool_p.h" #include "qcolormap.h" #include diff --git a/src/opengl/qgltexturepool.cpp b/src/opengl/qgltexturepool.cpp new file mode 100644 index 0000000..61a88c3 --- /dev/null +++ b/src/opengl/qgltexturepool.cpp @@ -0,0 +1,241 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgltexturepool_p.h" +#include "qpixmapdata_gl_p.h" + +QT_BEGIN_NAMESPACE + +Q_OPENGL_EXPORT extern QGLWidget* qt_gl_share_widget(); + +static QGLTexturePool *qt_gl_texture_pool = 0; + +class QGLTexturePoolPrivate +{ +public: + QGLTexturePoolPrivate() : lruFirst(0), lruLast(0) {} + + QGLPixmapData *lruFirst; + QGLPixmapData *lruLast; +}; + +QGLTexturePool::QGLTexturePool() + : d_ptr(new QGLTexturePoolPrivate()) +{ +} + +QGLTexturePool::~QGLTexturePool() +{ +} + +QGLTexturePool *QGLTexturePool::instance() +{ + if (!qt_gl_texture_pool) + qt_gl_texture_pool = new QGLTexturePool(); + return qt_gl_texture_pool; +} + +GLuint QGLTexturePool::createTextureForPixmap(GLenum target, + GLint level, + GLint internalformat, + GLsizei width, + GLsizei height, + GLenum format, + GLenum type, + QGLPixmapData *data) +{ + GLuint texture; + glGenTextures(1, &texture); + glBindTexture(target, texture); + do { + glTexImage2D(target, level, internalformat, width, height, 0, format, type, 0); + GLenum error = glGetError(); + if (error == GL_NO_ERROR) { + if (data) + moveToHeadOfLRU(data); + return texture; + } else if (error != GL_OUT_OF_MEMORY) { + qWarning("QGLTexturePool: cannot create temporary texture because of invalid params"); + return 0; + } + } while (reclaimSpace(internalformat, width, height, format, type, data)); + qWarning("QGLTexturePool: cannot reclaim sufficient space for a %dx%d pixmap", + width, height); + return 0; +} + +bool QGLTexturePool::createPermanentTexture(GLuint texture, + GLenum target, + GLint level, + GLint internalformat, + GLsizei width, + GLsizei height, + GLenum format, + GLenum type, + const GLvoid *data) +{ + glBindTexture(target, texture); + do { + glTexImage2D(target, level, internalformat, width, height, 0, format, type, data); + + GLenum error = glGetError(); + if (error == GL_NO_ERROR) { + return true; + } else if (error != GL_OUT_OF_MEMORY) { + qWarning("QGLTexturePool: cannot create permanent texture because of invalid params"); + return false; + } + } while (reclaimSpace(internalformat, width, height, format, type, 0)); + qWarning("QGLTexturePool: cannot reclaim sufficient space for a %dx%d pixmap", + width, height); + return 0; +} + +void QGLTexturePool::releaseTexture(QGLPixmapData *data, GLuint texture) +{ + // Very simple strategy at the moment: just destroy the texture. + if (data) + removeFromLRU(data); + + QGLShareContextScope ctx(qt_gl_share_widget()->context()); + glDeleteTextures(1, &texture); +} + +void QGLTexturePool::useTexture(QGLPixmapData *data) +{ + moveToHeadOfLRU(data); +} + +void QGLTexturePool::detachTexture(QGLPixmapData *data) +{ + removeFromLRU(data); +} + +bool QGLTexturePool::reclaimSpace(GLint internalformat, + GLsizei width, + GLsizei height, + GLenum format, + GLenum type, + QGLPixmapData *data) +{ + Q_UNUSED(internalformat); // For future use in picking the best texture to eject. + Q_UNUSED(width); + Q_UNUSED(height); + Q_UNUSED(format); + Q_UNUSED(type); + + bool succeeded = false; + bool wasInLRU = false; + if (data) { + wasInLRU = data->inLRU; + moveToHeadOfLRU(data); + } + + QGLPixmapData *lrudata = pixmapLRU(); + if (lrudata && lrudata != data) { + lrudata->reclaimTexture(); + succeeded = true; + } + + if (data && !wasInLRU) + removeFromLRU(data); + + return succeeded; +} + +void QGLTexturePool::hibernate() +{ + Q_D(QGLTexturePool); + QGLPixmapData *pd = d->lruLast; + while (pd) { + QGLPixmapData *prevLRU = pd->prevLRU; + pd->inTexturePool = false; + pd->inLRU = false; + pd->nextLRU = 0; + pd->prevLRU = 0; + pd->hibernate(); + pd = prevLRU; + } + d->lruFirst = 0; + d->lruLast = 0; +} + +void QGLTexturePool::moveToHeadOfLRU(QGLPixmapData *data) +{ + Q_D(QGLTexturePool); + if (data->inLRU) { + if (!data->prevLRU) + return; // Already at the head of the list. + removeFromLRU(data); + } + data->inLRU = true; + data->nextLRU = d->lruFirst; + data->prevLRU = 0; + if (d->lruFirst) + d->lruFirst->prevLRU = data; + else + d->lruLast = data; + d->lruFirst = data; +} + +void QGLTexturePool::removeFromLRU(QGLPixmapData *data) +{ + Q_D(QGLTexturePool); + if (!data->inLRU) + return; + if (data->nextLRU) + data->nextLRU->prevLRU = data->prevLRU; + else + d->lruLast = data->prevLRU; + if (data->prevLRU) + data->prevLRU->nextLRU = data->nextLRU; + else + d->lruFirst = data->nextLRU; + data->inLRU = false; +} + +QGLPixmapData *QGLTexturePool::pixmapLRU() +{ + Q_D(QGLTexturePool); + return d->lruLast; +} + +QT_END_NAMESPACE diff --git a/src/opengl/qgltexturepool_p.h b/src/opengl/qgltexturepool_p.h new file mode 100644 index 0000000..8b6f726 --- /dev/null +++ b/src/opengl/qgltexturepool_p.h @@ -0,0 +1,147 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGLTEXTUREPOOL_P_H +#define QGLTEXTUREPOOL_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of other Qt classes. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qgl.h" +#include + +QT_BEGIN_NAMESPACE + +class QGLPixmapData; +class QGLTexturePoolPrivate; + +class QGLTexturePool +{ +public: + QGLTexturePool(); + virtual ~QGLTexturePool(); + + static QGLTexturePool *instance(); + + // Create a new texture with the specified parameters and associate + // it with "data". The QGLPixmapData will be notified when the + // texture needs to be reclaimed by the pool. + // + // This function will call reclaimSpace() when texture creation fails. + GLuint createTextureForPixmap(GLenum target, + GLint level, + GLint internalformat, + GLsizei width, + GLsizei height, + GLenum format, + GLenum type, + QGLPixmapData *data); + + // Create a permanent texture with the specified parameters. + // If there is insufficient space for the texture, + // then this function will call reclaimSpace() and try again. + // + // The caller is responsible for calling glDeleteTextures() + // when it no longer needs the texture, as the texture is not + // recorded in the texture pool. + bool createPermanentTexture(GLuint texture, + GLenum target, + GLint level, + GLint internalformat, + GLsizei width, + GLsizei height, + GLenum format, + GLenum type, + const GLvoid *data); + + // Release a texture that is no longer required. + void releaseTexture(QGLPixmapData *data, GLuint texture); + + // Notify the pool that a QGLPixmapData object is using + // an texture again. This allows the pool to move the texture + // within a least-recently-used list of QGLPixmapData objects. + void useTexture(QGLPixmapData *data); + + // Notify the pool that the texture associated with a + // QGLPixmapData is being detached from the pool. The caller + // will become responsible for calling glDeleteTextures(). + void detachTexture(QGLPixmapData *data); + + // Reclaim space for an image allocation with the specified parameters. + // Returns true if space was reclaimed, or false if there is no + // further space that can be reclaimed. The "data" parameter + // indicates the pixmap that is trying to obtain space which should + // not itself be reclaimed. + bool reclaimSpace(GLint internalformat, + GLsizei width, + GLsizei height, + GLenum format, + GLenum type, + QGLPixmapData *data); + + // Hibernate the image pool because the context is about to be + // destroyed. All textures left in the pool should be released. + void hibernate(); + +protected: + // Helper functions for managing the LRU list of QGLPixmapData objects. + void moveToHeadOfLRU(QGLPixmapData *data); + void removeFromLRU(QGLPixmapData *data); + QGLPixmapData *pixmapLRU(); + +private: + QScopedPointer d_ptr; + + Q_DECLARE_PRIVATE(QGLTexturePool) + Q_DISABLE_COPY(QGLTexturePool) +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/opengl/qgraphicssystem_gl.cpp b/src/opengl/qgraphicssystem_gl.cpp index 3574756..0aa3c2e 100644 --- a/src/opengl/qgraphicssystem_gl.cpp +++ b/src/opengl/qgraphicssystem_gl.cpp @@ -57,6 +57,10 @@ #include #endif +#ifdef QGL_USE_TEXTURE_POOL +#include "private/qgltexturepool_p.h" +#endif + QT_BEGIN_NAMESPACE extern QGLWidget *qt_gl_getShareWidget(); @@ -100,6 +104,11 @@ QWindowSurface *QGLGraphicsSystem::createWindowSurface(QWidget *widget) const return new QGLWindowSurface(widget); } - +#ifdef QGL_USE_TEXTURE_POOL +void QGLGraphicsSystem::releaseCachedResources() +{ + QGLTexturePool::instance()->hibernate(); +} +#endif QT_END_NAMESPACE diff --git a/src/opengl/qgraphicssystem_gl_p.h b/src/opengl/qgraphicssystem_gl_p.h index 4630da1..5829dcc 100644 --- a/src/opengl/qgraphicssystem_gl_p.h +++ b/src/opengl/qgraphicssystem_gl_p.h @@ -66,6 +66,10 @@ public: QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QWindowSurface *createWindowSurface(QWidget *widget) const; + +#ifdef QGL_USE_TEXTURE_POOL + void releaseCachedResources(); +#endif private: bool m_useX11GL; }; diff --git a/src/opengl/qpixmapdata_gl_p.h b/src/opengl/qpixmapdata_gl_p.h index a4066fd..55cc29d 100644 --- a/src/opengl/qpixmapdata_gl_p.h +++ b/src/opengl/qpixmapdata_gl_p.h @@ -66,6 +66,12 @@ class QGLFramebufferObject; class QGLFramebufferObjectFormat; class QGLPixmapData; +#ifdef QGL_USE_TEXTURE_POOL +void qt_gl_register_pixmap(QGLPixmapData *pd); +void qt_gl_unregister_pixmap(QGLPixmapData *pd); +void qt_gl_hibernate_pixmaps(); +#endif + class QGLFramebufferObjectPool { public: @@ -129,7 +135,24 @@ public: GLuint bind(bool copyBack = true) const; QGLTexture *texture() const; -#if defined(Q_OS_SYMBIAN) +#ifdef QGL_USE_TEXTURE_POOL + void destroyTexture(); + // Detach this image from the image pool. + void detachTextureFromPool(); + // Release the GL resources associated with this pixmap and copy + // the pixmap's contents out of the GPU back into main memory. + // The GL resource will be automatically recreated the next time + // ensureCreated() is called. Does nothing if the pixmap cannot be + // hibernated for some reason (e.g. texture is shared with another + // process via a SgImage). + void hibernate(); + // Called when the QGLTexturePool wants to reclaim this pixmap's + // texture objects to reuse storage. + void reclaimTexture(); + void forceToImage(); +#endif + +#ifdef Q_OS_SYMBIAN void* toNativeType(NativeType type); void fromNativeType(void* pixmap, NativeType type); #endif @@ -176,6 +199,23 @@ private: mutable QGLPixmapGLPaintDevice m_glDevice; +#ifdef QGL_USE_TEXTURE_POOL + QGLPixmapData *nextLRU; + QGLPixmapData *prevLRU; + mutable bool inLRU; + mutable bool failedToAlloc; + mutable bool inTexturePool; + + QGLPixmapData *next; + QGLPixmapData *prev; + + friend class QGLTexturePool; + + friend void qt_gl_register_pixmap(QGLPixmapData *pd); + friend void qt_gl_unregister_pixmap(QGLPixmapData *pd); + friend void qt_gl_hibernate_pixmaps(); +#endif + friend class QGLPixmapGLPaintDevice; friend class QMeeGoPixmapData; friend class QMeeGoLivePixmapData; diff --git a/src/opengl/qpixmapdata_poolgl.cpp b/src/opengl/qpixmapdata_poolgl.cpp new file mode 100644 index 0000000..f1220b1 --- /dev/null +++ b/src/opengl/qpixmapdata_poolgl.cpp @@ -0,0 +1,902 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenGL module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qpixmap.h" +#include "qglframebufferobject.h" + +#include + +#include "qpixmapdata_gl_p.h" + +#include +#include +#include + +#include + +#include +#include +#include +#include + +#include "qgltexturepool_p.h" + +QT_BEGIN_NAMESPACE + +Q_OPENGL_EXPORT extern QGLWidget* qt_gl_share_widget(); + +/*! + \class QGLFramebufferObjectPool + \since 4.6 + + \brief The QGLFramebufferObject class provides a pool of framebuffer + objects for offscreen rendering purposes. + + When requesting an FBO of a given size and format, an FBO of the same + format and a size at least as big as the requested size will be returned. + + \internal +*/ + +static inline int areaDiff(const QSize &size, const QGLFramebufferObject *fbo) +{ + return qAbs(size.width() * size.height() - fbo->width() * fbo->height()); +} + +extern int qt_next_power_of_two(int v); + +static inline QSize maybeRoundToNextPowerOfTwo(const QSize &sz) +{ +#ifdef QT_OPENGL_ES_2 + QSize rounded(qt_next_power_of_two(sz.width()), qt_next_power_of_two(sz.height())); + if (rounded.width() * rounded.height() < 1.20 * sz.width() * sz.height()) + return rounded; +#endif + return sz; +} + + +QGLFramebufferObject *QGLFramebufferObjectPool::acquire(const QSize &requestSize, const QGLFramebufferObjectFormat &requestFormat, bool strictSize) +{ + QGLFramebufferObject *chosen = 0; + QGLFramebufferObject *candidate = 0; + for (int i = 0; !chosen && i < m_fbos.size(); ++i) { + QGLFramebufferObject *fbo = m_fbos.at(i); + + if (strictSize) { + if (fbo->size() == requestSize && fbo->format() == requestFormat) { + chosen = fbo; + break; + } else { + continue; + } + } + + if (fbo->format() == requestFormat) { + // choose the fbo with a matching format and the closest size + if (!candidate || areaDiff(requestSize, candidate) > areaDiff(requestSize, fbo)) + candidate = fbo; + } + + if (candidate) { + m_fbos.removeOne(candidate); + + const QSize fboSize = candidate->size(); + QSize sz = fboSize; + + if (sz.width() < requestSize.width()) + sz.setWidth(qMax(requestSize.width(), qRound(sz.width() * 1.5))); + if (sz.height() < requestSize.height()) + sz.setHeight(qMax(requestSize.height(), qRound(sz.height() * 1.5))); + + // wasting too much space? + if (sz.width() * sz.height() > requestSize.width() * requestSize.height() * 4) + sz = requestSize; + + if (sz != fboSize) { + delete candidate; + candidate = new QGLFramebufferObject(maybeRoundToNextPowerOfTwo(sz), requestFormat); + } + + chosen = candidate; + } + } + + if (!chosen) { + if (strictSize) + chosen = new QGLFramebufferObject(requestSize, requestFormat); + else + chosen = new QGLFramebufferObject(maybeRoundToNextPowerOfTwo(requestSize), requestFormat); + } + + if (!chosen->isValid()) { + delete chosen; + chosen = 0; + } + + return chosen; +} + +void QGLFramebufferObjectPool::release(QGLFramebufferObject *fbo) +{ + if (fbo) + m_fbos << fbo; +} + + +QPaintEngine* QGLPixmapGLPaintDevice::paintEngine() const +{ + return data->paintEngine(); +} + +void QGLPixmapGLPaintDevice::beginPaint() +{ + if (!data->isValid()) + return; + + // QGLPaintDevice::beginPaint will store the current binding and replace + // it with m_thisFBO: + m_thisFBO = data->m_renderFbo->handle(); + QGLPaintDevice::beginPaint(); + + Q_ASSERT(data->paintEngine()->type() == QPaintEngine::OpenGL2); + + // QPixmap::fill() is deferred until now, where we actually need to do the fill: + if (data->needsFill()) { + const QColor &c = data->fillColor(); + float alpha = c.alphaF(); + glDisable(GL_SCISSOR_TEST); + glClearColor(c.redF() * alpha, c.greenF() * alpha, c.blueF() * alpha, alpha); + glClear(GL_COLOR_BUFFER_BIT); + } + else if (!data->isUninitialized()) { + // If the pixmap (GL Texture) has valid content (it has been + // uploaded from an image or rendered into before), we need to + // copy it from the texture to the render FBO. + + glDisable(GL_DEPTH_TEST); + glDisable(GL_SCISSOR_TEST); + glDisable(GL_BLEND); + +#if !defined(QT_OPENGL_ES_2) + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(0, data->width(), data->height(), 0, -999999, 999999); +#endif + + glViewport(0, 0, data->width(), data->height()); + + // Pass false to bind so it doesn't copy the FBO into the texture! + context()->drawTexture(QRect(0, 0, data->width(), data->height()), data->bind(false)); + } +} + +void QGLPixmapGLPaintDevice::endPaint() +{ + if (!data->isValid()) + return; + + data->copyBackFromRenderFbo(false); + + // Base's endPaint will restore the previous FBO binding + QGLPaintDevice::endPaint(); + + qgl_fbo_pool()->release(data->m_renderFbo); + data->m_renderFbo = 0; +} + +QGLContext* QGLPixmapGLPaintDevice::context() const +{ + data->ensureCreated(); + return data->m_ctx; +} + +QSize QGLPixmapGLPaintDevice::size() const +{ + return data->size(); +} + +bool QGLPixmapGLPaintDevice::alphaRequested() const +{ + return data->m_hasAlpha; +} + +void QGLPixmapGLPaintDevice::setPixmapData(QGLPixmapData* d) +{ + data = d; +} + +static int qt_gl_pixmap_serial = 0; + +QGLPixmapData::QGLPixmapData(PixelType type) + : QPixmapData(type, OpenGLClass) + , m_renderFbo(0) + , m_engine(0) + , m_ctx(0) + , m_dirty(false) + , m_hasFillColor(false) + , m_hasAlpha(false) + , inLRU(false) + , failedToAlloc(false) + , inTexturePool(false) +{ + setSerialNumber(++qt_gl_pixmap_serial); + m_glDevice.setPixmapData(this); + + qt_gl_register_pixmap(this); +} + +QGLPixmapData::~QGLPixmapData() +{ + delete m_engine; + + destroyTexture(); + qt_gl_unregister_pixmap(this); +} + +void QGLPixmapData::destroyTexture() +{ + if (inTexturePool) { + QGLTexturePool *pool = QGLTexturePool::instance(); + if (m_texture.id) + pool->releaseTexture(this, m_texture.id); + } else { + if (m_texture.id) { + QGLWidget *shareWidget = qt_gl_share_widget(); + if (shareWidget) { + QGLShareContextScope ctx(shareWidget->context()); + glDeleteTextures(1, &m_texture.id); + } + } + } + m_texture.id = 0; + inTexturePool = false; +} + +QPixmapData *QGLPixmapData::createCompatiblePixmapData() const +{ + return new QGLPixmapData(pixelType()); +} + +bool QGLPixmapData::isValid() const +{ + return w > 0 && h > 0; +} + +bool QGLPixmapData::isValidContext(const QGLContext *ctx) const +{ + if (ctx == m_ctx) + return true; + + const QGLContext *share_ctx = qt_gl_share_widget()->context(); + return ctx == share_ctx || QGLContext::areSharing(ctx, share_ctx); +} + +void QGLPixmapData::resize(int width, int height) +{ + if (width == w && height == h) + return; + + if (width <= 0 || height <= 0) { + width = 0; + height = 0; + } + + w = width; + h = height; + is_null = (w <= 0 || h <= 0); + d = pixelType() == QPixmapData::PixmapType ? 32 : 1; + + destroyTexture(); + + m_source = QImage(); + m_dirty = isValid(); + setSerialNumber(++qt_gl_pixmap_serial); +} + +void QGLPixmapData::ensureCreated() const +{ + if (!m_dirty) + return; + + m_dirty = false; + + QGLShareContextScope ctx(qt_gl_share_widget()->context()); + m_ctx = ctx; + + const GLenum internal_format = m_hasAlpha ? GL_RGBA : GL_RGB; +#ifdef QT_OPENGL_ES_2 + const GLenum external_format = internal_format; +#else + const GLenum external_format = qt_gl_preferredTextureFormat(); +#endif + const GLenum target = GL_TEXTURE_2D; + + m_texture.options &= ~QGLContext::MemoryManagedBindOption; + + if (!m_texture.id) { + m_texture.id = QGLTexturePool::instance()->createTextureForPixmap( + target, + 0, internal_format, + w, h, + external_format, + GL_UNSIGNED_BYTE, + const_cast(this)); + if (!m_texture.id) { + failedToAlloc = true; + return; + } + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + + inTexturePool = true; + } else if (inTexturePool) { + glBindTexture(target, m_texture.id); + QGLTexturePool::instance()->useTexture(const_cast(this)); + } + + if (!m_source.isNull() && m_texture.id) { + if (external_format == GL_RGB) { + const QImage tx = m_source.convertToFormat(QImage::Format_RGB888).mirrored(false, true); + + glBindTexture(target, m_texture.id); + glTexSubImage2D(target, 0, 0, 0, w, h, external_format, + GL_UNSIGNED_BYTE, tx.bits()); + } else { + // do byte swizzling ARGB -> RGBA + const QImage tx = ctx->d_func()->convertToGLFormat(m_source, true, external_format); + glBindTexture(target, m_texture.id); + glTexSubImage2D(target, 0, 0, 0, w, h, external_format, + GL_UNSIGNED_BYTE, tx.bits()); + } + + if (useFramebufferObjects()) + m_source = QImage(); + } +} + + +void QGLPixmapData::fromImage(const QImage &image, + Qt::ImageConversionFlags flags) +{ + QImage img = image; + createPixmapForImage(img, flags, false); +} + +void QGLPixmapData::fromImageReader(QImageReader *imageReader, + Qt::ImageConversionFlags flags) +{ + QImage image = imageReader->read(); + if (image.isNull()) + return; + + createPixmapForImage(image, flags, true); +} + +bool QGLPixmapData::fromFile(const QString &filename, const char *format, + Qt::ImageConversionFlags flags) +{ + if (pixelType() == QPixmapData::BitmapType) + return QPixmapData::fromFile(filename, format, flags); + QFile file(filename); + if (file.open(QIODevice::ReadOnly)) { + QByteArray data = file.peek(64); + bool alpha; + if (m_texture.canBindCompressedTexture + (data.constData(), data.size(), format, &alpha)) { + resize(0, 0); + data = file.readAll(); + file.close(); + QGLShareContextScope ctx(qt_gl_share_widget()->context()); + QSize size = m_texture.bindCompressedTexture + (data.constData(), data.size(), format); + if (!size.isEmpty()) { + w = size.width(); + h = size.height(); + is_null = false; + d = 32; + m_hasAlpha = alpha; + m_source = QImage(); + m_dirty = isValid(); + return true; + } + return false; + } + } + + QImage image = QImageReader(filename, format).read(); + if (image.isNull()) + return false; + + createPixmapForImage(image, flags, true); + + return !isNull(); +} + +bool QGLPixmapData::fromData(const uchar *buffer, uint len, const char *format, + Qt::ImageConversionFlags flags) +{ + bool alpha; + const char *buf = reinterpret_cast(buffer); + if (m_texture.canBindCompressedTexture(buf, int(len), format, &alpha)) { + resize(0, 0); + QGLShareContextScope ctx(qt_gl_share_widget()->context()); + QSize size = m_texture.bindCompressedTexture(buf, int(len), format); + if (!size.isEmpty()) { + w = size.width(); + h = size.height(); + is_null = false; + d = 32; + m_hasAlpha = alpha; + m_source = QImage(); + m_dirty = isValid(); + return true; + } + } + + QByteArray a = QByteArray::fromRawData(reinterpret_cast(buffer), len); + QBuffer b(&a); + b.open(QIODevice::ReadOnly); + QImage image = QImageReader(&b, format).read(); + if (image.isNull()) + return false; + + createPixmapForImage(image, flags, true); + + return !isNull(); +} + +/*! + out-of-place conversion (inPlace == false) will always detach() + */ +void QGLPixmapData::createPixmapForImage(QImage &image, Qt::ImageConversionFlags flags, bool inPlace) +{ + if (image.size() == QSize(w, h)) + setSerialNumber(++qt_gl_pixmap_serial); + + resize(image.width(), image.height()); + + if (pixelType() == BitmapType) { + m_source = image.convertToFormat(QImage::Format_MonoLSB); + + } else { + QImage::Format format = QImage::Format_RGB32; + if (qApp->desktop()->depth() == 16) + format = QImage::Format_RGB16; + + if (image.hasAlphaChannel() + && ((flags & Qt::NoOpaqueDetection) + || const_cast(image).data_ptr()->checkForAlphaPixels())) + format = QImage::Format_ARGB32_Premultiplied; + + if (inPlace && image.data_ptr()->convertInPlace(format, flags)) { + m_source = image; + } else { + m_source = image.convertToFormat(format); + + // convertToFormat won't detach the image if format stays the same. + if (image.format() == format) + m_source.detach(); + } + } + + m_dirty = true; + m_hasFillColor = false; + + m_hasAlpha = m_source.hasAlphaChannel(); + w = image.width(); + h = image.height(); + is_null = (w <= 0 || h <= 0); + d = m_source.depth(); + + destroyTexture(); +} + +bool QGLPixmapData::scroll(int dx, int dy, const QRect &rect) +{ + Q_UNUSED(dx); + Q_UNUSED(dy); + Q_UNUSED(rect); + return false; +} + +void QGLPixmapData::copy(const QPixmapData *data, const QRect &rect) +{ + if (data->classId() != QPixmapData::OpenGLClass || !static_cast(data)->useFramebufferObjects()) { + QPixmapData::copy(data, rect); + return; + } + + const QGLPixmapData *other = static_cast(data); + if (other->m_renderFbo) { + QGLShareContextScope ctx(qt_gl_share_widget()->context()); + + resize(rect.width(), rect.height()); + m_hasAlpha = other->m_hasAlpha; + ensureCreated(); + + if (!ctx->d_ptr->fbo) + glGenFramebuffers(1, &ctx->d_ptr->fbo); + + glBindFramebuffer(GL_DRAW_FRAMEBUFFER_EXT, ctx->d_ptr->fbo); + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, + GL_TEXTURE_2D, m_texture.id, 0); + + if (!other->m_renderFbo->isBound()) + glBindFramebuffer(GL_READ_FRAMEBUFFER_EXT, other->m_renderFbo->handle()); + + glDisable(GL_SCISSOR_TEST); + if (ctx->d_ptr->active_engine && ctx->d_ptr->active_engine->type() == QPaintEngine::OpenGL2) + static_cast(ctx->d_ptr->active_engine)->invalidateState(); + + glBlitFramebufferEXT(rect.x(), rect.y(), rect.x() + rect.width(), rect.y() + rect.height(), + 0, 0, w, h, + GL_COLOR_BUFFER_BIT, + GL_NEAREST); + + glBindFramebuffer(GL_FRAMEBUFFER_EXT, ctx->d_ptr->current_fbo); + } else { + QPixmapData::copy(data, rect); + } +} + +void QGLPixmapData::fill(const QColor &color) +{ + if (!isValid()) + return; + + bool hasAlpha = color.alpha() != 255; + if (hasAlpha && !m_hasAlpha) { + if (m_texture.id) { + destroyTexture(); + m_dirty = true; + } + m_hasAlpha = color.alpha() != 255; + } + + if (useFramebufferObjects()) { + m_source = QImage(); + m_hasFillColor = true; + m_fillColor = color; + } else { + + if (m_source.isNull()) { + m_fillColor = color; + m_hasFillColor = true; + + } else if (m_source.depth() == 32) { + m_source.fill(PREMUL(color.rgba())); + + } else if (m_source.depth() == 1) { + if (color == Qt::color1) + m_source.fill(1); + else + m_source.fill(0); + } + } +} + +bool QGLPixmapData::hasAlphaChannel() const +{ + return m_hasAlpha; +} + +QImage QGLPixmapData::fillImage(const QColor &color) const +{ + QImage img; + if (pixelType() == BitmapType) { + img = QImage(w, h, QImage::Format_MonoLSB); + + img.setColorCount(2); + img.setColor(0, QColor(Qt::color0).rgba()); + img.setColor(1, QColor(Qt::color1).rgba()); + + if (color == Qt::color1) + img.fill(1); + else + img.fill(0); + } else { + img = QImage(w, h, + m_hasAlpha + ? QImage::Format_ARGB32_Premultiplied + : QImage::Format_RGB32); + img.fill(PREMUL(color.rgba())); + } + return img; +} + +extern QImage qt_gl_read_texture(const QSize &size, bool alpha_format, bool include_alpha); + +QImage QGLPixmapData::toImage() const +{ + if (!isValid()) + return QImage(); + + if (m_renderFbo) { + copyBackFromRenderFbo(true); + } else if (!m_source.isNull()) { + QImageData *data = const_cast(m_source).data_ptr(); + if (data->paintEngine && data->paintEngine->isActive() + && data->paintEngine->paintDevice() == &m_source) + { + return m_source.copy(); + } + return m_source; + } else if (m_dirty || m_hasFillColor) { + return fillImage(m_fillColor); + } else { + ensureCreated(); + } + + QGLShareContextScope ctx(qt_gl_share_widget()->context()); + glBindTexture(GL_TEXTURE_2D, m_texture.id); + return qt_gl_read_texture(QSize(w, h), true, true); +} + +struct TextureBuffer +{ + QGLFramebufferObject *fbo; + QGL2PaintEngineEx *engine; +}; + +Q_GLOBAL_STATIC(QGLFramebufferObjectPool, _qgl_fbo_pool) +QGLFramebufferObjectPool* qgl_fbo_pool() +{ + return _qgl_fbo_pool(); +} + +void QGLPixmapData::copyBackFromRenderFbo(bool keepCurrentFboBound) const +{ + if (!isValid()) + return; + + m_hasFillColor = false; + + const QGLContext *share_ctx = qt_gl_share_widget()->context(); + QGLShareContextScope ctx(share_ctx); + + ensureCreated(); + + if (!ctx->d_ptr->fbo) + glGenFramebuffers(1, &ctx->d_ptr->fbo); + + glBindFramebuffer(GL_DRAW_FRAMEBUFFER_EXT, ctx->d_ptr->fbo); + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, + GL_TEXTURE_2D, m_texture.id, 0); + + const int x0 = 0; + const int x1 = w; + const int y0 = 0; + const int y1 = h; + + if (!m_renderFbo->isBound()) + glBindFramebuffer(GL_READ_FRAMEBUFFER_EXT, m_renderFbo->handle()); + + glDisable(GL_SCISSOR_TEST); + + glBlitFramebufferEXT(x0, y0, x1, y1, + x0, y0, x1, y1, + GL_COLOR_BUFFER_BIT, + GL_NEAREST); + + if (keepCurrentFboBound) { + glBindFramebuffer(GL_FRAMEBUFFER_EXT, ctx->d_ptr->current_fbo); + } else { + glBindFramebuffer(GL_DRAW_FRAMEBUFFER_EXT, m_renderFbo->handle()); + ctx->d_ptr->current_fbo = m_renderFbo->handle(); + } +} + +bool QGLPixmapData::useFramebufferObjects() const +{ +#ifdef Q_OS_SYMBIAN + // We don't want to use FBOs on Symbian + return false; +#else + return QGLFramebufferObject::hasOpenGLFramebufferObjects() + && QGLFramebufferObject::hasOpenGLFramebufferBlit() + && qt_gl_preferGL2Engine() + && (w * h > 32*32); // avoid overhead of FBOs for small pixmaps +#endif +} + +QPaintEngine* QGLPixmapData::paintEngine() const +{ + if (!isValid()) + return 0; + + if (m_renderFbo) + return m_engine; + + if (useFramebufferObjects()) { + extern QGLWidget* qt_gl_share_widget(); + + if (!QGLContext::currentContext()) + qt_gl_share_widget()->makeCurrent(); + QGLShareContextScope ctx(qt_gl_share_widget()->context()); + + QGLFramebufferObjectFormat format; + format.setAttachment(QGLFramebufferObject::CombinedDepthStencil); + format.setSamples(4); + format.setInternalTextureFormat(GLenum(m_hasAlpha ? GL_RGBA : GL_RGB)); + + m_renderFbo = qgl_fbo_pool()->acquire(size(), format); + + if (m_renderFbo) { + if (!m_engine) + m_engine = new QGL2PaintEngineEx; + return m_engine; + } + + qWarning() << "Failed to create pixmap texture buffer of size " << size() << ", falling back to raster paint engine"; + } + + // If the application wants to paint into the QPixmap, we first + // force it to QImage format and then paint into that. + // This is simpler than juggling multiple GL contexts. + const_cast(this)->forceToImage(); + + if (m_hasFillColor) { + m_source.fill(PREMUL(m_fillColor.rgba())); + m_hasFillColor = false; + } + return m_source.paintEngine(); +} + +extern QRgb qt_gl_convertToGLFormat(QRgb src_pixel, GLenum texture_format); + +// If copyBack is true, bind will copy the contents of the render +// FBO to the texture (which is not bound to the texture, as it's +// a multisample FBO). +GLuint QGLPixmapData::bind(bool copyBack) const +{ + if (m_renderFbo && copyBack) { + copyBackFromRenderFbo(true); + } else { + ensureCreated(); + } + + GLuint id = m_texture.id; + glBindTexture(GL_TEXTURE_2D, id); + + if (m_hasFillColor) { + if (!useFramebufferObjects()) { + m_source = QImage(w, h, QImage::Format_ARGB32_Premultiplied); + m_source.fill(PREMUL(m_fillColor.rgba())); + } + + m_hasFillColor = false; + + GLenum format = qt_gl_preferredTextureFormat(); + QImage tx(w, h, QImage::Format_ARGB32_Premultiplied); + tx.fill(qt_gl_convertToGLFormat(m_fillColor.rgba(), format)); + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, w, h, format, GL_UNSIGNED_BYTE, tx.bits()); + } + + return id; +} + +QGLTexture* QGLPixmapData::texture() const +{ + return &m_texture; +} + +void QGLPixmapData::detachTextureFromPool() +{ + if (inTexturePool) { + QGLTexturePool::instance()->detachTexture(this); + inTexturePool = false; + } +} + +void QGLPixmapData::hibernate() +{ + // If the texture was imported (e.g, from an SgImage under Symbian), + // then we cannot copy it back to main memory for storage. + if (m_texture.id && m_source.isNull()) + return; + + forceToImage(); + destroyTexture(); +} + +void QGLPixmapData::reclaimTexture() +{ + if (!inTexturePool) + return; + forceToImage(); + destroyTexture(); +} + +Q_GUI_EXPORT int qt_defaultDpiX(); +Q_GUI_EXPORT int qt_defaultDpiY(); + +int QGLPixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const +{ + if (w == 0) + return 0; + + switch (metric) { + case QPaintDevice::PdmWidth: + return w; + case QPaintDevice::PdmHeight: + return h; + case QPaintDevice::PdmNumColors: + return 0; + case QPaintDevice::PdmDepth: + return d; + case QPaintDevice::PdmWidthMM: + return qRound(w * 25.4 / qt_defaultDpiX()); + case QPaintDevice::PdmHeightMM: + return qRound(h * 25.4 / qt_defaultDpiY()); + case QPaintDevice::PdmDpiX: + case QPaintDevice::PdmPhysicalDpiX: + return qt_defaultDpiX(); + case QPaintDevice::PdmDpiY: + case QPaintDevice::PdmPhysicalDpiY: + return qt_defaultDpiY(); + default: + qWarning("QGLPixmapData::metric(): Invalid metric"); + return 0; + } +} + +// Force the pixmap data to be backed by some valid data. +void QGLPixmapData::forceToImage() +{ + if (!isValid()) + return; + + if (m_source.isNull()) + m_source = QImage(w, h, QImage::Format_ARGB32_Premultiplied); + + m_dirty = true; +} + +QGLPaintDevice *QGLPixmapData::glDevice() const +{ + return &m_glDevice; +} + +QT_END_NAMESPACE diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index 0bffbda..340f75a 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -181,16 +181,14 @@ QGLGraphicsSystem::QGLGraphicsSystem(bool useX11GL) // // QGLWindowSurface // - class QGLGlobalShareWidget { public: - QGLGlobalShareWidget() : widget(0), initializing(false) {} + QGLGlobalShareWidget() : firstPixmap(0), widgetRefCount(0), widget(0), initializing(false) {} QGLWidget *shareWidget() { if (!initializing && !widget && !cleanedUp) { initializing = true; - widget = new QGLWidget(QGLFormat(QGL::SingleBuffer | QGL::NoDepthBuffer | QGL::NoStencilBuffer)); widget->resize(1, 1); @@ -226,6 +224,9 @@ public: static bool cleanedUp; + QGLPixmapData *firstPixmap; + int widgetRefCount; + private: QGLWidget *widget; bool initializing; @@ -256,6 +257,41 @@ void qt_destroy_gl_share_widget() _qt_gl_share_widget()->destroy(); } +void qt_gl_register_pixmap(QGLPixmapData *pd) +{ + QGLGlobalShareWidget *shared = _qt_gl_share_widget(); + pd->next = shared->firstPixmap; + pd->prev = 0; + if (shared->firstPixmap) + shared->firstPixmap->prev = pd; + shared->firstPixmap = pd; +} + +void qt_gl_unregister_pixmap(QGLPixmapData *pd) +{ + if (pd->next) + pd->next->prev = pd->prev; + if (pd->prev) { + pd->prev->next = pd->next; + } else { + QGLGlobalShareWidget *shared = _qt_gl_share_widget(); + if (shared) + shared->firstPixmap = pd->next; + } +} + +void qt_gl_hibernate_pixmaps() +{ + QGLGlobalShareWidget *shared = _qt_gl_share_widget(); + + // Scan all QGLPixmapData objects in the system and hibernate them. + QGLPixmapData *pd = shared->firstPixmap; + while (pd != 0) { + pd->hibernate(); + pd = pd->next; + } +} + struct QGLWindowSurfacePrivate { QGLFramebufferObject *fbo; @@ -347,6 +383,27 @@ QGLWindowSurface::~QGLWindowSurface() delete d_ptr->pb; delete d_ptr->fbo; delete d_ptr; + + if (QGLGlobalShareWidget::cleanedUp) + return; + + --(_qt_gl_share_widget()->widgetRefCount); + +#ifdef QGL_USE_TEXTURE_POOL + if (_qt_gl_share_widget()->widgetRefCount <= 0) { + // All of the widget window surfaces have been destroyed + // but we still have GL pixmaps active. Ask them to hibernate + // to free up GPU resources until a widget is shown again. + // This may eventually cause the EGLContext to be destroyed + // because nothing in the system needs a context, which will + // free up even more GPU resources. + qt_gl_hibernate_pixmaps(); + + // Destroy the context if necessary. + if (!qt_gl_share_widget()->context()->isSharing()) + qt_destroy_gl_share_widget(); + } +#endif } void QGLWindowSurface::deleted(QObject *object) @@ -394,6 +451,9 @@ void QGLWindowSurface::hijackWindow(QWidget *widget) ctx->create(qt_gl_share_widget()->context()); + if (widget != qt_gl_share_widget()) + ++(_qt_gl_share_widget()->widgetRefCount); + #ifndef QT_NO_EGL static bool checkedForNOKSwapRegion = false; static bool haveNOKSwapRegion = false; @@ -405,9 +465,9 @@ void QGLWindowSurface::hijackWindow(QWidget *widget) if (haveNOKSwapRegion) qDebug() << "Found EGL_NOK_swap_region2 extension. Using partial updates."; } - - if (ctx->d_func()->eglContext->configAttrib(EGL_SWAP_BEHAVIOR) != EGL_BUFFER_PRESERVED && - ! haveNOKSwapRegion) + bool swapBehaviourPreserved = (ctx->d_func()->eglContext->configAttrib(EGL_SWAP_BEHAVIOR) + || (ctx->d_func()->eglContext->configAttrib(EGL_SURFACE_TYPE)&EGL_SWAP_BEHAVIOR_PRESERVED_BIT)); + if (!swapBehaviourPreserved && !haveNOKSwapRegion) setPartialUpdateSupport(false); // Force full-screen updates else setPartialUpdateSupport(true); @@ -421,7 +481,9 @@ void QGLWindowSurface::hijackWindow(QWidget *widget) voidPtr = &widgetPrivate->extraData()->glContext; d_ptr->contexts << ctxPtr; +#ifndef Q_OS_SYMBIAN qDebug() << "hijackWindow() context created for" << widget << d_ptr->contexts.size(); +#endif } QGLContext *QGLWindowSurface::context() const @@ -908,8 +970,9 @@ void QGLWindowSurface::updateGeometry() { if (d_ptr->destructive_swap_buffers) initializeOffscreenTexture(surfSize); #endif - - qDebug() << "QGLWindowSurface: Using plain widget as window surface" << this;; +#ifndef Q_OS_SYMBIAN + qDebug() << "QGLWindowSurface: Using plain widget as window surface" << this; +#endif d_ptr->ctx = ctx; d_ptr->ctx->d_ptr->internal_context = true; } diff --git a/src/s60installs/bwins/QtOpenGLu.def b/src/s60installs/bwins/QtOpenGLu.def index 3eb1512..87d1b56 100644 --- a/src/s60installs/bwins/QtOpenGLu.def +++ b/src/s60installs/bwins/QtOpenGLu.def @@ -711,4 +711,11 @@ EXPORTS ?createPixmapForImage@QGLPixmapData@@AAEXAAVQImage@@V?$QFlags@W4ImageConversionFlag@Qt@@@@_N@Z @ 710 NONAME ; void QGLPixmapData::createPixmapForImage(class QImage &, class QFlags, bool) ?fromImageReader@QGLPixmapData@@UAEXPAVQImageReader@@V?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 711 NONAME ; void QGLPixmapData::fromImageReader(class QImageReader *, class QFlags) ?setContext@QGLTextureGlyphCache@@QAEXPAVQGLContext@@@Z @ 712 NONAME ; void QGLTextureGlyphCache::setContext(class QGLContext *) + ?hibernate@QGLPixmapData@@QAEXXZ @ 713 NONAME ; void QGLPixmapData::hibernate(void) + ?detachTextureFromPool@QGLPixmapData@@QAEXXZ @ 714 NONAME ; void QGLPixmapData::detachTextureFromPool(void) + ?reclaimTexture@QGLPixmapData@@QAEXXZ @ 715 NONAME ; void QGLPixmapData::reclaimTexture(void) + ?destroyTexture@QGLPixmapData@@QAEXXZ @ 716 NONAME ; void QGLPixmapData::destroyTexture(void) + ?releaseCachedResources@QGLGraphicsSystem@@UAEXXZ @ 717 NONAME ; void QGLGraphicsSystem::releaseCachedResources(void) + ?serialNumber@QGLTextureGlyphCache@@QBEHXZ @ 718 NONAME ; int QGLTextureGlyphCache::serialNumber(void) const + ?forceToImage@QGLPixmapData@@QAEXXZ @ 719 NONAME ; void QGLPixmapData::forceToImage(void) diff --git a/src/s60installs/eabi/QtOpenGLu.def b/src/s60installs/eabi/QtOpenGLu.def index 33d40fd..4c5dca9 100644 --- a/src/s60installs/eabi/QtOpenGLu.def +++ b/src/s60installs/eabi/QtOpenGLu.def @@ -714,4 +714,10 @@ EXPORTS _ZN16QGLWindowSurface12swapBehaviorE @ 713 NONAME DATA 4 _ZN20QGLTextureGlyphCache10setContextEP10QGLContext @ 714 NONAME _ZN20QGLTextureGlyphCache5clearEv @ 715 NONAME + _ZN13QGLPixmapData12forceToImageEv @ 716 NONAME + _ZN13QGLPixmapData14destroyTextureEv @ 717 NONAME + _ZN13QGLPixmapData14reclaimTextureEv @ 718 NONAME + _ZN13QGLPixmapData21detachTextureFromPoolEv @ 719 NONAME + _ZN13QGLPixmapData9hibernateEv @ 720 NONAME + _ZN17QGLGraphicsSystem22releaseCachedResourcesEv @ 721 NONAME -- cgit v0.12 From 2bd6dec008693b48430b8f29c564fa8a24158370 Mon Sep 17 00:00:00 2001 From: Jani Hautakangas Date: Tue, 15 Mar 2011 19:31:38 +0200 Subject: Hot fix for compilation without QGL_USE_TEXTURE_POOL Reviewed-by: TRUSTME --- src/opengl/qwindowsurface_gl.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index 340f75a..11a9eb0 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -257,6 +257,7 @@ void qt_destroy_gl_share_widget() _qt_gl_share_widget()->destroy(); } +#ifdef QGL_USE_TEXTURE_POOL void qt_gl_register_pixmap(QGLPixmapData *pd) { QGLGlobalShareWidget *shared = _qt_gl_share_widget(); @@ -291,6 +292,7 @@ void qt_gl_hibernate_pixmaps() pd = pd->next; } } +#endif struct QGLWindowSurfacePrivate { -- cgit v0.12 From 733578aec105c2d2bdb3f6ef57ee3195ebb79696 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Wed, 16 Mar 2011 12:08:42 +1000 Subject: Disabled non-QDeclarativeItems in Flickable break flicking Allow Flickable to steal grab from items that are disabled. Change-Id: I71e401cd78695ecb2c3d47abde1c3d13e722d848 Task-number: QT-4677 Reviewed-by: Michael Brasser --- .../graphicsitems/qdeclarativeflickable.cpp | 8 +++-- .../qdeclarativeflickable/data/disabledcontent.qml | 8 +++++ .../tst_qdeclarativeflickable.cpp | 39 ++++++++++++++++++++++ 3 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativeflickable/data/disabledcontent.qml diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp index d64c347..f854262 100644 --- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp +++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp @@ -1430,8 +1430,10 @@ bool QDeclarativeFlickable::sendMouseEvent(QGraphicsSceneMouseEvent *event) QGraphicsScene *s = scene(); QDeclarativeItem *grabber = s ? qobject_cast(s->mouseGrabberItem()) : 0; + QGraphicsItem *grabberItem = s ? s->mouseGrabberItem() : 0; + bool disabledItem = grabberItem && !grabberItem->isEnabled(); bool stealThisEvent = d->stealMouse; - if ((stealThisEvent || myRect.contains(event->scenePos().toPoint())) && (!grabber || !grabber->keepMouseGrab())) { + if ((stealThisEvent || myRect.contains(event->scenePos().toPoint())) && (!grabber || !grabber->keepMouseGrab() || disabledItem)) { mouseEvent.setAccepted(false); for (int i = 0x1; i <= 0x10; i <<= 1) { if (event->buttons() & i) { @@ -1478,12 +1480,12 @@ bool QDeclarativeFlickable::sendMouseEvent(QGraphicsSceneMouseEvent *event) break; } grabber = qobject_cast(s->mouseGrabberItem()); - if (grabber && stealThisEvent && !grabber->keepMouseGrab() && grabber != this) { + if ((grabber && stealThisEvent && !grabber->keepMouseGrab() && grabber != this) || disabledItem) { d->clearDelayedPress(); grabMouse(); } - return stealThisEvent || d->delayedPressEvent; + return stealThisEvent || d->delayedPressEvent || disabledItem; } else if (d->lastPosTime.isValid()) { d->lastPosTime.invalidate(); } diff --git a/tests/auto/declarative/qdeclarativeflickable/data/disabledcontent.qml b/tests/auto/declarative/qdeclarativeflickable/data/disabledcontent.qml new file mode 100644 index 0000000..dcbb20b --- /dev/null +++ b/tests/auto/declarative/qdeclarativeflickable/data/disabledcontent.qml @@ -0,0 +1,8 @@ +import QtQuick 1.0 + +Flickable { + width: 100; height: 100 + contentWidth: 200; contentHeight: 300 + + QGraphicsWidget { width: 200; height: 300; enabled: false } +} diff --git a/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp b/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp index 65ba316..d499edf 100644 --- a/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp +++ b/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp @@ -69,6 +69,7 @@ private slots: void maximumFlickVelocity(); void flickDeceleration(); void pressDelay(); + void disabledContent(); void nestedPressDelay(); void flickableDirection(); void qgraphicswidget(); @@ -247,6 +248,44 @@ void tst_qdeclarativeflickable::pressDelay() QCOMPARE(spy.count(),1); } +// QT-4677 +void tst_qdeclarativeflickable::disabledContent() +{ + QDeclarativeView *canvas = new QDeclarativeView; + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/disabledcontent.qml")); + canvas->show(); + canvas->setFocus(); + QVERIFY(canvas->rootObject() != 0); + + QDeclarativeFlickable *flickable = qobject_cast(canvas->rootObject()); + QVERIFY(flickable != 0); + + QVERIFY(flickable->contentX() == 0); + QVERIFY(flickable->contentY() == 0); + + QTest::mousePress(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(50, 50))); + { + QMouseEvent mv(QEvent::MouseMove, canvas->mapFromScene(QPoint(70,70)), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier); + QApplication::sendEvent(canvas->viewport(), &mv); + } + { + QMouseEvent mv(QEvent::MouseMove, canvas->mapFromScene(QPoint(90,90)), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier); + QApplication::sendEvent(canvas->viewport(), &mv); + } + { + QMouseEvent mv(QEvent::MouseMove, canvas->mapFromScene(QPoint(100,100)), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier); + QApplication::sendEvent(canvas->viewport(), &mv); + } + + QVERIFY(flickable->contentX() < 0); + QVERIFY(flickable->contentY() < 0); + + QTest::mouseRelease(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(90, 90))); + + delete canvas; +} + + // QTBUG-17361 void tst_qdeclarativeflickable::nestedPressDelay() { -- cgit v0.12 From 7c99a5273bea6f071efcd8441bedc1b768cc1d7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Thu, 10 Mar 2011 12:03:45 +0100 Subject: Added automatic graphicssystem switching on meego when app is minimized. When all top-level widgets are minimized we switch to raster to reduce GPU memory consumption. We switch back to graphicssystem meego when at least one top-level widget is shown normally again. The switching only applies when the runtime graphicssystem is being used. The switching only applies when the runtime graphicssystem is being used. Task-number: QTBUG-18013 Reviewed-by: Armin Berres --- src/gui/painting/qgraphicssystem_runtime.cpp | 5 +- .../graphicssystems/meego/qmeegographicssystem.cpp | 170 +++++++++++++++++++-- .../graphicssystems/meego/qmeegographicssystem.h | 18 ++- .../qmeegographicssystemhelper.cpp | 44 +----- .../qmeegographicssystemhelper.h | 17 ++- tools/qmeegographicssystemhelper/qmeegoruntime.cpp | 49 +++++- tools/qmeegographicssystemhelper/qmeegoruntime.h | 4 + 7 files changed, 249 insertions(+), 58 deletions(-) diff --git a/src/gui/painting/qgraphicssystem_runtime.cpp b/src/gui/painting/qgraphicssystem_runtime.cpp index 5841d40..33652ee 100644 --- a/src/gui/painting/qgraphicssystem_runtime.cpp +++ b/src/gui/painting/qgraphicssystem_runtime.cpp @@ -394,7 +394,10 @@ void QRuntimeGraphicsSystem::setGraphicsSystem(const QString &name) if(m_windowSurfaceDestroyPolicy == DestroyAfterFirstFlush) proxy->m_pendingWindowSurface.reset(proxy->m_windowSurface.take()); - proxy->m_windowSurface.reset(m_graphicsSystem->createWindowSurface(widget)); + QWindowSurface *newWindowSurface = m_graphicsSystem->createWindowSurface(widget); + newWindowSurface->setGeometry(proxy->geometry()); + + proxy->m_windowSurface.reset(newWindowSurface); qt_widget_private(widget)->invalidateBuffer(widget->rect()); } diff --git a/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp index 13eab7f..18a0944 100644 --- a/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp +++ b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp @@ -63,6 +63,8 @@ bool QMeeGoGraphicsSystem::surfaceWasCreated = false; QHash QMeeGoGraphicsSystem::liveTexturePixmaps; +QList QMeeGoGraphicsSystem::switchCallbacks; + QMeeGoGraphicsSystem::QMeeGoGraphicsSystem() { qDebug("Using the meego graphics system"); @@ -74,6 +76,78 @@ QMeeGoGraphicsSystem::~QMeeGoGraphicsSystem() qt_destroy_gl_share_widget(); } +class QMeeGoGraphicsSystemSwitchHandler : public QObject +{ + Q_OBJECT +public: + QMeeGoGraphicsSystemSwitchHandler(); + + void addWidget(QWidget *widget); + bool eventFilter(QObject *, QEvent *); + +private slots: + void removeWidget(QObject *object); + +private: + int visibleWidgets() const; + +private: + QList m_widgets; +}; + +QMeeGoGraphicsSystemSwitchHandler::QMeeGoGraphicsSystemSwitchHandler() +{ +} + +void QMeeGoGraphicsSystemSwitchHandler::addWidget(QWidget *widget) +{ + if (!m_widgets.contains(widget)) { + widget->installEventFilter(this); + connect(widget, SIGNAL(destroyed(QObject *)), this, SLOT(removeWidget(QObject *))); + m_widgets << widget; + } +} + +void QMeeGoGraphicsSystemSwitchHandler::removeWidget(QObject *object) +{ + m_widgets.removeOne(static_cast(object)); +} + +int QMeeGoGraphicsSystemSwitchHandler::visibleWidgets() const +{ + int count = 0; + for (int i = 0; i < m_widgets.size(); ++i) + count += m_widgets.at(i)->isVisible() && !(m_widgets.at(i)->windowState() & Qt::WindowMinimized); + return count; +} + +bool QMeeGoGraphicsSystemSwitchHandler::eventFilter(QObject *object, QEvent *event) +{ + if (event->type() == QEvent::WindowStateChange) { + QWindowStateChangeEvent *change = static_cast(event); + QWidget *widget = static_cast(object); + + Qt::WindowStates current = widget->windowState(); + Qt::WindowStates old = change->oldState(); + + // did minimized flag change? + if ((current ^ old) & Qt::WindowMinimized) { + if (current & Qt::WindowMinimized) { + if (visibleWidgets() == 0) + QMeeGoGraphicsSystem::switchToRaster(); + } else { + if (visibleWidgets() == 1) + QMeeGoGraphicsSystem::switchToMeeGo(); + } + } + } + + // resume processing of event + return false; +} + +Q_GLOBAL_STATIC(QMeeGoGraphicsSystemSwitchHandler, switch_handler) + QWindowSurface* QMeeGoGraphicsSystem::createWindowSurface(QWidget *widget) const { QGLWidget *shareWidget = qt_gl_share_widget(); @@ -83,6 +157,9 @@ QWindowSurface* QMeeGoGraphicsSystem::createWindowSurface(QWidget *widget) const QGLShareContextScope ctx(shareWidget->context()); + if (QApplicationPrivate::instance()->graphics_system_name == QLatin1String("runtime")) + switch_handler()->addWidget(widget); + QMeeGoGraphicsSystem::surfaceWasCreated = true; QWindowSurface *surface = new QGLWindowSurface(widget); return surface; @@ -203,18 +280,7 @@ QPixmapData *QMeeGoGraphicsSystem::pixmapDataWithGLTexture(int w, int h) bool QMeeGoGraphicsSystem::meeGoRunning() { - if (! QApplicationPrivate::instance()) { - qWarning("Application not running just yet... hard to know what system running!"); - return false; - } - - QString name = QApplicationPrivate::instance()->graphics_system_name; - if (name == "runtime") { - QRuntimeGraphicsSystem *rsystem = (QRuntimeGraphicsSystem *) QApplicationPrivate::instance()->graphics_system; - name = rsystem->graphicsSystemName(); - } - - return (name == "meego"); + return runningGraphicsSystemName() == "meego"; } QPixmapData* QMeeGoGraphicsSystem::pixmapDataWithNewLiveTexture(int w, int h, QImage::Format format) @@ -259,6 +325,69 @@ void QMeeGoGraphicsSystem::destroyFenceSync(void *fenceSync) QMeeGoExtensions::eglDestroySyncKHR(QEgl::display(), fenceSync); } +QString QMeeGoGraphicsSystem::runningGraphicsSystemName() +{ + if (!QApplicationPrivate::instance()) { + qWarning("Querying graphics system but application not running yet!"); + return QString(); + } + + QString name = QApplicationPrivate::instance()->graphics_system_name; + if (name == QLatin1String("runtime")) { + QRuntimeGraphicsSystem *rsystem = (QRuntimeGraphicsSystem *) QApplicationPrivate::instance()->graphics_system; + name = rsystem->graphicsSystemName(); + } + + return name; +} + +void QMeeGoGraphicsSystem::switchToMeeGo() +{ + if (meeGoRunning()) + return; + + if (QApplicationPrivate::instance()->graphics_system_name != QLatin1String("runtime")) + qWarning("Can't switch to meego - switching only supported with 'runtime' graphics system."); + else { + triggerSwitchCallbacks(0, "meego"); + + QApplication *app = static_cast(QCoreApplication::instance()); + app->setGraphicsSystem(QLatin1String("meego")); + + triggerSwitchCallbacks(1, "meego"); + } +} + +void QMeeGoGraphicsSystem::switchToRaster() +{ + if (runningGraphicsSystemName() == QLatin1String("raster")) + return; + + if (QApplicationPrivate::instance()->graphics_system_name != QLatin1String("runtime")) + qWarning("Can't switch to raster - switching only supported with 'runtime' graphics system."); + else { + triggerSwitchCallbacks(0, "raster"); + + QApplication *app = static_cast(QCoreApplication::instance()); + app->setGraphicsSystem(QLatin1String("raster")); + + QMeeGoLivePixmapData::invalidateSurfaces(); + + triggerSwitchCallbacks(1, "raster"); + } +} + +void QMeeGoGraphicsSystem::registerSwitchCallback(QMeeGoSwitchCallback callback) +{ + switchCallbacks << callback; +} + +void QMeeGoGraphicsSystem::triggerSwitchCallbacks(int type, const char *name) +{ + for (int i = 0; i < switchCallbacks.size(); ++i) + switchCallbacks.at(i)(type, name); +} + /* C API */ int qt_meego_image_to_egl_shared_image(const QImage &image) @@ -340,3 +469,20 @@ void qt_meego_invalidate_live_surfaces(void) { return QMeeGoLivePixmapData::invalidateSurfaces(); } + +void qt_meego_switch_to_raster(void) +{ + QMeeGoGraphicsSystem::switchToRaster(); +} + +void qt_meego_switch_to_meego(void) +{ + QMeeGoGraphicsSystem::switchToMeeGo(); +} + +void qt_meego_register_switch_callback(QMeeGoSwitchCallback callback) +{ + QMeeGoGraphicsSystem::registerSwitchCallback(callback); +} + +#include "qmeegographicssystem.moc" diff --git a/src/plugins/graphicssystems/meego/qmeegographicssystem.h b/src/plugins/graphicssystems/meego/qmeegographicssystem.h index 27a4e7a..ecc85b2 100644 --- a/src/plugins/graphicssystems/meego/qmeegographicssystem.h +++ b/src/plugins/graphicssystems/meego/qmeegographicssystem.h @@ -47,6 +47,8 @@ #include #include +extern "C" typedef void (*QMeeGoSwitchCallback)(int type, const char *name); + class QMeeGoGraphicsSystem : public QGraphicsSystem { public: @@ -76,13 +78,22 @@ public: static void* createFenceSync(); static void destroyFenceSync(void* fenceSync); + static void switchToRaster(); + static void switchToMeeGo(); + static QString runningGraphicsSystemName(); + + static void registerSwitchCallback(QMeeGoSwitchCallback callback); + private: static bool meeGoRunning(); static EGLSurface getSurfaceForLiveTexturePixmap(QPixmap *pixmap); static void destroySurfaceForLiveTexturePixmap(QPixmapData* pmd); + static void triggerSwitchCallbacks(int type, const char *name); static bool surfaceWasCreated; - static QHash liveTexturePixmaps; + static QHash liveTexturePixmaps; + static QList switchCallbacks; + }; /* C api */ @@ -95,7 +106,7 @@ extern "C" { Q_DECL_EXPORT bool qt_meego_destroy_egl_shared_image(Qt::HANDLE handle); Q_DECL_EXPORT void qt_meego_set_surface_fixed_size(int width, int height); Q_DECL_EXPORT void qt_meego_set_surface_scaling(int x, int y, int width, int height); - Q_DECL_EXPORT void qt_meego_set_translucent(bool translucent); + Q_DECL_EXPORT void qt_meego_set_translucent(bool translucent); Q_DECL_EXPORT QPixmapData* qt_meego_pixmapdata_with_new_live_texture(int w, int h, QImage::Format format); Q_DECL_EXPORT QPixmapData* qt_meego_pixmapdata_from_live_texture_handle(Qt::HANDLE handle); Q_DECL_EXPORT QImage* qt_meego_live_texture_lock(QPixmap *pixmap, void *fenceSync); @@ -104,6 +115,9 @@ extern "C" { Q_DECL_EXPORT void* qt_meego_create_fence_sync(void); Q_DECL_EXPORT void qt_meego_destroy_fence_sync(void* fs); Q_DECL_EXPORT void qt_meego_invalidate_live_surfaces(void); + Q_DECL_EXPORT void qt_meego_switch_to_raster(void); + Q_DECL_EXPORT void qt_meego_switch_to_meego(void); + Q_DECL_EXPORT void qt_meego_register_switch_callback(QMeeGoSwitchCallback callback); } #endif diff --git a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp index ac32995..3f39bda 100644 --- a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp +++ b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp @@ -47,7 +47,6 @@ #include #include #include "qmeegoruntime.h" -#include "qmeegoswitchevent.h" QString QMeeGoGraphicsSystemHelper::runningGraphicsSystemName() { @@ -77,46 +76,12 @@ bool QMeeGoGraphicsSystemHelper::isRunningRuntime() void QMeeGoGraphicsSystemHelper::switchToMeeGo() { - if (isRunningMeeGo()) - return; - - if (QApplicationPrivate::instance()->graphics_system_name != QLatin1String("runtime")) - qWarning("Can't switch to meego - switching only supported with 'runtime' graphics system."); - else { - QMeeGoSwitchEvent willSwitchEvent(QLatin1String("meego"), QMeeGoSwitchEvent::WillSwitch); - foreach (QWidget *widget, QApplication::topLevelWidgets()) - QCoreApplication::sendEvent(widget, &willSwitchEvent); - - QApplication *app = static_cast(QCoreApplication::instance()); - app->setGraphicsSystem(QLatin1String("meego")); - - QMeeGoSwitchEvent didSwitchEvent(QLatin1String("meego"), QMeeGoSwitchEvent::DidSwitch); - foreach (QWidget *widget, QApplication::topLevelWidgets()) - QCoreApplication::sendEvent(widget, &didSwitchEvent); - } + QMeeGoRuntime::switchToMeeGo(); } void QMeeGoGraphicsSystemHelper::switchToRaster() { - if (runningGraphicsSystemName() == QLatin1String("raster")) - return; - - if (QApplicationPrivate::instance()->graphics_system_name != QLatin1String("runtime")) - qWarning("Can't switch to raster - switching only supported with 'runtime' graphics system."); - else { - QMeeGoSwitchEvent willSwitchEvent(QLatin1String("raster"), QMeeGoSwitchEvent::WillSwitch); - foreach (QWidget *widget, QApplication::topLevelWidgets()) - QCoreApplication::sendEvent(widget, &willSwitchEvent); - - QApplication *app = static_cast(QCoreApplication::instance()); - app->setGraphicsSystem(QLatin1String("raster")); - - QMeeGoRuntime::invalidateLiveSurfaces(); - - QMeeGoSwitchEvent didSwitchEvent(QLatin1String("raster"), QMeeGoSwitchEvent::DidSwitch); - foreach (QWidget *widget, QApplication::topLevelWidgets()) - QCoreApplication::sendEvent(widget, &didSwitchEvent); - } + QMeeGoRuntime::switchToRaster(); } Qt::HANDLE QMeeGoGraphicsSystemHelper::imageToEGLSharedImage(const QImage &image) @@ -170,3 +135,8 @@ void QMeeGoGraphicsSystemHelper::setSwapBehavior(SwapMode mode) else if (mode == KillSwap) QGLWindowSurface::swapBehavior = QGLWindowSurface::KillSwap; } + +void QMeeGoGraphicsSystemHelper::enableSwitchEvents() +{ + QMeeGoRuntime::enableSwitchEvents(); +} diff --git a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h index 5a3b57e..9e50652 100644 --- a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h +++ b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h @@ -97,14 +97,21 @@ public: */ static bool isRunningRuntime(); + //! Enables the sending of QMeeGoSwitchEvent's when the graphicssystem switches. + /*! + An application that wishes to start receive QMeegoSwitchEvents must call this function. + */ + static void enableSwitchEvents(); + //! Switches to meego graphics system. /*! When running with the 'runtime' graphics system, sets the currently active system to 'meego'. The window surface and all the resources are automatically migrated to OpenGL. Will fail if the active graphics system is not 'runtime'. Calling this function will emit QMeeGoSwitchEvent to the top level widgets. - Two events will be emitted for each switch -- one before the switch (QMeeGoSwitchEvent::WillSwitch) - and one after the switch (QMeeGoSwitchEvent::DidSwitch). + If switch events are enabled, two events will be emitted for each switch -- + one before the switch (QMeeGoSwitchEvent::WillSwitch) and one after the + switch (QMeeGoSwitchEvent::DidSwitch). */ static void switchToMeeGo(); @@ -114,9 +121,9 @@ public: system to 'raster'. The window surface and the graphics resources (including the EGL shared image resources) are automatically migrated back to the CPU. All OpenGL resources (surface, context, cache, font cache) are automaticall anihilated. - Calling this function will emit QMeeGoSwitchEvent to the top level widgets. - Two events will be emitted for each switch -- one before the switch (QMeeGoSwitchEvent::WillSwitch) - and one after the switch (QMeeGoSwitchEvent::DidSwitch). + Calling this function will emit QMeeGoSwitchEvent to the top level widgets. If switch + events are enabled, two events will be emitted for each switch -- one before the + switch (QMeeGoSwitchEvent::WillSwitch) and one after the switch (QMeeGoSwitchEvent::DidSwitch). */ static void switchToRaster(); diff --git a/tools/qmeegographicssystemhelper/qmeegoruntime.cpp b/tools/qmeegographicssystemhelper/qmeegoruntime.cpp index 7c81d51..15f9cdf 100644 --- a/tools/qmeegographicssystemhelper/qmeegoruntime.cpp +++ b/tools/qmeegographicssystemhelper/qmeegoruntime.cpp @@ -41,6 +41,11 @@ #include "qmeegoruntime.h" +#include "qmeegoswitchevent.h" + +#include +#include + #include #include #include @@ -49,6 +54,7 @@ #define ENSURE_INITIALIZED {if (!initialized) initialize();} bool QMeeGoRuntime::initialized = false; +bool QMeeGoRuntime::switchEventsEnabled = false; typedef int (*QMeeGoImageToEglSharedImageFunc) (const QImage&); typedef QPixmapData* (*QMeeGoPixmapDataFromEglSharedImageFunc) (Qt::HANDLE handle, const QImage&); @@ -66,6 +72,9 @@ typedef Qt::HANDLE (*QMeeGoLiveTextureGetHandleFunc) (QPixmap*); typedef void* (*QMeeGoCreateFenceSyncFunc) (void); typedef void (*QMeeGoDestroyFenceSyncFunc) (void *fs); typedef void (*QMeeGoInvalidateLiveSurfacesFunc) (void); +typedef void (*QMeeGoSwitchToRasterFunc) (void); +typedef void (*QMeeGoSwitchToMeeGoFunc) (void); +typedef void (*QMeeGoRegisterSwitchCallbackFunc) (void (*callback)(int type, const char *name)); static QMeeGoImageToEglSharedImageFunc qt_meego_image_to_egl_shared_image = NULL; static QMeeGoPixmapDataFromEglSharedImageFunc qt_meego_pixmapdata_from_egl_shared_image = NULL; @@ -83,6 +92,16 @@ static QMeeGoLiveTextureGetHandleFunc qt_meego_live_texture_get_handle = NULL; static QMeeGoCreateFenceSyncFunc qt_meego_create_fence_sync = NULL; static QMeeGoDestroyFenceSyncFunc qt_meego_destroy_fence_sync = NULL; static QMeeGoInvalidateLiveSurfacesFunc qt_meego_invalidate_live_surfaces = NULL; +static QMeeGoSwitchToRasterFunc qt_meego_switch_to_raster = NULL; +static QMeeGoSwitchToMeeGoFunc qt_meego_switch_to_meego = NULL; +static QMeeGoRegisterSwitchCallbackFunc qt_meego_register_switch_callback = NULL; + +extern "C" void handleSwitch(int type, const char *name) +{ + QMeeGoSwitchEvent switchEvent((QLatin1String(name)), QMeeGoSwitchEvent::State(type)); + foreach (QWidget *widget, QApplication::topLevelWidgets()) + QCoreApplication::sendEvent(widget, &switchEvent); +} void QMeeGoRuntime::initialize() { @@ -112,13 +131,17 @@ void QMeeGoRuntime::initialize() qt_meego_create_fence_sync = (QMeeGoCreateFenceSyncFunc) library.resolve("qt_meego_create_fence_sync"); qt_meego_destroy_fence_sync = (QMeeGoDestroyFenceSyncFunc) library.resolve("qt_meego_destroy_fence_sync"); qt_meego_invalidate_live_surfaces = (QMeeGoInvalidateLiveSurfacesFunc) library.resolve("qt_meego_invalidate_live_surfaces"); + qt_meego_switch_to_raster = (QMeeGoSwitchToRasterFunc) library.resolve("qt_meego_switch_to_raster"); + qt_meego_switch_to_meego = (QMeeGoSwitchToMeeGoFunc) library.resolve("qt_meego_switch_to_meego"); + qt_meego_register_switch_callback = (QMeeGoRegisterSwitchCallbackFunc) library.resolve("qt_meego_register_switch_callback"); if (qt_meego_image_to_egl_shared_image && qt_meego_pixmapdata_from_egl_shared_image && qt_meego_pixmapdata_with_gl_texture && qt_meego_destroy_egl_shared_image && qt_meego_update_egl_shared_image_pixmap && qt_meego_set_surface_fixed_size && qt_meego_set_surface_scaling && qt_meego_set_translucent && qt_meego_pixmapdata_with_new_live_texture && qt_meego_pixmapdata_from_live_texture_handle && qt_meego_live_texture_lock && qt_meego_live_texture_release && qt_meego_live_texture_get_handle && - qt_meego_create_fence_sync && qt_meego_destroy_fence_sync && qt_meego_invalidate_live_surfaces) + qt_meego_create_fence_sync && qt_meego_destroy_fence_sync && qt_meego_invalidate_live_surfaces && + qt_meego_switch_to_raster && qt_meego_switch_to_meego && qt_meego_register_switch_callback) { qDebug("Successfully resolved MeeGo graphics system: %s %s\n", qPrintable(libraryPrivate->fileName), qPrintable(libraryPrivate->fullVersion)); } else { @@ -242,3 +265,27 @@ void QMeeGoRuntime::invalidateLiveSurfaces() Q_ASSERT(qt_meego_invalidate_live_surfaces); qt_meego_invalidate_live_surfaces(); } + +void QMeeGoRuntime::switchToRaster() +{ + ENSURE_INITIALIZED; + Q_ASSERT(qt_meego_switch_to_raster); + qt_meego_switch_to_raster(); +} + +void QMeeGoRuntime::switchToMeeGo() +{ + ENSURE_INITIALIZED; + Q_ASSERT(qt_meego_switch_to_meego); + qt_meego_switch_to_meego(); +} + +void QMeeGoRuntime::enableSwitchEvents() +{ + ENSURE_INITIALIZED; + if (!switchEventsEnabled) { + Q_ASSERT(qt_meego_register_switch_callback); + qt_meego_register_switch_callback(handleSwitch); + switchEventsEnabled = true; + } +} diff --git a/tools/qmeegographicssystemhelper/qmeegoruntime.h b/tools/qmeegographicssystemhelper/qmeegoruntime.h index b91efae..6279b4c 100644 --- a/tools/qmeegographicssystemhelper/qmeegoruntime.h +++ b/tools/qmeegographicssystemhelper/qmeegoruntime.h @@ -63,7 +63,11 @@ public: static void* createFenceSync(); static void destroyFenceSync(void *fs); static void invalidateLiveSurfaces(); + static void switchToRaster(); + static void switchToMeeGo(); + static void enableSwitchEvents(); private: static bool initialized; + static bool switchEventsEnabled; }; -- cgit v0.12 From 60bec281fe0a82556c07db3f8e13587d47b8449e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tapani=20P=C3=A4lli?= Date: Wed, 16 Mar 2011 08:25:45 +0100 Subject: QMeeGoLivePixmapData : when creating QImage, use constructor with pitch. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As the data may be aligned/padded by the X driver. Fixes: NB#231246 : Incorrect stride used when QMeeGoLivePixmap width not multiple of eight Merge-request: 1115 Reviewed-by: Samuel Rødal --- src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp b/src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp index 2a2a098..0970b89 100644 --- a/src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp +++ b/src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp @@ -219,7 +219,7 @@ QImage* QMeeGoLivePixmapData::lock(EGLSyncKHR fenceSync) return &lockedImage; } - lockedImage = QImage((uchar *) data, width(), height(), format); + lockedImage = QImage((uchar *) data, width(), height(), pitch, format); return &lockedImage; } -- cgit v0.12 From 76f84c7a91751b4ddc5d9c4c59b6e5158d7ea998 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Wed, 16 Mar 2011 13:06:08 +0100 Subject: QTcpSocket: Fix for disconnect in Unbuffered mode. We need to set the state properly after we have been disconnected. Also fix the HTTP layer, it needs to handle the disconnect when reading. Reviewed-by: Peter Hartmann --- src/network/access/qhttpnetworkconnectionchannel.cpp | 13 ++++++++----- src/network/socket/qabstractsocket.cpp | 2 ++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index 2076d72..c735801 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -905,15 +905,18 @@ bool QHttpNetworkConnectionChannel::isSocketReading() const //private slots void QHttpNetworkConnectionChannel::_q_readyRead() { - // We got a readyRead but no bytes are available.. - // This happens for the Unbuffered QTcpSocket - // Also check if socket is in ConnectedState since - // this function may also be invoked via the event loop. if (socket->state() == QAbstractSocket::ConnectedState && socket->bytesAvailable() == 0) { + // We got a readyRead but no bytes are available.. + // This happens for the Unbuffered QTcpSocket + // Also check if socket is in ConnectedState since + // this function may also be invoked via the event loop. char c; qint64 ret = socket->peek(&c, 1); if (ret < 0) { - socket->disconnectFromHost(); + _q_error(socket->error()); + // We still need to handle the reply so it emits its signals etc. + if (reply) + _q_receiveReply(); return; } } diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp index 2a942cc..c7c2e82 100644 --- a/src/network/socket/qabstractsocket.cpp +++ b/src/network/socket/qabstractsocket.cpp @@ -2210,6 +2210,8 @@ qint64 QAbstractSocket::readData(char *data, qint64 maxSize) } else if (readBytes < 0) { d->socketError = d->socketEngine->error(); setErrorString(d->socketEngine->errorString()); + d->resetSocketLayer(); + d->state = QAbstractSocket::UnconnectedState; } else if (!d->socketEngine->isReadNotificationEnabled()) { // Only do this when there was no error d->socketEngine->setReadNotificationEnabled(true); -- cgit v0.12 From eac5573dff483dfefb2deb028850c3ab6f01c555 Mon Sep 17 00:00:00 2001 From: Eckhart Koppen Date: Wed, 16 Mar 2011 14:39:14 +0200 Subject: Temporarily removed Harmattan specific patches Patches are not applying properly yet, so no use to release them. Reviewed-by: TrustMe --- .../harmattan/patches/default_widget_size.diff | 13 - .../harmattan/patches/glshadercache.diff | 1003 -------------------- config.profiles/harmattan/patches/icu.diff | 732 -------------- .../patches/no_read_pro_from_quilt_dir.diff | 13 - .../patches/pinch_gesture_sent_twice.diff | 56 -- .../harmattan/patches/qgltexturecache.diff | 23 - config.profiles/harmattan/patches/qwidget_x11.diff | 39 - .../harmattan/patches/qwidget_x11_mapping.diff | 17 - .../patches/runtime-window-geometry-revert.diff | 12 - config.profiles/harmattan/patches/series | 14 - .../harmattan/patches/signon_authenticator4.diff | 230 ----- config.profiles/harmattan/patches/temppath.diff | 28 - .../harmattan/patches/tst_qprogressbar.diff | 19 - .../harmattan/patches/tst_qscrollbar.diff | 12 - .../harmattan/patches/tst_qvariant.diff | 21 - 15 files changed, 2232 deletions(-) delete mode 100644 config.profiles/harmattan/patches/default_widget_size.diff delete mode 100644 config.profiles/harmattan/patches/glshadercache.diff delete mode 100644 config.profiles/harmattan/patches/icu.diff delete mode 100644 config.profiles/harmattan/patches/no_read_pro_from_quilt_dir.diff delete mode 100644 config.profiles/harmattan/patches/pinch_gesture_sent_twice.diff delete mode 100644 config.profiles/harmattan/patches/qgltexturecache.diff delete mode 100644 config.profiles/harmattan/patches/qwidget_x11.diff delete mode 100644 config.profiles/harmattan/patches/qwidget_x11_mapping.diff delete mode 100644 config.profiles/harmattan/patches/runtime-window-geometry-revert.diff delete mode 100644 config.profiles/harmattan/patches/series delete mode 100644 config.profiles/harmattan/patches/signon_authenticator4.diff delete mode 100644 config.profiles/harmattan/patches/temppath.diff delete mode 100644 config.profiles/harmattan/patches/tst_qprogressbar.diff delete mode 100644 config.profiles/harmattan/patches/tst_qscrollbar.diff delete mode 100644 config.profiles/harmattan/patches/tst_qvariant.diff diff --git a/config.profiles/harmattan/patches/default_widget_size.diff b/config.profiles/harmattan/patches/default_widget_size.diff deleted file mode 100644 index 1f72881..0000000 --- a/config.profiles/harmattan/patches/default_widget_size.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: qt-maemo-qtp/src/gui/kernel/qwidget.cpp -=================================================================== ---- qt-maemo-qtp.orig/src/gui/kernel/qwidget.cpp -+++ qt-maemo-qtp/src/gui/kernel/qwidget.cpp -@@ -1326,7 +1326,7 @@ - data.crect = parentWidget ? QRect(0,0,100,30) : QRect(0,0,360,640); - } - #else -- data.crect = parentWidget ? QRect(0,0,100,30) : QRect(0,0,640,480); -+ data.crect = parentWidget ? QRect(0,0,100,30) : QRect(0,0,854,480); - #endif - - focus_next = focus_prev = q; diff --git a/config.profiles/harmattan/patches/glshadercache.diff b/config.profiles/harmattan/patches/glshadercache.diff deleted file mode 100644 index 2c6ad9a..0000000 --- a/config.profiles/harmattan/patches/glshadercache.diff +++ /dev/null @@ -1,1003 +0,0 @@ -Index: qt-maemo-qtp/src/opengl/gl2paintengineex/qglengineshadermanager.cpp -=================================================================== ---- qt-maemo-qtp.orig/src/opengl/gl2paintengineex/qglengineshadermanager.cpp -+++ qt-maemo-qtp/src/opengl/gl2paintengineex/qglengineshadermanager.cpp -@@ -42,12 +42,12 @@ - #include "qglengineshadermanager_p.h" - #include "qglengineshadersource_p.h" - #include "qpaintengineex_opengl2_p.h" -+#include "qglshadercache_p.h" - - #if defined(QT_DEBUG) - #include - #endif - -- - QT_BEGIN_NAMESPACE - - static void qt_shared_shaders_free(void *data) -@@ -165,62 +165,89 @@ - - QGLShader* fragShader; - QGLShader* vertexShader; -- QByteArray source; -+ QByteArray vertexSource; -+ QByteArray fragSource; - - // Compile up the simple shader: -- source.clear(); -- source.append(qShaderSnippets[MainVertexShader]); -- source.append(qShaderSnippets[PositionOnlyVertexShader]); -- vertexShader = new QGLShader(QGLShader::Vertex, context, this); -- if (!vertexShader->compileSourceCode(source)) -- qWarning("Vertex shader for simpleShaderProg (MainVertexShader & PositionOnlyVertexShader) failed to compile"); -- -- source.clear(); -- source.append(qShaderSnippets[MainFragmentShader]); -- source.append(qShaderSnippets[ShockingPinkSrcFragmentShader]); -- fragShader = new QGLShader(QGLShader::Fragment, context, this); -- if (!fragShader->compileSourceCode(source)) -- qWarning("Fragment shader for simpleShaderProg (MainFragmentShader & ShockingPinkSrcFragmentShader) failed to compile"); -+ vertexSource.append(qShaderSnippets[MainVertexShader]); -+ vertexSource.append(qShaderSnippets[PositionOnlyVertexShader]); -+ -+ fragSource.append(qShaderSnippets[MainFragmentShader]); -+ fragSource.append(qShaderSnippets[ShockingPinkSrcFragmentShader]); - - simpleShaderProg = new QGLShaderProgram(context, this); -- simpleShaderProg->addShader(vertexShader); -- simpleShaderProg->addShader(fragShader); -- simpleShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); -- simpleShaderProg->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR); -- simpleShaderProg->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR); -- simpleShaderProg->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR); -+ -+ CachedShader simpleShaderCache(fragSource, vertexSource); -+ -+ bool inCache = simpleShaderCache.load(simpleShaderProg, context); -+ -+ if (!inCache) { -+ vertexShader = new QGLShader(QGLShader::Vertex, context, this); -+ if (!vertexShader->compileSourceCode(vertexSource)) -+ qWarning("Vertex shader for simpleShaderProg (MainVertexShader & PositionOnlyVertexShader) failed to compile"); -+ -+ fragShader = new QGLShader(QGLShader::Fragment, context, this); -+ if (!fragShader->compileSourceCode(fragSource)) -+ qWarning("Fragment shader for simpleShaderProg (MainFragmentShader & ShockingPinkSrcFragmentShader) failed to compile"); -+ -+ simpleShaderProg->addShader(vertexShader); -+ simpleShaderProg->addShader(fragShader); -+ -+ simpleShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); -+ simpleShaderProg->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR); -+ simpleShaderProg->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR); -+ simpleShaderProg->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR); -+ } -+ - simpleShaderProg->link(); -- if (!simpleShaderProg->isLinked()) { -+ -+ if (simpleShaderProg->isLinked()) { -+ if (!inCache) -+ simpleShaderCache.store(simpleShaderProg, context); -+ } else { - qCritical() << "Errors linking simple shader:" - << simpleShaderProg->log(); - } - - // Compile the blit shader: -- source.clear(); -- source.append(qShaderSnippets[MainWithTexCoordsVertexShader]); -- source.append(qShaderSnippets[UntransformedPositionVertexShader]); -- vertexShader = new QGLShader(QGLShader::Vertex, context, this); -- if (!vertexShader->compileSourceCode(source)) -- qWarning("Vertex shader for blitShaderProg (MainWithTexCoordsVertexShader & UntransformedPositionVertexShader) failed to compile"); -- -- source.clear(); -- source.append(qShaderSnippets[MainFragmentShader]); -- source.append(qShaderSnippets[ImageSrcFragmentShader]); -- fragShader = new QGLShader(QGLShader::Fragment, context, this); -- if (!fragShader->compileSourceCode(source)) -- qWarning("Fragment shader for blitShaderProg (MainFragmentShader & ImageSrcFragmentShader) failed to compile"); -+ vertexSource.clear(); -+ vertexSource.append(qShaderSnippets[MainWithTexCoordsVertexShader]); -+ vertexSource.append(qShaderSnippets[UntransformedPositionVertexShader]); -+ -+ fragSource.clear(); -+ fragSource.append(qShaderSnippets[MainFragmentShader]); -+ fragSource.append(qShaderSnippets[ImageSrcFragmentShader]); - - blitShaderProg = new QGLShaderProgram(context, this); -- blitShaderProg->addShader(vertexShader); -- blitShaderProg->addShader(fragShader); -- blitShaderProg->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR); -- blitShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); -+ -+ CachedShader blitShaderCache(fragSource, vertexSource); -+ -+ inCache = blitShaderCache.load(blitShaderProg, context); -+ -+ if (!inCache) { -+ vertexShader = new QGLShader(QGLShader::Vertex, context, this); -+ if (!vertexShader->compileSourceCode(vertexSource)) -+ qWarning("Vertex shader for blitShaderProg (MainWithTexCoordsVertexShader & UntransformedPositionVertexShader) failed to compile"); -+ -+ fragShader = new QGLShader(QGLShader::Fragment, context, this); -+ if (!fragShader->compileSourceCode(fragSource)) -+ qWarning("Fragment shader for blitShaderProg (MainFragmentShader & ImageSrcFragmentShader) failed to compile"); -+ -+ blitShaderProg->addShader(vertexShader); -+ blitShaderProg->addShader(fragShader); -+ -+ blitShaderProg->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR); -+ blitShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); -+ } -+ - blitShaderProg->link(); -- if (!blitShaderProg->isLinked()) { -+ if (blitShaderProg->isLinked()) { -+ if (!inCache) -+ blitShaderCache.store(blitShaderProg, context); -+ } else { - qCritical() << "Errors linking blit shader:" -- << simpleShaderProg->log(); -+ << blitShaderProg->log(); - } -- - } - - QGLEngineSharedShaders::~QGLEngineSharedShaders() -@@ -262,99 +289,108 @@ - } - } - -- QGLShader *vertexShader = 0; -- QGLShader *fragShader = 0; -- QGLEngineShaderProg *newProg = 0; -- bool success = false; -+ QScopedPointer newProg; - - do { -- QByteArray source; -+ QByteArray fragSource; - // Insert the custom stage before the srcPixel shader to work around an ATI driver bug - // where you cannot forward declare a function that takes a sampler as argument. - if (prog.srcPixelFragShader == CustomImageSrcFragmentShader) -- source.append(prog.customStageSource); -- source.append(qShaderSnippets[prog.mainFragShader]); -- source.append(qShaderSnippets[prog.srcPixelFragShader]); -+ fragSource.append(prog.customStageSource); -+ fragSource.append(qShaderSnippets[prog.mainFragShader]); -+ fragSource.append(qShaderSnippets[prog.srcPixelFragShader]); - if (prog.compositionFragShader) -- source.append(qShaderSnippets[prog.compositionFragShader]); -+ fragSource.append(qShaderSnippets[prog.compositionFragShader]); - if (prog.maskFragShader) -- source.append(qShaderSnippets[prog.maskFragShader]); -- fragShader = new QGLShader(QGLShader::Fragment, ctxGuard.context(), this); -- QByteArray description; -+ fragSource.append(qShaderSnippets[prog.maskFragShader]); -+ -+ QByteArray vertexSource; -+ vertexSource.append(qShaderSnippets[prog.mainVertexShader]); -+ vertexSource.append(qShaderSnippets[prog.positionVertexShader]); -+ -+ QScopedPointer shaderProgram(new QGLShaderProgram(ctxGuard.context(), this)); -+ -+ CachedShader shaderCache(fragSource, vertexSource); -+ bool inCache = shaderCache.load(shaderProgram.data(), ctxGuard.context()); -+ -+ if (!inCache) { -+ -+ QScopedPointer fragShader(new QGLShader(QGLShader::Fragment, ctxGuard.context(), this)); -+ QByteArray description; - #if defined(QT_DEBUG) -- // Name the shader for easier debugging -- description.append("Fragment shader: main="); -- description.append(snippetNameStr(prog.mainFragShader)); -- description.append(", srcPixel="); -- description.append(snippetNameStr(prog.srcPixelFragShader)); -- if (prog.compositionFragShader) { -- description.append(", composition="); -- description.append(snippetNameStr(prog.compositionFragShader)); -- } -- if (prog.maskFragShader) { -- description.append(", mask="); -- description.append(snippetNameStr(prog.maskFragShader)); -- } -- fragShader->setObjectName(QString::fromLatin1(description)); -+ // Name the shader for easier debugging -+ description.append("Fragment shader: main="); -+ description.append(snippetNameStr(prog.mainFragShader)); -+ description.append(", srcPixel="); -+ description.append(snippetNameStr(prog.srcPixelFragShader)); -+ if (prog.compositionFragShader) { -+ description.append(", composition="); -+ description.append(snippetNameStr(prog.compositionFragShader)); -+ } -+ if (prog.maskFragShader) { -+ description.append(", mask="); -+ description.append(snippetNameStr(prog.maskFragShader)); -+ } -+ fragShader->setObjectName(QString::fromLatin1(description)); - #endif -- if (!fragShader->compileSourceCode(source)) { -- qWarning() << "Warning:" << description << "failed to compile!"; -- break; -- } -+ if (!fragShader->compileSourceCode(fragSource)) { -+ qWarning() << "Warning:" << description << "failed to compile!"; -+ break; -+ } - -- source.clear(); -- source.append(qShaderSnippets[prog.mainVertexShader]); -- source.append(qShaderSnippets[prog.positionVertexShader]); -- vertexShader = new QGLShader(QGLShader::Vertex, ctxGuard.context(), this); -+ QScopedPointer vertexShader(new QGLShader(QGLShader::Vertex, ctxGuard.context(), this)); - #if defined(QT_DEBUG) -- // Name the shader for easier debugging -- description.clear(); -- description.append("Vertex shader: main="); -- description.append(snippetNameStr(prog.mainVertexShader)); -- description.append(", position="); -- description.append(snippetNameStr(prog.positionVertexShader)); -- vertexShader->setObjectName(QString::fromLatin1(description)); -+ // Name the shader for easier debugging -+ description.clear(); -+ description.append("Vertex shader: main="); -+ description.append(snippetNameStr(prog.mainVertexShader)); -+ description.append(", position="); -+ description.append(snippetNameStr(prog.positionVertexShader)); -+ vertexShader->setObjectName(QString::fromLatin1(description)); - #endif -- if (!vertexShader->compileSourceCode(source)) { -- qWarning() << "Warning:" << description << "failed to compile!"; -- break; -- } -+ if (!vertexShader->compileSourceCode(vertexSource)) { -+ qWarning() << "Warning:" << description << "failed to compile!"; -+ break; -+ } - -- newProg = new QGLEngineShaderProg(prog); -+ shaderProgram->addShader(vertexShader.take()); -+ shaderProgram->addShader(fragShader.take()); - -- // If the shader program's not found in the cache, create it now. -- newProg->program = new QGLShaderProgram(ctxGuard.context(), this); -- newProg->program->addShader(vertexShader); -- newProg->program->addShader(fragShader); -- -- // We have to bind the vertex attribute names before the program is linked: -- newProg->program->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); -- if (newProg->useTextureCoords) -- newProg->program->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR); -- if (newProg->useOpacityAttribute) -- newProg->program->bindAttributeLocation("opacityArray", QT_OPACITY_ATTR); -- if (newProg->usePmvMatrixAttribute) { -- newProg->program->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR); -- newProg->program->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR); -- newProg->program->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR); -+ // We have to bind the vertex attribute names before the program is linked: -+ shaderProgram->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR); -+ if (prog.useTextureCoords) -+ shaderProgram->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR); -+ if (prog.useOpacityAttribute) -+ shaderProgram->bindAttributeLocation("opacityArray", QT_OPACITY_ATTR); -+ if (prog.usePmvMatrixAttribute) { -+ shaderProgram->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR); -+ shaderProgram->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR); -+ shaderProgram->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR); -+ } - } - -+ newProg.reset(new QGLEngineShaderProg(prog)); -+ newProg->program = shaderProgram.take(); -+ - newProg->program->link(); -- if (!newProg->program->isLinked()) { -+ if (newProg->program->isLinked()) { -+ if (!inCache) -+ shaderCache.store(newProg->program, ctxGuard.context()); -+ } else { - QLatin1String none("none"); - QLatin1String br("\n"); - QString error; -- error = QLatin1String("Shader program failed to link,") -+ error = QLatin1String("Shader program failed to link,"); - #if defined(QT_DEBUG) -- + br -- + QLatin1String(" Shaders Used:") + br -- + QLatin1String(" ") + vertexShader->objectName() + QLatin1String(": ") + br -- + QLatin1String(vertexShader->sourceCode()) + br -- + QLatin1String(" ") + fragShader->objectName() + QLatin1String(": ") + br -- + QLatin1String(fragShader->sourceCode()) + br -+ error += QLatin1String("\n Shaders Used:\n"); -+ for (int i = 0; i < newProg->program->shaders().count(); ++i) { -+ QGLShader *shader = newProg->program->shaders().at(i); -+ error += QLatin1String(" ") + shader->objectName() + QLatin1String(": \n") -+ + QLatin1String(shader->sourceCode()) + br; -+ } - #endif -- + QLatin1String(" Error Log:\n") -- + QLatin1String(" ") + newProg->program->log(); -+ error += QLatin1String(" Error Log:\n") -+ + QLatin1String(" ") + newProg->program->log(); - qWarning() << error; - break; - } -@@ -376,26 +412,10 @@ - } - } - -- cachedPrograms.insert(0, newProg); -- -- success = true; -+ cachedPrograms.insert(0, newProg.data()); - } while (false); - -- // Clean up everything if we weren't successful -- if (!success) { -- if (newProg) { -- delete newProg; // Also deletes the QGLShaderProgram which in turn deletes the QGLShaders -- newProg = 0; -- } -- else { -- if (vertexShader) -- delete vertexShader; -- if (fragShader) -- delete fragShader; -- } -- } -- -- return newProg; -+ return newProg.take(); - } - - void QGLEngineSharedShaders::cleanupCustomStage(QGLCustomShaderStage* stage) -Index: qt-maemo-qtp/src/opengl/gl2paintengineex/qglshadercache_meego_p.h -=================================================================== ---- /dev/null -+++ qt-maemo-qtp/src/opengl/gl2paintengineex/qglshadercache_meego_p.h -@@ -0,0 +1,457 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -+** All rights reserved. -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** This file is part of the QtOpenGL module of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** No Commercial Usage -+** This file contains pre-release code and may not be distributed. -+** You may use this file in accordance with the terms and conditions -+** contained in the Technology Preview License Agreement accompanying -+** this package. -+** -+** GNU Lesser General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** In addition, as a special exception, Nokia gives you certain additional -+** rights. These rights are described in the Nokia Qt LGPL Exception -+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -+** -+** If you have questions regarding the use of this file, please contact -+** Nokia at qt-info@nokia.com. -+** -+** -+** -+** -+** -+** -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+ -+// -+// W A R N I N G -+// ------------- -+// -+// This file is not part of the Qt API. It exists purely as an -+// implementation detail. This header file may change from version to -+// version without notice, or even be removed. -+// -+// We mean it. -+// -+ -+#ifndef QGLSHADERCACHE_MEEGO_P_H -+#define QGLSHADERCACHE_MEEGO_P_H -+ -+#include -+ -+#if defined(QT_MEEGO_EXPERIMENTAL_SHADERCACHE) && defined(QT_OPENGL_ES_2) -+ -+#include -+#include -+#include -+ -+#ifndef QT_BOOTSTRAPPED -+# include -+#endif -+#if defined(QT_DEBUG) || defined(QT_MEEGO_EXPERIMENTAL_SHADERCACHE_TRACE) -+# include -+#endif -+ -+QT_BEGIN_HEADER -+ -+/* -+ This cache stores internal Qt shader programs in shared memory. -+ -+ This header file is ugly on purpose and can only be included once. It is only to be used -+ for the internal shader cache, not as a generic cache for anyone's shaders. -+ -+ The cache stores either ShaderCacheMaxEntries shader programs or ShaderCacheDataSize kilobytes -+ of shader programs, whatever limit is reached first. -+ -+ The layout of the cache is as outlined in the CachedShaders struct. After some -+ integers, an array of headers is reserved, then comes the space for the actual binaries. -+ -+ Shader Programs are identified by the md5sum of their frag and vertex shader source code. -+ -+ Shader Programs are never removed. The cache never shrinks or re-shuffles. This is done -+ on purpose to ensure minimum amount of locking, no alignment problems and very few write -+ operations. -+ -+ Note: Locking the shader cache could be expensive, because the entire system might hang. -+ That's why the cache is immutable to minimize the time we need to keep it locked. -+ -+ Why is it Meego specific? -+ -+ First, the size is chosen so that it fits to generic meego usage. Second, on Meego, there's -+ always at least one Qt application active (the launcher), so the cache will never be destroyed. -+ Only when the last Qt app exits, the cache dies, which should only be when someone kills the -+ X11 server. And last but not least it was only tested with Meego's SGX driver. -+ -+ There's a small tool in src/opengl/util/meego that dumps the contents of the cache. -+ */ -+ -+// anonymous namespace, prevent exporting of the private symbols -+namespace -+{ -+ -+struct CachedShaderHeader -+{ -+ /* the index in the data[] member of CachedShaders */ -+ int index; -+ /* the size of the binary shader */ -+ GLsizei size; -+ /* the format of the binary shader */ -+ GLenum format; -+ /* the md5sum of the frag+vertex shaders */ -+ char md5Sum[16]; -+}; -+ -+enum -+{ -+ /* The maximum amount of shader programs the cache can hold */ -+ ShaderCacheMaxEntries = 20 -+}; -+ -+typedef CachedShaderHeader CachedShaderHeaders[ShaderCacheMaxEntries]; -+ -+enum -+{ -+ // ShaderCacheDataSize is 20k minus the other data members of CachedShaders -+ ShaderCacheDataSize = 1024 * ShaderCacheMaxEntries - sizeof(CachedShaderHeaders) - 2 * sizeof(int) -+}; -+ -+struct CachedShaders -+{ -+ /* How much space is still available in the cache */ -+ inline int availableSize() const { return ShaderCacheDataSize - dataSize; } -+ -+ /* The current amount of cached shaders */ -+ int shaderCount; -+ -+ /* The current amount (in bytes) of cached data */ -+ int dataSize; -+ -+ /* The headers describing the shaders */ -+ CachedShaderHeaders headers; -+ -+ /* The actual binary data of the shader programs */ -+ char data[ShaderCacheDataSize]; -+}; -+ -+//#define QT_DEBUG_SHADER_CACHE -+#ifdef QT_DEBUG_SHADER_CACHE -+static QDebug shaderCacheDebug() -+{ -+ return QDebug(QtDebugMsg); -+} -+#else -+static inline QNoDebug shaderCacheDebug() { return QNoDebug(); } -+#endif -+ -+class ShaderCacheSharedMemory -+{ -+public: -+ ShaderCacheSharedMemory() -+ : shm(QLatin1String("qt_gles2_shadercache_" QT_VERSION_STR)) -+ { -+ // we need a system semaphore here, since cache creation and initialization must be atomic -+ QSystemSemaphore attachSemaphore(QLatin1String("qt_gles2_shadercache_mutex_" QT_VERSION_STR), 1); -+ -+ if (!attachSemaphore.acquire()) { -+ shaderCacheDebug() << "Unable to require shader cache semaphore:" << attachSemaphore.errorString(); -+ return; -+ } -+ -+ if (shm.attach()) { -+ // success! -+ shaderCacheDebug() << "Attached to shader cache"; -+ } else { -+ -+ // no cache exists - create and initialize it -+ if (shm.create(sizeof(CachedShaders))) { -+ shaderCacheDebug() << "Created new shader cache"; -+ initializeCache(); -+ } else { -+ shaderCacheDebug() << "Unable to create shader cache:" << shm.errorString(); -+ } -+ } -+ -+ attachSemaphore.release(); -+ } -+ -+ inline bool isAttached() const { return shm.isAttached(); } -+ -+ inline bool lock() { return shm.lock(); } -+ inline bool unlock() { return shm.unlock(); } -+ inline void *data() { return shm.data(); } -+ inline QString errorString() { return shm.errorString(); } -+ -+ ~ShaderCacheSharedMemory() -+ { -+ if (!shm.detach()) -+ shaderCacheDebug() << "Unable to detach shader cache" << shm.errorString(); -+ } -+ -+private: -+ void initializeCache() -+ { -+ // no need to lock the shared memory since we're already protected by the -+ // attach system semaphore. -+ -+ void *data = shm.data(); -+ Q_ASSERT(data); -+ -+ memset(data, 0, sizeof(CachedShaders)); -+ } -+ -+ QSharedMemory shm; -+}; -+ -+class ShaderCacheLocker -+{ -+public: -+ inline ShaderCacheLocker(ShaderCacheSharedMemory *cache) -+ : shm(cache->lock() ? cache : (ShaderCacheSharedMemory *)0) -+ { -+ if (!shm) -+ shaderCacheDebug() << "Unable to lock shader cache" << cache->errorString(); -+ } -+ -+ inline bool isLocked() const { return shm; } -+ -+ inline ~ShaderCacheLocker() -+ { -+ if (!shm) -+ return; -+ if (!shm->unlock()) -+ shaderCacheDebug() << "Unable to unlock shader cache" << shm->errorString(); -+ } -+ -+private: -+ ShaderCacheSharedMemory *shm; -+}; -+ -+#ifdef QT_BOOTSTRAPPED -+} // end namespace -+#else -+ -+static void traceCacheOverflow(const char *message) -+{ -+#if defined(QT_DEBUG) || defined (QT_MEEGO_EXPERIMENTAL_SHADERCACHE_TRACE) -+ openlog(qPrintable(QCoreApplication::applicationName()), LOG_PID | LOG_ODELAY, LOG_USER); -+ syslog(LOG_DEBUG, message); -+ closelog(); -+#endif -+ shaderCacheDebug() << message; -+} -+ -+Q_GLOBAL_STATIC(ShaderCacheSharedMemory, shaderCacheSharedMemory) -+ -+/* -+ Finds the index of the shader program identified by md5Sum in the cache. -+ Note: Does NOT lock the cache for reading, the cache must already be locked! -+ -+ Returns -1 when no shader was found. -+ */ -+static int qt_cache_index_unlocked(const QByteArray &md5Sum, CachedShaders *cache) -+{ -+ for (int i = 0; i < cache->shaderCount; ++i) { -+ if (qstrncmp(md5Sum.constData(), cache->headers[i].md5Sum, 16) == 0) { -+ return i; -+ } -+ } -+ return -1; -+} -+ -+/* Returns the index of the shader identified by md5Sum */ -+static int qt_cache_index(const QByteArray &md5Sum) -+{ -+ ShaderCacheSharedMemory *shm = shaderCacheSharedMemory(); -+ if (!shm || !shm->isAttached()) -+ return false; -+ -+ Q_ASSERT(md5Sum.length() == 16); -+ -+ ShaderCacheLocker locker(shm); -+ if (!locker.isLocked()) -+ return false; -+ -+ void *data = shm->data(); -+ Q_ASSERT(data); -+ -+ CachedShaders *cache = reinterpret_cast(data); -+ -+ return qt_cache_index_unlocked(md5Sum, cache); -+} -+ -+/* Loads the cached shader at index \a shaderIndex into \a program -+ * Note: Since the cache is immutable, this operation doesn't lock the shared memory. -+ */ -+static bool qt_cached_shader(QGLShaderProgram *program, const QGLContext *ctx, int shaderIndex) -+{ -+ Q_ASSERT(shaderIndex >= 0 && shaderIndex <= ShaderCacheMaxEntries); -+ Q_ASSERT(program); -+ -+ ShaderCacheSharedMemory *shm = shaderCacheSharedMemory(); -+ if (!shm || !shm->isAttached()) -+ return false; -+ -+ void *data = shm->data(); -+ Q_ASSERT(data); -+ -+ CachedShaders *cache = reinterpret_cast(data); -+ -+ shaderCacheDebug() << "fetching cached shader at index" << shaderIndex -+ << "dataIndex" << cache->headers[shaderIndex].index -+ << "size" << cache->headers[shaderIndex].size -+ << "format" << cache->headers[shaderIndex].format; -+ -+ // call program->programId first, since that resolves the glProgramBinaryOES symbol -+ GLuint programId = program->programId(); -+ glProgramBinaryOES(programId, cache->headers[shaderIndex].format, -+ cache->data + cache->headers[shaderIndex].index, -+ cache->headers[shaderIndex].size); -+ -+ return true; -+} -+ -+/* Stores the shader program in the cache. Returns false if there's an error with the cache, or -+ if the cache is too small to hold the shader. */ -+static bool qt_cache_shader(const QGLShaderProgram *shader, const QGLContext *ctx, const QByteArray &md5Sum) -+{ -+ ShaderCacheSharedMemory *shm = shaderCacheSharedMemory(); -+ if (!shm || !shm->isAttached()) -+ return false; -+ -+ void *data = shm->data(); -+ Q_ASSERT(data); -+ -+ CachedShaders *cache = reinterpret_cast(data); -+ -+ ShaderCacheLocker locker(shm); -+ if (!locker.isLocked()) -+ return false; -+ -+ int cacheIdx = cache->shaderCount; -+ if (cacheIdx >= ShaderCacheMaxEntries) { -+ traceCacheOverflow("Qt OpenGL shader cache index overflow!"); -+ return false; -+ } -+ -+ // now that we have the lock on the shared memory, make sure no one -+ // inserted the shader already while we were unlocked -+ if (qt_cache_index_unlocked(md5Sum, cache) != -1) -+ return true; // already cached -+ -+ shaderCacheDebug() << "Caching shader at index" << cacheIdx; -+ -+ GLint binaryLength = 0; -+ glGetProgramiv(shader->programId(), GL_PROGRAM_BINARY_LENGTH_OES, &binaryLength); -+ -+ if (!binaryLength) { -+ shaderCacheDebug() << "Unable to determine binary shader size!"; -+ return false; -+ } -+ -+ if (binaryLength > cache->availableSize()) { -+ traceCacheOverflow("Qt OpenGL shader cache data overflow!"); -+ return false; -+ } -+ -+ GLsizei size = 0; -+ GLenum format = 0; -+ glGetProgramBinaryOES(shader->programId(), binaryLength, &size, &format, -+ cache->data + cache->dataSize); -+ -+ if (!size) { -+ shaderCacheDebug() << "Unable to get binary shader!"; -+ return false; -+ } -+ -+ cache->headers[cacheIdx].index = cache->dataSize; -+ cache->dataSize += binaryLength; -+ ++cache->shaderCount; -+ cache->headers[cacheIdx].size = binaryLength; -+ cache->headers[cacheIdx].format = format; -+ -+ memcpy(cache->headers[cacheIdx].md5Sum, md5Sum.constData(), 16); -+ -+ shaderCacheDebug() << "cached shader size" << size -+ << "format" << format -+ << "binarySize" << binaryLength -+ << "cache index" << cacheIdx -+ << "data index" << cache->headers[cacheIdx].index; -+ -+ return true; -+} -+ -+} // namespace -+ -+QT_BEGIN_NAMESPACE -+ -+QT_MODULE(OpenGL) -+ -+class CachedShader -+{ -+public: -+ CachedShader(const QByteArray &fragSource, const QByteArray &vertexSource) -+ : cacheIdx(-1) -+ { -+ QCryptographicHash md5Hash(QCryptographicHash::Md5); -+ -+ md5Hash.addData(fragSource); -+ md5Hash.addData(vertexSource); -+ -+ md5Sum = md5Hash.result(); -+ } -+ -+ bool isCached() -+ { -+ return cacheIndex() != -1; -+ } -+ -+ int cacheIndex() -+ { -+ if (cacheIdx != -1) -+ return cacheIdx; -+ cacheIdx = qt_cache_index(md5Sum); -+ return cacheIdx; -+ } -+ -+ bool load(QGLShaderProgram *program, const QGLContext *ctx) -+ { -+ if (cacheIndex() == -1) -+ return false; -+ return qt_cached_shader(program, ctx, cacheIdx); -+ } -+ -+ bool store(QGLShaderProgram *program, const QGLContext *ctx) -+ { -+ return qt_cache_shader(program, ctx, md5Sum); -+ } -+ -+private: -+ QByteArray md5Sum; -+ int cacheIdx; -+}; -+ -+ -+QT_END_NAMESPACE -+ -+#endif -+ -+QT_END_HEADER -+ -+#endif -+#endif -Index: qt-maemo-qtp/src/opengl/gl2paintengineex/qglshadercache_p.h -=================================================================== ---- /dev/null -+++ qt-maemo-qtp/src/opengl/gl2paintengineex/qglshadercache_p.h -@@ -0,0 +1,98 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -+** All rights reserved. -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** This file is part of the QtOpenGL module of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** No Commercial Usage -+** This file contains pre-release code and may not be distributed. -+** You may use this file in accordance with the terms and conditions -+** contained in the Technology Preview License Agreement accompanying -+** this package. -+** -+** GNU Lesser General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** In addition, as a special exception, Nokia gives you certain additional -+** rights. These rights are described in the Nokia Qt LGPL Exception -+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -+** -+** If you have questions regarding the use of this file, please contact -+** Nokia at qt-info@nokia.com. -+** -+** -+** -+** -+** -+** -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+ -+// -+// W A R N I N G -+// ------------- -+// -+// This file is not part of the Qt API. It exists purely as an -+// implementation detail. This header file may change from version to -+// version without notice, or even be removed. -+// -+// We mean it. -+// -+ -+#ifndef QGLSHADERCACHE_P_H -+#define QGLSHADERCACHE_P_H -+ -+#include -+ -+#if defined(QT_MEEGO_EXPERIMENTAL_SHADERCACHE) && defined(QT_OPENGL_ES_2) -+# include "qglshadercache_meego_p.h" -+#else -+ -+QT_BEGIN_HEADER -+ -+QT_BEGIN_NAMESPACE -+ -+QT_MODULE(OpenGL) -+ -+class QGLShaderProgram; -+class QGLContext; -+ -+class CachedShader -+{ -+public: -+ inline CachedShader(const QByteArray &, const QByteArray &) -+ {} -+ -+ inline bool isCached() -+ { -+ return false; -+ } -+ -+ inline bool load(QGLShaderProgram *, const QGLContext *) -+ { -+ return false; -+ } -+ -+ inline bool store(QGLShaderProgram *, const QGLContext *) -+ { -+ return false; -+ } -+}; -+ -+QT_END_NAMESPACE -+ -+QT_END_HEADER -+ -+#endif -+#endif -Index: qt-maemo-qtp/src/opengl/opengl.pro -=================================================================== ---- qt-maemo-qtp.orig/src/opengl/opengl.pro -+++ qt-maemo-qtp/src/opengl/opengl.pro -@@ -58,7 +58,9 @@ - gl2paintengineex/qglcustomshaderstage_p.h \ - gl2paintengineex/qtriangulatingstroker_p.h \ - gl2paintengineex/qtriangulator_p.h \ -- gl2paintengineex/qtextureglyphcache_gl_p.h -+ gl2paintengineex/qtextureglyphcache_gl_p.h \ -+ gl2paintengineex/qglshadercache_p.h \ -+ gl2paintengineex/qglshadercache_meego_p.h - - SOURCES += qglshaderprogram.cpp \ - qglpixmapfilter.cpp \ -Index: qt-maemo-qtp/src/opengl/util/meego/main.cpp -=================================================================== ---- /dev/null -+++ qt-maemo-qtp/src/opengl/util/meego/main.cpp -@@ -0,0 +1,48 @@ -+#include -+ -+#define QT_DEBUG_SHADER_CACHE -+#define QT_MEEGO_EXPERIMENTAL_SHADERCACHE -+#define QT_OPENGL_ES_2 -+#define QT_BOOTSTRAPPED -+ -+typedef int GLsizei; -+typedef unsigned int GLenum; -+ -+#include "../../gl2paintengineex/qglshadercache_meego_p.h" -+ -+#include -+#include -+ -+int main() -+{ -+ ShaderCacheSharedMemory shm; -+ -+ if (!shm.isAttached()) { -+ fprintf(stderr, "Unable to attach to shared memory\n"); -+ return EXIT_FAILURE; -+ } -+ -+ ShaderCacheLocker locker(&shm); -+ if (!locker.isLocked()) { -+ fprintf(stderr, "Unable to lock shared memory\n"); -+ return EXIT_FAILURE; -+ } -+ -+ void *data = shm.data(); -+ Q_ASSERT(data); -+ -+ CachedShaders *cache = reinterpret_cast(data); -+ -+ for (int i = 0; i < cache->shaderCount; ++i) { -+ printf("Shader %d: %d bytes\n", i, cache->headers[i].size); -+ } -+ -+ printf("\nSummary:\n\n" -+ " Amount of cached shaders: %d\n" -+ " Bytes used: %d\n" -+ " Bytes available: %d\n", -+ cache->shaderCount, cache->dataSize, cache->availableSize()); -+ -+ return EXIT_SUCCESS; -+} -+ -Index: qt-maemo-qtp/src/opengl/util/meego/shader-cache-introspector.pro -=================================================================== ---- /dev/null -+++ qt-maemo-qtp/src/opengl/util/meego/shader-cache-introspector.pro -@@ -0,0 +1,7 @@ -+TEMPLATE = app -+ -+SOURCES += main.cpp -+ -+TARGET = shader-cache-introspector -+ -+QT = core diff --git a/config.profiles/harmattan/patches/icu.diff b/config.profiles/harmattan/patches/icu.diff deleted file mode 100644 index 16a17fd..0000000 --- a/config.profiles/harmattan/patches/icu.diff +++ /dev/null @@ -1,732 +0,0 @@ -diff --git a/configure b/configure -index 3a748e2..77232dc 100755 ---- a/configure -+++ b/configure -@@ -779,6 +779,7 @@ CFG_PULSEAUDIO=auto - CFG_COREWLAN=auto - CFG_ICD=auto - CFG_NOPROCESS=no -+CFG_ICU=no - - # initalize variables used for installation - QT_INSTALL_PREFIX= -@@ -940,7 +941,7 @@ while [ "$#" -gt 0 ]; do - VAL=no - ;; - #Qt style yes options -- -incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-xinput2|-egl|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-carbon|-universal|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-multimedia|-audio-backend|-svg|-declarative|-javascript-jit|-script|-scripttools|-rpath|-force-pkg-config|-s60|-usedeffiles) -+ -incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-xinput2|-egl|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-carbon|-universal|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-multimedia|-audio-backend|-svg|-declarative|-javascript-jit|-script|-scripttools|-rpath|-force-pkg-config|-s60|-usedeffiles|-icu) - VAR=`echo $1 | sed "s,^-\(.*\),\1,"` - VAL=yes - ;; -@@ -2242,6 +2243,13 @@ while [ "$#" -gt 0 ]; do - QT_CFLAGS_FPU=$VAL - fi - ;; -+ icu) -+ if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then -+ CFG_ICU="$VAL" -+ else -+ UNKNOWN_OPT=yes -+ fi -+ ;; - *) - UNKNOWN_OPT=yes - ;; -@@ -7040,6 +7048,10 @@ if [ "$CFG_ICD" = "yes" ]; then - QT_CONFIG="$QT_CONFIG icd" - fi - -+if [ "$CFG_ICU" = "yes" ]; then -+ QT_CONFIG="$QT_CONFIG icu" -+fi -+ - # - # Some Qt modules are too advanced in C++ for some old compilers - # Detect here the platforms where they are known to work. -diff --git a/src/corelib/tools/qchar.cpp b/src/corelib/tools/qchar.cpp -index 7cdc256..11a85d5 100644 ---- a/src/corelib/tools/qchar.cpp -+++ b/src/corelib/tools/qchar.cpp -@@ -57,6 +57,12 @@ - - QT_BEGIN_NAMESPACE - -+#ifdef QT_USE_ICU -+// from qlocale_icu.cpp -+extern uint qt_u_toUpper(uint c); -+extern uint qt_u_toLower(uint c); -+#endif -+ - #ifndef QT_NO_CODEC_FOR_C_STRINGS - # ifdef QT_NO_TEXTCODEC - # define QT_NO_CODEC_FOR_C_STRINGS -@@ -1076,6 +1082,12 @@ QChar::UnicodeVersion QChar::unicodeVersion(ushort ucs2) - */ - QChar QChar::toLower() const - { -+#ifdef QT_USE_ICU -+ uint res = qt_u_toLower(ucs); -+ if (res) -+ return QChar(res); -+ // else fall through -+#endif - const QUnicodeTables::Properties *p = qGetProp(ucs); - if (!p->lowerCaseSpecial) - return ucs + p->lowerCaseDiff; -@@ -1090,6 +1102,12 @@ QChar QChar::toLower() const - */ - uint QChar::toLower(uint ucs4) - { -+#ifdef QT_USE_ICU -+ uint res = qt_u_toLower(ucs4); -+ if (res) -+ return res; -+ // else fall through -+#endif - if (ucs4 > UNICODE_LAST_CODEPOINT) - return ucs4; - const QUnicodeTables::Properties *p = qGetProp(ucs4); -@@ -1106,6 +1124,12 @@ uint QChar::toLower(uint ucs4) - */ - ushort QChar::toLower(ushort ucs2) - { -+#ifdef QT_USE_ICU -+ uint res = qt_u_toLower(ucs2); -+ if (res) -+ return res & 0xffff; -+ // else fall through -+#endif - const QUnicodeTables::Properties *p = qGetProp(ucs2); - if (!p->lowerCaseSpecial) - return ucs2 + p->lowerCaseDiff; -@@ -1118,6 +1142,12 @@ ushort QChar::toLower(ushort ucs2) - */ - QChar QChar::toUpper() const - { -+#ifdef QT_USE_ICU -+ uint res = qt_u_toUpper(ucs); -+ if (res) -+ return QChar(res); -+ // else fall through -+#endif - const QUnicodeTables::Properties *p = qGetProp(ucs); - if (!p->upperCaseSpecial) - return ucs + p->upperCaseDiff; -@@ -1132,6 +1162,12 @@ QChar QChar::toUpper() const - */ - uint QChar::toUpper(uint ucs4) - { -+#ifdef QT_USE_ICU -+ uint res = qt_u_toUpper(ucs4); -+ if (res) -+ return res; -+ // else fall through -+#endif - if (ucs4 > UNICODE_LAST_CODEPOINT) - return ucs4; - const QUnicodeTables::Properties *p = qGetProp(ucs4); -@@ -1148,6 +1184,12 @@ uint QChar::toUpper(uint ucs4) - */ - ushort QChar::toUpper(ushort ucs2) - { -+#ifdef QT_USE_ICU -+ uint res = qt_u_toUpper(ucs2); -+ if (res) -+ return res & 0xffff; -+ // else fall through -+#endif - const QUnicodeTables::Properties *p = qGetProp(ucs2); - if (!p->upperCaseSpecial) - return ucs2 + p->upperCaseDiff; -diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp -index 6515edb..5470048 100644 ---- a/src/corelib/tools/qlocale.cpp -+++ b/src/corelib/tools/qlocale.cpp -@@ -134,6 +134,10 @@ void qt_symbianUpdateSystemPrivate(); - void qt_symbianInitSystemLocale(); - #endif - -+#ifdef QT_USE_ICU -+extern bool qt_initIcu(const QString &localeName); -+#endif -+ - /****************************************************************************** - ** Helpers for accessing Qt locale database - */ -@@ -2346,6 +2350,10 @@ void QLocale::setDefault(const QLocale &locale) - { - default_lp = locale.d(); - default_number_options = locale.numberOptions(); -+ -+#ifdef QT_USE_ICU -+ qt_initIcu(locale.name()); -+#endif - } - - /*! -diff --git a/src/corelib/tools/qlocale_icu.cpp b/src/corelib/tools/qlocale_icu.cpp -new file mode 100644 -index 0000000..7fe3801 ---- /dev/null -+++ b/src/corelib/tools/qlocale_icu.cpp -@@ -0,0 +1,247 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -+** All rights reserved. -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** This file is part of the QtCore module of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** No Commercial Usage -+** This file contains pre-release code and may not be distributed. -+** You may use this file in accordance with the terms and conditions -+** contained in the Technology Preview License Agreement accompanying -+** this package. -+** -+** GNU Lesser General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU Lesser -+** General Public License version 2.1 as published by the Free Software -+** Foundation and appearing in the file LICENSE.LGPL included in the -+** packaging of this file. Please review the following information to -+** ensure the GNU Lesser General Public License version 2.1 requirements -+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** In addition, as a special exception, Nokia gives you certain additional -+** rights. These rights are described in the Nokia Qt LGPL Exception -+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -+** -+** If you have questions regarding the use of this file, please contact -+** Nokia at qt-info@nokia.com. -+** -+** -+** -+** -+** -+** -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+ -+#include "qglobal.h" -+#include "qlibrary.h" -+#include "qdebug.h" -+ -+#include "unicode/uversion.h" -+#include "unicode/ucol.h" -+ -+QT_BEGIN_NAMESPACE -+ -+typedef UCollator *(*Ptr_ucol_open)(const char *loc, UErrorCode *status); -+typedef void (*Ptr_ucol_close)(UCollator *coll); -+typedef UCollationResult (*Ptr_ucol_strcoll)(const UCollator *coll, const UChar *source, int32_t sourceLength, const UChar *target, int32_t targetLength); -+typedef int32_t (*Ptr_u_strToCase)(UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, const char *locale, UErrorCode *pErrorCode); -+ -+static Ptr_ucol_open ptr_ucol_open = 0; -+static Ptr_ucol_strcoll ptr_ucol_strcoll = 0; -+static Ptr_ucol_close ptr_ucol_close = 0; -+static Ptr_u_strToCase ptr_u_strToUpper = 0; -+static Ptr_u_strToCase ptr_u_strToLower = 0; -+ -+enum LibLoadStatus -+{ -+ ErrorLoading = -1, -+ NotLoaded = 0, -+ Loaded = 1 -+}; -+ -+static LibLoadStatus status = NotLoaded; -+ -+static UCollator *icuCollator = 0; -+ -+#define STRINGIFY2(x) #x -+#define STRINGIFY(x) STRINGIFY2(x) -+ -+bool qt_initIcu(const QString &localeString) -+{ -+ if (status == ErrorLoading) -+ return false; -+ -+ if (status == NotLoaded) { -+ -+ // resolve libicui18n -+ QLibrary lib(QLatin1String("icui18n"), QLatin1String(U_ICU_VERSION_SHORT)); -+ if (!lib.load()) { -+ qWarning() << "Unable to load library icui18n" << lib.errorString(); -+ status = ErrorLoading; -+ return false; -+ } -+ -+ ptr_ucol_open = (Ptr_ucol_open)lib.resolve("ucol_open"); -+ ptr_ucol_close = (Ptr_ucol_close)lib.resolve("ucol_close"); -+ ptr_ucol_strcoll = (Ptr_ucol_strcoll)lib.resolve("ucol_strcoll"); -+ -+ if (!ptr_ucol_open || !ptr_ucol_close || !ptr_ucol_strcoll) { -+ // try again with decorated symbol names -+ ptr_ucol_open = (Ptr_ucol_open)lib.resolve("ucol_open" STRINGIFY(U_ICU_VERSION_SUFFIX)); -+ ptr_ucol_close = (Ptr_ucol_close)lib.resolve("ucol_close" STRINGIFY(U_ICU_VERSION_SUFFIX)); -+ ptr_ucol_strcoll = (Ptr_ucol_strcoll)lib.resolve("ucol_strcoll" STRINGIFY(U_ICU_VERSION_SUFFIX)); -+ } -+ -+ if (!ptr_ucol_open || !ptr_ucol_close || !ptr_ucol_strcoll) { -+ ptr_ucol_open = 0; -+ ptr_ucol_close = 0; -+ ptr_ucol_strcoll = 0; -+ -+ qWarning("Unable to find symbols in icui18n"); -+ status = ErrorLoading; -+ return false; -+ } -+ -+ // resolve libicuuc -+ QLibrary ucLib(QLatin1String("icuuc"), QLatin1String(U_ICU_VERSION_SHORT)); -+ if (!ucLib.load()) { -+ qWarning() << "Unable to load library icuuc" << ucLib.errorString(); -+ status = ErrorLoading; -+ return false; -+ } -+ -+ ptr_u_strToUpper = (Ptr_u_strToCase)ucLib.resolve("u_strToUpper"); -+ ptr_u_strToLower = (Ptr_u_strToCase)ucLib.resolve("u_strToLower"); -+ -+ if (!ptr_u_strToUpper || !ptr_u_strToLower) { -+ ptr_u_strToUpper = (Ptr_u_strToCase)ucLib.resolve("u_strToUpper" STRINGIFY(U_ICU_VERSION_SUFFIX)); -+ ptr_u_strToLower = (Ptr_u_strToCase)ucLib.resolve("u_strToLower" STRINGIFY(U_ICU_VERSION_SUFFIX)); -+ } -+ -+ if (!ptr_u_strToUpper || !ptr_u_strToLower) { -+ ptr_u_strToUpper = 0; -+ ptr_u_strToLower = 0; -+ -+ qWarning("Unable to find symbols in icuuc"); -+ status = ErrorLoading; -+ return false; -+ } -+ -+ // success :) -+ status = Loaded; -+ } -+ -+ if (icuCollator) { -+ ptr_ucol_close(icuCollator); -+ icuCollator = 0; -+ } -+ -+ UErrorCode icuStatus = U_ZERO_ERROR; -+ icuCollator = ptr_ucol_open(localeString.toLatin1().constData(), &icuStatus); -+ -+ if (!icuCollator) { -+ qWarning("Unable to open locale %s in ICU, error code %d", qPrintable(localeString), icuStatus); -+ return false; -+ } -+ -+ return true; -+} -+ -+bool qt_ucol_strcoll(const QChar *source, int sourceLength, const QChar *target, int targetLength, int *result) -+{ -+ Q_ASSERT(result); -+ Q_ASSERT(source); -+ Q_ASSERT(target); -+ -+ if (!icuCollator) -+ return false; -+ -+ *result = ptr_ucol_strcoll(icuCollator, reinterpret_cast(source), int32_t(sourceLength), -+ reinterpret_cast(target), int32_t(targetLength)); -+ -+ return true; -+} -+ -+// caseFunc can either be u_strToUpper or u_strToLower -+static bool qt_u_strToCase(const QString &str, QString *out, const QLocale &locale, Ptr_u_strToCase caseFunc) -+{ -+ Q_ASSERT(out); -+ -+ if (!icuCollator) -+ return false; -+ -+ QString result(str.size(), Qt::Uninitialized); -+ -+ UErrorCode status = U_ZERO_ERROR; -+ -+ int32_t size = caseFunc(reinterpret_cast(result.data()), result.size(), -+ reinterpret_cast(str.constData()), str.size(), -+ locale.name().toLatin1().constData(), &status); -+ -+ if (U_FAILURE(status)) -+ return false; -+ -+ if (size < result.size()) { -+ result.resize(size); -+ } else if (size > result.size()) { -+ qDebug() << "RESULT SIZE MISMATCH"; -+ // the resulting string is larger than our source string -+ result.resize(size); -+ -+ status = U_ZERO_ERROR; -+ size = caseFunc(reinterpret_cast(result.data()), result.size(), -+ reinterpret_cast(str.constData()), str.size(), -+ locale.name().toLatin1().constData(), &status); -+ -+ if (U_FAILURE(status)) -+ return false; -+ -+ // if the sizes don't match now, we give up. -+ if (size != result.size()) -+ return false; -+ } -+ -+ *out = result; -+ return true; -+} -+ -+bool qt_u_strToUpper(const QString &str, QString *out, const QLocale &locale) -+{ -+ return qt_u_strToCase(str, out, locale, ptr_u_strToUpper); -+} -+ -+bool qt_u_strToLower(const QString &str, QString *out, const QLocale &locale) -+{ -+ return qt_u_strToCase(str, out, locale, ptr_u_strToLower); -+} -+ -+uint qt_u_toUpper(uint c) -+{ -+ if (c > 0xffff) -+ return 0; -+ -+ QString out; -+ if (qt_u_strToUpper(QChar(c), &out, QLocale()) && !out.isEmpty()) -+ return out.at(0).unicode(); -+ return 0; -+} -+ -+uint qt_u_toLower(uint c) -+{ -+ if (c > 0xffff) -+ return 0; -+ -+ QString out; -+ if (qt_u_strToLower(QChar(c), &out, QLocale()) && !out.isEmpty()) -+ return out.at(0).unicode(); -+ return 0; -+} -+ -+QT_END_NAMESPACE -diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp -index d641d74..0f5cee1 100644 ---- a/src/corelib/tools/qstring.cpp -+++ b/src/corelib/tools/qstring.cpp -@@ -112,6 +112,13 @@ int qFindString(const QChar *haystack, int haystackLen, int from, - int qFindStringBoyerMoore(const QChar *haystack, int haystackLen, int from, - const QChar *needle, int needleLen, Qt::CaseSensitivity cs); - -+#ifdef QT_USE_ICU -+// qlocale_icu.cpp -+extern bool qt_ucol_strcoll(const QChar *source, int sourceLength, const QChar *target, int targetLength, int *result); -+extern bool qt_u_strToUpper(const QString &str, QString *out, const QLocale &locale); -+extern bool qt_u_strToLower(const QString &str, QString *out, const QLocale &locale); -+#endif -+ - - // Unicode case-insensitive comparison - static int ucstricmp(const ushort *a, const ushort *ae, const ushort *b, const ushort *be) -@@ -4808,6 +4815,14 @@ int QString::localeAwareCompare_helper(const QChar *data1, int length1, - TPtrC p2 = TPtrC16(reinterpret_cast(data2), length2); - return p1.CompareC(p2); - #elif defined(Q_OS_UNIX) -+# if defined(QT_USE_ICU) -+ int res; -+ if (qt_ucol_strcoll(data1, length1, data2, length2, &res)) { -+ if (res == 0) -+ res = ucstrcmp(data1, length1, data2, length2); -+ return res; -+ } // else fall through -+# endif - // declared in - int delta = strcoll(toLocal8Bit_helper(data1, length1), toLocal8Bit_helper(data2, length2)); - if (delta == 0) -@@ -4943,6 +4958,15 @@ QString QString::toLower() const - if (!d->size) - return *this; - -+#ifdef QT_USE_ICU -+ { -+ QString result; -+ if (qt_u_strToLower(*this, &result, QLocale())) -+ return result; -+ // else fall through and use Qt's toUpper -+ } -+#endif -+ - const ushort *e = d->data + d->size; - - // this avoids one out of bounds check in the loop -@@ -5034,6 +5058,15 @@ QString QString::toUpper() const - if (!d->size) - return *this; - -+#ifdef QT_USE_ICU -+ { -+ QString result; -+ if (qt_u_strToUpper(*this, &result, QLocale())) -+ return result; -+ // else fall through and use Qt's toUpper -+ } -+#endif -+ - const ushort *e = d->data + d->size; - - // this avoids one out of bounds check in the loop -diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri -index d81ab04..46c39f3 100644 ---- a/src/corelib/tools/tools.pri -+++ b/src/corelib/tools/tools.pri -@@ -92,6 +92,11 @@ else:SOURCES += tools/qelapsedtimer_generic.cpp - contains(QT_CONFIG, zlib):include($$PWD/../../3rdparty/zlib.pri) - else:include($$PWD/../../3rdparty/zlib_dependency.pri) - -+contains(QT_CONFIG,icu) { -+ SOURCES += tools/qlocale_icu.cpp -+ DEFINES += QT_USE_ICU -+} -+ - DEFINES += HB_EXPORT=Q_CORE_EXPORT - INCLUDEPATH += ../3rdparty/harfbuzz/src - HEADERS += ../3rdparty/harfbuzz/src/harfbuzz.h -diff --git a/tests/auto/qchar/qchar.pro b/tests/auto/qchar/qchar.pro -index 3813e4e..d991365 100644 ---- a/tests/auto/qchar/qchar.pro -+++ b/tests/auto/qchar/qchar.pro -@@ -13,3 +13,5 @@ symbian: { - } else { - DEFINES += SRCDIR=\\\"$$PWD/\\\" - } -+ -+contains(QT_CONFIG,icu):DEFINES += QT_USE_ICU -diff --git a/tests/auto/qchar/tst_qchar.cpp b/tests/auto/qchar/tst_qchar.cpp -index 45dd7eb..514a836 100644 ---- a/tests/auto/qchar/tst_qchar.cpp -+++ b/tests/auto/qchar/tst_qchar.cpp -@@ -103,7 +103,8 @@ tst_QChar::~tst_QChar() - { } - - void tst_QChar::initTestCase() --{ } -+{ -+} - - void tst_QChar::cleanupTestCase() - { } -@@ -114,6 +115,7 @@ void tst_QChar::init() - int argc = 0; - app = new QCoreApplication(argc, NULL); - #endif -+ QLocale::setDefault(QLocale::C); - } - - void tst_QChar::cleanup() -@@ -143,9 +145,36 @@ void tst_QChar::toUpper() - QVERIFY(QChar::toUpper((uint)0x1c8) == 0x1c7); - QVERIFY(QChar::toUpper((uint)0x1c9) == 0x1c7); - -- QVERIFY(QChar::toUpper((uint)0x10400) == 0x10400); -- QVERIFY(QChar::toUpper((uint)0x10428) == 0x10400); -+ QCOMPARE(QChar::toUpper((uint)0x10400), 0x10400u); -+ QCOMPARE(QChar::toUpper((uint)0x10428), 0x10400u); -+ -+#ifdef QT_USE_ICU -+ QCOMPARE(QChar('i').toUpper(), QChar('I')); -+ QCOMPARE(QChar::toUpper(ushort('i')), ushort('I')); -+ QCOMPARE(QChar::toUpper(uint('i')), uint('I')); -+ -+ QLocale::setDefault(QLocale(QLocale::Turkish, QLocale::Turkey)); -+ -+ // in Turkish locale, upper-caseing a 'i' will result in a capital I plus dot (0x0130) -+ QCOMPARE(QChar('i').toUpper(), QChar(0x0130u)); -+ QCOMPARE(QChar::toUpper(ushort('i')), ushort(0x0130u)); -+ QCOMPARE(QChar::toUpper(uint('i')), 0x0130u); -+ -+ // upper-casing a lower-case i without dot (0x0131) will result in 'I' -+ QCOMPARE(QChar(0x0131u).toUpper(), QChar('I')); -+ QCOMPARE(QChar::toUpper(ushort(0x0131u)), ushort('I')); -+ QCOMPARE(QChar::toUpper(uint(0x0131u)), uint('I')); -+ -+ // upper-casing an upper-case 0x0130 should do nothing -+ QCOMPARE(QChar(0x0130u).toUpper(), QChar(0x0130u)); -+ QCOMPARE(QChar::toUpper(ushort(0x0130u)), ushort(0x0130u)); -+ QCOMPARE(QChar::toUpper(uint(0x0130u)), uint(0x0130u)); - -+ // upper-casing an upper-case I should do nothing -+ QCOMPARE(QChar('I').toUpper(), QChar('I')); -+ QCOMPARE(QChar::toUpper(ushort('I')), ushort('I')); -+ QCOMPARE(QChar::toUpper(uint('I')), uint('I')); -+#endif - } - - void tst_QChar::toLower() -@@ -170,6 +199,34 @@ void tst_QChar::toLower() - - QVERIFY(QChar::toLower((uint)0x10400) == 0x10428); - QVERIFY(QChar::toLower((uint)0x10428) == 0x10428); -+ -+#ifdef QT_USE_ICU -+ QCOMPARE(QChar('I').toLower(), QChar('i')); -+ QCOMPARE(QChar::toLower(ushort('I')), ushort('i')); -+ QCOMPARE(QChar::toLower(uint('I')), uint('i')); -+ -+ QLocale::setDefault(QLocale(QLocale::Turkish, QLocale::Turkey)); -+ -+ // in turkish locale, lower-casing an 'I' will result with a lower-case i without dot (0x0131) -+ QCOMPARE(QChar('I').toLower(), QChar(0x0131u)); -+ QCOMPARE(QChar::toLower(ushort('I')), ushort(0x0131u)); -+ QCOMPARE(QChar::toLower(uint('I')), uint(0x0131u)); -+ -+ // lower-casing a captial I with dot (0x0130) will result in 'i' -+ QCOMPARE(QChar(0x0130u).toLower(), QChar('i')); -+ QCOMPARE(QChar::toLower(ushort(0x0130u)), ushort('i')); -+ QCOMPARE(QChar::toLower(uint(0x0130u)), uint('i')); -+ -+ // lower-casing a lower-case i should do nothing -+ QCOMPARE(QChar('i').toLower(), QChar('i')); -+ QCOMPARE(QChar::toLower(ushort('i')), ushort('i')); -+ QCOMPARE(QChar::toLower(uint('i')), uint('i')); -+ -+ // lower-casing a lower-case i without dot (0x0131) should do nothing -+ QCOMPARE(QChar(0x0131u).toLower(), QChar(0x0131u)); -+ QCOMPARE(QChar::toLower(ushort(0x0131u)), ushort(0x0131u)); -+ QCOMPARE(QChar::toLower(uint(0x0131u)), uint(0x0131u)); -+#endif - } - - void tst_QChar::toTitle() -diff --git a/tests/auto/qstring/qstring.pro b/tests/auto/qstring/qstring.pro -index ed758c6..92dd755 100644 ---- a/tests/auto/qstring/qstring.pro -+++ b/tests/auto/qstring/qstring.pro -@@ -6,3 +6,5 @@ symbian:LIBS += -llibm - QT = core - - DEFINES += QT_NO_CAST_TO_ASCII -+ -+contains(QT_CONFIG,icu):DEFINES += QT_USE_ICU -diff --git a/tests/auto/qstring/tst_qstring.cpp b/tests/auto/qstring/tst_qstring.cpp -index ecae3d8..6baf9fc 100644 ---- a/tests/auto/qstring/tst_qstring.cpp -+++ b/tests/auto/qstring/tst_qstring.cpp -@@ -210,6 +210,8 @@ private slots: - void task262677remove(); - void QTBUG10404_compareRef(); - void QTBUG9281_arg_locale(); -+ -+ void toUpperLower_icu(); - }; - - typedef QList IntList; -@@ -1544,6 +1546,11 @@ void tst_QString::toUpper() - QCOMPARE( lower.toUpper(), upper); - - -+#ifdef QT_USE_ICU -+ // test doesn't work with ICU support, since QChar is unaware of any locale -+ QEXPECT_FAIL("", "test doesn't work with ICU support, since QChar is unaware of any locale", Continue); -+ QVERIFY(false); -+#else - for (int i = 0; i < 65536; ++i) { - QString str(1, QChar(i)); - QString upper = str.toUpper(); -@@ -1551,6 +1558,7 @@ void tst_QString::toUpper() - if (upper.length() == 1) - QVERIFY(upper == QString(1, QChar(i).toUpper())); - } -+#endif - } - - void tst_QString::toLower() -@@ -1582,6 +1590,11 @@ void tst_QString::toLower() - upper += QChar(QChar::lowSurrogate(0x10400)); - QCOMPARE( upper.toLower(), lower); - -+#ifdef QT_USE_ICU -+ // test doesn't work with ICU support, since QChar is unaware of any locale -+ QEXPECT_FAIL("", "test doesn't work with ICU support, since QChar is unaware of any locale", Continue); -+ QVERIFY(false); -+#else - for (int i = 0; i < 65536; ++i) { - QString str(1, QChar(i)); - QString lower = str.toLower(); -@@ -1589,6 +1602,7 @@ void tst_QString::toLower() - if (lower.length() == 1) - QVERIFY(str.toLower() == QString(1, QChar(i).toLower())); - } -+#endif - } - - void tst_QString::trimmed() -@@ -4200,6 +4214,8 @@ void tst_QString::localeAwareCompare() - - #elif defined (Q_WS_MAC) - QSKIP("Setting the locale is not supported on OS X (you can set the C locale, but that won't affect CFStringCompare which is used to compare strings)", SkipAll); -+#elif defined(QT_USE_ICU) -+ QLocale::setDefault(QLocale(locale)); - #else - if (!locale.isEmpty()) { - const char *newLocale = setlocale(LC_ALL, locale.toLatin1()); -@@ -4211,6 +4227,11 @@ void tst_QString::localeAwareCompare() - } - #endif - -+#ifdef QT_USE_ICU -+ // ### for c1, ICU disagrees with libc on how to compare -+ QEXPECT_FAIL("c1", "ICU disagrees with test", Abort); -+#endif -+ - int testres = QString::localeAwareCompare(s1, s2); - if (result < 0) { - QVERIFY(testres < 0); -@@ -4912,6 +4933,40 @@ void tst_QString::QTBUG9281_arg_locale() - QLocale::setDefault(QLocale::C); - } - -+void tst_QString::toUpperLower_icu() -+{ -+#ifndef QT_USE_ICU -+ QSKIP("Qt was built without ICU support", QTest::SkipAll); -+#endif -+ -+ QString s = QString::fromLatin1("i"); -+ -+ QCOMPARE(s.toUpper(), QString::fromLatin1("I")); -+ QCOMPARE(s.toLower(), QString::fromLatin1("i")); -+ -+ QLocale::setDefault(QLocale(QLocale::Turkish, QLocale::Turkey)); -+ -+ // turkish locale has a capital I with a dot (U+0130, utf8 c4b0) -+ -+ QCOMPARE(s.toUpper(), QString::fromUtf8("\xc4\xb0")); -+ QCOMPARE(QString::fromUtf8("\xc4\xb0").toLower(), s); -+ -+ // nothing should happen here -+ QCOMPARE(s.toLower(), s); -+ QCOMPARE(QString::fromLatin1("I").toUpper(), QString::fromLatin1("I")); -+ -+ // U+0131, utf8 c4b1 is the lower-case i without a dot -+ QString sup = QString::fromUtf8("\xc4\xb1"); -+ -+ QCOMPARE(sup.toUpper(), QString::fromLatin1("I")); -+ QCOMPARE(QString::fromLatin1("I").toLower(), sup); -+ -+ // nothing should happen here -+ QCOMPARE(sup.toLower(), sup); -+ QCOMPARE(QString::fromLatin1("i").toLower(), QString::fromLatin1("i")); -+ -+ // the cleanup function will restore the default locale -+} - - - QTEST_APPLESS_MAIN(tst_QString) diff --git a/config.profiles/harmattan/patches/no_read_pro_from_quilt_dir.diff b/config.profiles/harmattan/patches/no_read_pro_from_quilt_dir.diff deleted file mode 100644 index f5ddb67..0000000 --- a/config.profiles/harmattan/patches/no_read_pro_from_quilt_dir.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: qt-maemo-qtp/configure -=================================================================== ---- qt-maemo-qtp.orig/configure -+++ qt-maemo-qtp/configure -@@ -8465,7 +8465,7 @@ - # .projects.3 -> the rest - rm -f .projects .projects.1 .projects.2 .projects.3 - --QMAKE_PROJECTS=`find "$relpath/." -name '*.pro' -print | sed 's-/\./-/-'` -+QMAKE_PROJECTS=`find "$relpath/." -name '*.pro' -a ! -path '*/.pc/*' -print | sed 's-/\./-/-'` - if [ -z "$AWK" ]; then - for p in `echo $QMAKE_PROJECTS`; do - echo "$p" >> .projects diff --git a/config.profiles/harmattan/patches/pinch_gesture_sent_twice.diff b/config.profiles/harmattan/patches/pinch_gesture_sent_twice.diff deleted file mode 100644 index 61dfbf9..0000000 --- a/config.profiles/harmattan/patches/pinch_gesture_sent_twice.diff +++ /dev/null @@ -1,56 +0,0 @@ -Index: qt-maemo-qtp/src/gui/kernel/qstandardgestures.cpp -=================================================================== ---- qt-maemo-qtp.orig/src/gui/kernel/qstandardgestures.cpp -+++ qt-maemo-qtp/src/gui/kernel/qstandardgestures.cpp -@@ -66,6 +66,9 @@ - #else - static_cast(target)->setAttribute(Qt::WA_AcceptTouchEvents); - #endif -+ } else if (target) { -+ return 0; // this assumes the target is a QGraphicsObject, so we return -+ // NULL to indicate that the recognizer doesn't support graphicsobject - } - return new QPanGesture; - } -@@ -157,7 +160,11 @@ - { - if (target && target->isWidgetType()) { - static_cast(target)->setAttribute(Qt::WA_AcceptTouchEvents); -+ } else if (target) { -+ return 0; // this assumes the target is a QGraphicsObject, so we return -+ // NULL to indicate that the recognizer doesn't support graphicsobject - } -+ - return new QPinchGesture; - } - -@@ -286,6 +293,9 @@ - { - if (target && target->isWidgetType()) { - static_cast(target)->setAttribute(Qt::WA_AcceptTouchEvents); -+ } else if (target) { -+ return 0; // this assumes the target is a QGraphicsObject, so we return -+ // NULL to indicate that the recognizer doesn't support graphicsobject - } - return new QSwipeGesture; - } -@@ -424,6 +434,9 @@ - { - if (target && target->isWidgetType()) { - static_cast(target)->setAttribute(Qt::WA_AcceptTouchEvents); -+ } else if (target) { -+ return 0; // this assumes the target is a QGraphicsObject, so we return -+ // NULL to indicate that the recognizer doesn't support graphicsobject - } - return new QTapGesture; - } -@@ -495,6 +508,9 @@ - { - if (target && target->isWidgetType()) { - static_cast(target)->setAttribute(Qt::WA_AcceptTouchEvents); -+ } else if (target) { -+ return 0; // this assumes the target is a QGraphicsObject, so we return -+ // NULL to indicate that the recognizer doesn't support graphicsobject - } - return new QTapAndHoldGesture; - } diff --git a/config.profiles/harmattan/patches/qgltexturecache.diff b/config.profiles/harmattan/patches/qgltexturecache.diff deleted file mode 100644 index 0fa8ad2..0000000 --- a/config.profiles/harmattan/patches/qgltexturecache.diff +++ /dev/null @@ -1,23 +0,0 @@ -Index: qt-maemo-qtp/src/opengl/qgl.cpp -=================================================================== ---- qt-maemo-qtp.orig/src/opengl/qgl.cpp -+++ qt-maemo-qtp/src/opengl/qgl.cpp -@@ -1831,18 +1831,6 @@ - void QGLTextureCache::insert(QGLContext* ctx, qint64 key, QGLTexture* texture, int cost) - { - QWriteLocker locker(&m_lock); -- if (m_cache.totalCost() + cost > m_cache.maxCost()) { -- // the cache is full - make an attempt to remove something -- const QList keys = m_cache.keys(); -- int i = 0; -- while (i < m_cache.count() -- && (m_cache.totalCost() + cost > m_cache.maxCost())) { -- QGLTexture *tex = m_cache.object(keys.at(i)); -- if (tex->context == ctx) -- m_cache.remove(keys.at(i)); -- ++i; -- } -- } - const QGLTextureCacheKey cacheKey = {key, QGLContextPrivate::contextGroup(ctx)}; - m_cache.insert(cacheKey, texture, cost); - } diff --git a/config.profiles/harmattan/patches/qwidget_x11.diff b/config.profiles/harmattan/patches/qwidget_x11.diff deleted file mode 100644 index 8bcb011..0000000 --- a/config.profiles/harmattan/patches/qwidget_x11.diff +++ /dev/null @@ -1,39 +0,0 @@ -commit 4ecc45086102807901a3bd2b9e02a169ca212716 -Author: Harald Fernengel -Date: Thu Dec 9 10:51:01 2010 +0100 - - Fix a rare race condition when showing windows - - When setting a window to translucent shortly before showing it with the - OpenGL graphics system, the hijacking would call XDestroyWindow without - resetting the internal state. This might lead to the window waiting for - a map notify message forever. - - The patch now properly resets the internal state when destroying the old - window, so it'll get mapped correctly when show() is called. - - Reviewed-by: Denis Dzyubenko - -Index: qt-maemo-qtp/src/gui/kernel/qwidget_x11.cpp -=================================================================== ---- qt-maemo-qtp.orig/src/gui/kernel/qwidget_x11.cpp -+++ qt-maemo-qtp/src/gui/kernel/qwidget_x11.cpp -@@ -961,8 +961,17 @@ - inputContext->setFocusWidget(q); - } - -- if (destroyw) -+ if (destroyw) { - qt_XDestroyWindow(q, dpy, destroyw); -+ if (QTLWExtra *topData = maybeTopData()) { -+#ifndef QT_NO_XSYNC -+ if (topData->syncUpdateCounter) -+ XSyncDestroyCounter(dpy, topData->syncUpdateCounter); -+#endif -+ // we destroyed our old window - reset the top-level state -+ createTLSysExtra(); -+ } -+ } - - // newly created windows are positioned at the window system's - // (0,0) position. If the parent uses wrect mapping to expand the diff --git a/config.profiles/harmattan/patches/qwidget_x11_mapping.diff b/config.profiles/harmattan/patches/qwidget_x11_mapping.diff deleted file mode 100644 index 4866cfb..0000000 --- a/config.profiles/harmattan/patches/qwidget_x11_mapping.diff +++ /dev/null @@ -1,17 +0,0 @@ -Index: qt-maemo-qtp/src/gui/kernel/qwidget_x11.cpp -=================================================================== ---- qt-maemo-qtp.orig/src/gui/kernel/qwidget_x11.cpp -+++ qt-maemo-qtp/src/gui/kernel/qwidget_x11.cpp -@@ -1353,6 +1353,12 @@ - //cannot trust that !isWindow() implies parentWidget() before create - return (q->isWindow() || !q->parentWidget()) ? p : q->parentWidget()->d_func()->mapToGlobal(p); - } -+ -+ // we're not embedded - use the client rect to compute the global position -+ if (!q->window()->d_func()->topData()->embedded) -+ return mapFromWS(QPoint(pos.x() - q->data->crect.left(), pos.y() - q->data->crect.top())); -+ -+ // otherwise, go through the (slow-ish) X11 round-trip - int x, y; - Window child; - QPoint p = mapToWS(pos); diff --git a/config.profiles/harmattan/patches/runtime-window-geometry-revert.diff b/config.profiles/harmattan/patches/runtime-window-geometry-revert.diff deleted file mode 100644 index af55a60..0000000 --- a/config.profiles/harmattan/patches/runtime-window-geometry-revert.diff +++ /dev/null @@ -1,12 +0,0 @@ -Index: qt-maemo-qtp/src/gui/painting/qgraphicssystem_runtime.cpp -=================================================================== ---- qt-maemo-qtp.orig/src/gui/painting/qgraphicssystem_runtime.cpp -+++ qt-maemo-qtp/src/gui/painting/qgraphicssystem_runtime.cpp -@@ -285,7 +285,6 @@ - - void QRuntimeWindowSurface::setGeometry(const QRect &rect) - { -- QWindowSurface::setGeometry(rect); - m_windowSurface->setGeometry(rect); - } - diff --git a/config.profiles/harmattan/patches/series b/config.profiles/harmattan/patches/series deleted file mode 100644 index f2ee5f9..0000000 --- a/config.profiles/harmattan/patches/series +++ /dev/null @@ -1,14 +0,0 @@ -tst_qscrollbar.diff -signon_authenticator4.diff -pinch_gesture_sent_twice.diff -no_read_pro_from_quilt_dir.diff -tst_qvariant.diff -icu.diff -qgltexturecache.diff -qwidget_x11.diff -qwidget_x11_mapping.diff -glshadercache.diff -temppath.diff -tst_qprogressbar.diff -default_widget_size.diff -runtime-window-geometry-revert.diff diff --git a/config.profiles/harmattan/patches/signon_authenticator4.diff b/config.profiles/harmattan/patches/signon_authenticator4.diff deleted file mode 100644 index 63e8d51..0000000 --- a/config.profiles/harmattan/patches/signon_authenticator4.diff +++ /dev/null @@ -1,230 +0,0 @@ -Index: qt-maemo-qtp/src/3rdparty/signon/signon.pri -=================================================================== ---- /dev/null -+++ qt-maemo-qtp/src/3rdparty/signon/signon.pri -@@ -0,0 +1,2 @@ -+# signon dependency -+CONFIG += qdbus -Index: qt-maemo-qtp/src/network/access/access.pri -=================================================================== ---- qt-maemo-qtp.orig/src/network/access/access.pri -+++ qt-maemo-qtp/src/network/access/access.pri -@@ -61,3 +61,4 @@ - access/qnetworkdiskcache.cpp - - include($$PWD/../../3rdparty/zlib_dependency.pri) -+include($$PWD/../../3rdparty/signon/signon.pri) -Index: qt-maemo-qtp/src/network/kernel/qauthenticator.cpp -=================================================================== ---- qt-maemo-qtp.orig/src/network/kernel/qauthenticator.cpp -+++ qt-maemo-qtp/src/network/kernel/qauthenticator.cpp -@@ -129,6 +129,9 @@ - \sa QSslSocket - */ - -+#ifndef QT_NO_SIGNON -+#include -+#endif //QT_NO_SIGNON - - /*! - Constructs an empty authentication object -@@ -421,17 +424,40 @@ - { - QByteArray response; - const char *methodString = 0; -+#ifndef QT_NO_SIGNON -+ bool valid = false; -+ qint32 id = 0; -+#endif //QT_NO_SIGNON -+ - switch(method) { - case QAuthenticatorPrivate::None: - methodString = ""; - phase = Done; - break; - case QAuthenticatorPrivate::Plain: -+#ifndef QT_NO_SIGNON -+ id = this->options.value(QLatin1String("identity")).toInt(&valid); -+ if (valid) { -+ //get response from sso -+ QVariantMap signon = signonResponse(id, QLatin1String("password"),QVariantMap()); -+ response = '\0' + signon.value(QLatin1String("UserName")).toString().toUtf8() -+ + '\0' + signon.value(QLatin1String("Secret")).toString().toUtf8(); -+ } else -+#endif //QT_NO_SIGNON - response = '\0' + user.toUtf8() + '\0' + password.toUtf8(); - phase = Done; - break; - case QAuthenticatorPrivate::Basic: - methodString = "Basic "; -+#ifndef QT_NO_SIGNON -+ id = this->options.value(QLatin1String("identity")).toInt(&valid); -+ if (valid) { -+ //get response from sso -+ QVariantMap signon = signonResponse(id, QLatin1String("password"),QVariantMap()); -+ response = signon.value(QLatin1String("UserName")).toString().toLatin1() -+ + ':' + signon.value(QLatin1String("Secret")).toString().toLatin1(); -+ } else -+#endif //QT_NO_SIGNON - response = user.toLatin1() + ':' + password.toLatin1(); - response = response.toBase64(); - phase = Done; -@@ -613,6 +639,90 @@ - return hash.result().toHex(); - } - -+#ifndef QT_NO_SIGNON -+ -+static QVariantMap signonResponse(const quint32 id, const QString &method, QVariantMap args) -+{ -+ //check dbus connection -+ QDBusConnection connection = QDBusConnection::sessionBus(); -+ if (!QDBusConnection::sessionBus().isConnected()) { -+ qCritical() << "DBus connection failed"; -+ return QVariantMap(); -+ } -+ -+ QDBusMessage msg = -+ QDBusMessage::createMethodCall(QLatin1String("com.nokia.SingleSignOn"), -+ QLatin1String("/com/nokia/SingleSignOn") , -+ QLatin1String("com.nokia.SingleSignOn.AuthService"), -+ QLatin1String("getAuthSessionObjectPath")); -+ msg << id << method; -+ QDBusReply pathReply = connection.call(msg); -+ -+ QString sessionPath; -+ if (pathReply.isValid()) { -+ sessionPath = pathReply.value(); -+ } else { -+ qDebug() << pathReply.error(); -+ return QVariantMap(); -+ } -+ -+ //authenticate using auth session -+ msg = QDBusMessage::createMethodCall(QLatin1String("com.nokia.SingleSignOn"), -+ sessionPath, QString(), -+ QLatin1String("process")); -+ msg << args << method; -+ QDBusReply reply = connection.call(msg); -+ -+ if (reply.isValid()) { -+ QVariantMap map = reply.value(); -+ return map; -+ } else { -+ qDebug() << reply.error(); -+ return QVariantMap(); -+ } -+ return QVariantMap(); -+} -+ -+static QByteArray signonDigestMd5( -+ const quint32 id, -+ const QByteArray &alg, -+ QString &user, -+ const QByteArray &realm, -+ const QByteArray &nonce, /* nonce from server */ -+ QByteArray &nonceCount, /* 8 hex digits */ -+ QByteArray &cNonce, /* client nonce */ -+ const QByteArray &qop, /* qop-value: "", "auth", "auth-int" */ -+ const QByteArray &method, /* method from the request */ -+ const QByteArray &digestUri, /* requested URL */ -+ const QByteArray &hEntity /* H(entity body) if qop="auth-int" */ -+ ) -+{ -+ QByteArray digest = QByteArray(); -+ nonceCount = "00000001"; -+ -+ QVariantMap args; -+ args.insert(QLatin1String("Algorithm"), alg); -+ args.insert(QLatin1String("Realm"), QLatin1String(realm)); -+ args.insert(QLatin1String("nonce"), nonce); -+ args.insert(QLatin1String("nonceCount"), nonceCount); -+ args.insert(QLatin1String("cNonce"), cNonce); -+ args.insert(QLatin1String("qop"), qop); -+ args.insert(QLatin1String("method"), method); -+ args.insert(QLatin1String("digestUri"), digestUri); -+ args.insert(QLatin1String("Entity"), hEntity); -+ -+ QVariantMap response = signonResponse(id, QLatin1String("digest"), args); -+ -+ if (response.isEmpty()) -+ return digest; -+ digest = response.value(QLatin1String("Digest")).toByteArray(); -+ user = response.value(QLatin1String("UserName")).toString(); -+ cNonce = response.value(QLatin1String("cNonce")).toByteArray(); -+ -+ return digest; -+} -+#endif //QT_NO_SIGNON -+ - QByteArray QAuthenticatorPrivate::digestMd5Response(const QByteArray &challenge, const QByteArray &method, const QByteArray &path) - { - QHash options = parseDigestAuthenticationChallenge(challenge); -@@ -625,9 +735,23 @@ - QByteArray nonce = options.value("nonce"); - QByteArray opaque = options.value("opaque"); - QByteArray qop = options.value("qop"); -+ QByteArray response; - - // qDebug() << "calculating digest: method=" << method << "path=" << path; -- QByteArray response = digestMd5ResponseHelper(options.value("algorithm"), user.toLatin1(), -+ -+#ifndef QT_NO_SIGNON -+ bool valid = false; -+ qint32 id = this->options.value(QLatin1String("identity")).toInt(&valid); -+ if (valid) { -+ //get response from sso -+ response = signonDigestMd5(id, options.value("algorithm"), user, -+ realm.toLatin1(), -+ nonce, nonceCountString, -+ cnonce, qop, method, -+ path, QByteArray()); -+ } else -+#endif //QT_NO_SIGNON -+ response = digestMd5ResponseHelper(options.value("algorithm"), user.toLatin1(), - realm.toLatin1(), password.toLatin1(), - nonce, nonceCountString, - cnonce, qop, method, -Index: qt-maemo-qtp/src/network/kernel/qauthenticator_p.h -=================================================================== ---- qt-maemo-qtp.orig/src/network/kernel/qauthenticator_p.h -+++ qt-maemo-qtp/src/network/kernel/qauthenticator_p.h -@@ -109,6 +109,23 @@ - - }; - -+#ifndef QT_NO_SIGNON -+ static QVariantMap signonResponse(const quint32 id, const QString &method, QVariantMap args); -+ static QByteArray signonDigestMd5( -+ const quint32 id, -+ const QByteArray &alg, -+ QString &user, -+ const QByteArray &realm, -+ const QByteArray &nonce, /* nonce from server */ -+ QByteArray &nonceCount, /* 8 hex digits */ -+ QByteArray &cNonce, /* client nonce */ -+ const QByteArray &qop, /* qop-value: "", "auth", "auth-int" */ -+ const QByteArray &method, /* method from the request */ -+ const QByteArray &digestUri, /* requested URL */ -+ const QByteArray &hEntity /* H(entity body) if qop="auth-int" */ -+ ); -+#endif //QT_NO_SIGNON -+ - - QT_END_NAMESPACE - -Index: qt-maemo-qtp/src/src.pro -=================================================================== ---- qt-maemo-qtp.orig/src/src.pro -+++ qt-maemo-qtp/src/src.pro -@@ -4,8 +4,9 @@ - unset(SRC_SUBDIRS) - win32:SRC_SUBDIRS += src_winmain - symbian:SRC_SUBDIRS += src_s60main --SRC_SUBDIRS += src_corelib src_xml src_network src_sql src_testlib -+SRC_SUBDIRS += src_corelib src_xml - !symbian:contains(QT_CONFIG, dbus):SRC_SUBDIRS += src_dbus -+SRC_SUBDIRS += src_network src_sql src_testlib - !contains(QT_CONFIG, no-gui): SRC_SUBDIRS += src_gui - !wince*:!symbian:!vxworks:contains(QT_CONFIG, qt3support): SRC_SUBDIRS += src_qt3support - diff --git a/config.profiles/harmattan/patches/temppath.diff b/config.profiles/harmattan/patches/temppath.diff deleted file mode 100644 index 065c2d0..0000000 --- a/config.profiles/harmattan/patches/temppath.diff +++ /dev/null @@ -1,28 +0,0 @@ -Index: qt-maemo-qtp/mkspecs/linux-g++-maemo/qplatformdefs.h -=================================================================== ---- qt-maemo-qtp.orig/mkspecs/linux-g++-maemo/qplatformdefs.h -+++ qt-maemo-qtp/mkspecs/linux-g++-maemo/qplatformdefs.h -@@ -43,3 +43,8 @@ - - #define QT_GUI_DOUBLE_CLICK_RADIUS 20 - #define QT_GUI_DRAG_DISTANCE 16 -+ -+// TMPDIR sometimes points to /tmp and sometimes to /var/tmp -+// To guarantee native platform key generation for QSharedMemory and friends, -+// we must hard code the temp path to /var/tmp here. -+#define QT_UNIX_TEMP_PATH_OVERRIDE "/var/tmp" -Index: qt-maemo-qtp/src/corelib/io/qfsfileengine_unix.cpp -=================================================================== ---- qt-maemo-qtp.orig/src/corelib/io/qfsfileengine_unix.cpp -+++ qt-maemo-qtp/src/corelib/io/qfsfileengine_unix.cpp -@@ -643,7 +643,9 @@ - - QString QFSFileEngine::tempPath() - { --#if defined(Q_OS_SYMBIAN) -+#if defined(QT_UNIX_TEMP_PATH_OVERRIDE) -+ QString temp = QLatin1String(QT_UNIX_TEMP_PATH_OVERRIDE); -+#elif defined(Q_OS_SYMBIAN) - TFileName symbianPath = PathInfo::PhoneMemoryRootPath(); - QString temp = QDir::fromNativeSeparators(qt_TDesC2QString(symbianPath)); - temp += QLatin1String( "temp/"); diff --git a/config.profiles/harmattan/patches/tst_qprogressbar.diff b/config.profiles/harmattan/patches/tst_qprogressbar.diff deleted file mode 100644 index d252fe3..0000000 --- a/config.profiles/harmattan/patches/tst_qprogressbar.diff +++ /dev/null @@ -1,19 +0,0 @@ -Index: qt-maemo-qtp/tests/auto/qprogressbar/tst_qprogressbar.cpp -=================================================================== ---- qt-maemo-qtp.orig/tests/auto/qprogressbar/tst_qprogressbar.cpp -+++ qt-maemo-qtp/tests/auto/qprogressbar/tst_qprogressbar.cpp -@@ -179,10 +179,14 @@ - bar.repainted = false; - bar.setFormat("%v of %m (%p%)"); - qApp->processEvents(); -+ -+#if 0 // Removed - #ifndef Q_WS_MAC - // The Mac scroll bar is animated, which means we get paint events all the time. - QVERIFY(!bar.repainted); - #endif -+#endif -+ - QCOMPARE(bar.text(), QString("1 of 10 (10%)")); - bar.setRange(5, 5); - bar.setValue(5); diff --git a/config.profiles/harmattan/patches/tst_qscrollbar.diff b/config.profiles/harmattan/patches/tst_qscrollbar.diff deleted file mode 100644 index 3c777a9..0000000 --- a/config.profiles/harmattan/patches/tst_qscrollbar.diff +++ /dev/null @@ -1,12 +0,0 @@ -Index: qt-maemo-qtp/tests/auto/qscrollbar/tst_qscrollbar.cpp -=================================================================== ---- qt-maemo-qtp.orig/tests/auto/qscrollbar/tst_qscrollbar.cpp -+++ qt-maemo-qtp/tests/auto/qscrollbar/tst_qscrollbar.cpp -@@ -104,6 +104,7 @@ - - void tst_QScrollBar::task_209492() - { -+ QSKIP("Unstable test on Harmattan", SkipSingle); - class MyScrollArea : public QScrollArea - { - public: diff --git a/config.profiles/harmattan/patches/tst_qvariant.diff b/config.profiles/harmattan/patches/tst_qvariant.diff deleted file mode 100644 index bcded52..0000000 --- a/config.profiles/harmattan/patches/tst_qvariant.diff +++ /dev/null @@ -1,21 +0,0 @@ -Index: qt-maemo-qtp/tests/auto/qvariant/tst_qvariant.cpp -=================================================================== ---- qt-maemo-qtp.orig/tests/auto/qvariant/tst_qvariant.cpp -+++ qt-maemo-qtp/tests/auto/qvariant/tst_qvariant.cpp -@@ -3122,6 +3122,7 @@ - - void tst_QVariant::numericalConvert() - { -+ int low_int = 3; - QVariant vfloat(float(5.3)); - QVariant vdouble(double(5.3)); - QVariant vreal(qreal(5.3)); -@@ -3137,7 +3138,7 @@ - - for(int i = 0; i < vect.size(); i++) { - double num = 5.3; -- if (i >= 3 && i <= 7) -+ if (i >= low_int && i <= 7) - num = 5; - QVariant *v = vect.at(i); - QCOMPARE(v->toFloat() , float(num)); -- cgit v0.12