Merge remote-tracking branch 'origin/5.6' into 5.7
Conflicts: src/corelib/io/qtemporarydir.cpp One side encapsulated a repeated piece of #if-ery in a local define; the other added to the #if-ery. Made its addition to the other's. src/corelib/kernel/qeventdispatcher_unix_p.h One side moved some members into a struct; this collided with a #undef check that neither side now has. Discarded the #undef part. src/gui/opengl/qopengltexturehelper_p.h 5.7 deleted a bunch of methods; not clear why merge got confused. src/tools/moc/moc.cpp One added a name to the copyright header; another changed its URL. Change-Id: I9e9032b819f030d67f1915445acf2793e98713fa
This commit is contained in:
commit
6c5de416c9
@ -5,7 +5,7 @@ COMPILER=$1
|
|||||||
VERBOSE=$2
|
VERBOSE=$2
|
||||||
|
|
||||||
case "$COMPILER" in
|
case "$COMPILER" in
|
||||||
icpc)
|
*icpc)
|
||||||
cat >header.h <<EOF
|
cat >header.h <<EOF
|
||||||
#define HEADER_H
|
#define HEADER_H
|
||||||
|
|
||||||
|
19
configure
vendored
19
configure
vendored
@ -548,7 +548,7 @@ if [ "$BUILD_ON_MAC" = "yes" ]; then
|
|||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! /usr/bin/xcrun -find xcrun >/dev/null 2>&1; then
|
if ! /usr/bin/xcrun -find xcodebuild >/dev/null 2>&1; then
|
||||||
echo >&2
|
echo >&2
|
||||||
echo " Xcode not set up properly. You may need to confirm the license" >&2
|
echo " Xcode not set up properly. You may need to confirm the license" >&2
|
||||||
echo " agreement by running /usr/bin/xcodebuild without arguments." >&2
|
echo " agreement by running /usr/bin/xcodebuild without arguments." >&2
|
||||||
@ -3033,7 +3033,10 @@ case "$XPLATFORM" in
|
|||||||
*unsupported*)
|
*unsupported*)
|
||||||
;;
|
;;
|
||||||
*android-g++*)
|
*android-g++*)
|
||||||
XPLATFORM_ANDROID=yes
|
XPLATFORM_ANDROID=g++
|
||||||
|
;;
|
||||||
|
*android-clang*)
|
||||||
|
XPLATFORM_ANDROID=clang
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
@ -3237,7 +3240,7 @@ if ( [ "$CFG_XCB" = "system" ] || [ "$CFG_XCB" = "qt" ] ) && [ "$CFG_XKBCOMMON"
|
|||||||
exit 101
|
exit 101
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$XPLATFORM_ANDROID" = "yes" ]; then
|
if [ "$XPLATFORM_ANDROID" != "no" ]; then
|
||||||
if [ "$CFG_DBUS" = "auto" ]; then
|
if [ "$CFG_DBUS" = "auto" ]; then
|
||||||
CFG_DBUS="no"
|
CFG_DBUS="no"
|
||||||
fi
|
fi
|
||||||
@ -3447,7 +3450,7 @@ QMAKE_CONF_COMPILER=`getXQMakeConf QMAKE_CXX`
|
|||||||
|
|
||||||
TEST_COMPILER=$QMAKE_CONF_COMPILER
|
TEST_COMPILER=$QMAKE_CONF_COMPILER
|
||||||
|
|
||||||
if [ "$XPLATFORM_ANDROID" = "yes" ] ; then
|
if [ "$XPLATFORM_ANDROID" != "no" ] ; then
|
||||||
ANDROID_NDK_TOOLCHAIN_PREFIX=
|
ANDROID_NDK_TOOLCHAIN_PREFIX=
|
||||||
ANDROID_NDK_TOOLS_PREFIX=
|
ANDROID_NDK_TOOLS_PREFIX=
|
||||||
ANDROID_PLATFORM_ARCH=
|
ANDROID_PLATFORM_ARCH=
|
||||||
@ -3487,7 +3490,11 @@ if [ "$XPLATFORM_ANDROID" = "yes" ] ; then
|
|||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
QMAKE_CONF_COMPILER=$CFG_DEFAULT_ANDROID_NDK_ROOT/toolchains/$ANDROID_NDK_TOOLCHAIN_PREFIX-$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION/prebuilt/$CFG_DEFAULT_ANDROID_NDK_HOST/bin/$ANDROID_NDK_TOOLS_PREFIX-g++
|
if [ "$XPLATFORM_ANDROID" = "g++" ] ; then
|
||||||
|
QMAKE_CONF_COMPILER=$CFG_DEFAULT_ANDROID_NDK_ROOT/toolchains/$ANDROID_NDK_TOOLCHAIN_PREFIX-$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION/prebuilt/$CFG_DEFAULT_ANDROID_NDK_HOST/bin/$ANDROID_NDK_TOOLS_PREFIX-g++
|
||||||
|
else
|
||||||
|
QMAKE_CONF_COMPILER=$CFG_DEFAULT_ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$CFG_DEFAULT_ANDROID_NDK_HOST/bin/clang++
|
||||||
|
fi
|
||||||
TEST_COMPILER="$QMAKE_CONF_COMPILER --sysroot=$CFG_DEFAULT_ANDROID_NDK_ROOT/platforms/$CFG_DEFAULT_ANDROID_PLATFORM/$ANDROID_PLATFORM_ARCH/"
|
TEST_COMPILER="$QMAKE_CONF_COMPILER --sysroot=$CFG_DEFAULT_ANDROID_NDK_ROOT/platforms/$CFG_DEFAULT_ANDROID_PLATFORM/$ANDROID_PLATFORM_ARCH/"
|
||||||
if [ "$CFG_ANDROID_STYLE_ASSETS" = "yes" ]; then
|
if [ "$CFG_ANDROID_STYLE_ASSETS" = "yes" ]; then
|
||||||
QMAKE_CONFIG="$QMAKE_CONFIG android-style-assets"
|
QMAKE_CONFIG="$QMAKE_CONFIG android-style-assets"
|
||||||
@ -4663,7 +4670,7 @@ elif [ "$CFG_ARCH" != "mips" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
[ "$XPLATFORM_MINGW" = "yes" ] && QMakeVar add styles "windowsxp windowsvista"
|
[ "$XPLATFORM_MINGW" = "yes" ] && QMakeVar add styles "windowsxp windowsvista"
|
||||||
[ "$XPLATFORM_ANDROID" = "yes" ] && QMakeVar add styles "android"
|
[ "$XPLATFORM_ANDROID" != "no" ] && QMakeVar add styles "android"
|
||||||
|
|
||||||
# check IPC support
|
# check IPC support
|
||||||
if ! compileTest unix/ipc_sysv "ipc_sysv" ; then
|
if ! compileTest unix/ipc_sysv "ipc_sysv" ; then
|
||||||
|
@ -250,6 +250,7 @@ manifestmeta.thumbnail.names = "QtCore/Contiguous Cache Example" \
|
|||||||
"QtHelp/*" \
|
"QtHelp/*" \
|
||||||
"QtMultimedia/AudioEngine Example" \
|
"QtMultimedia/AudioEngine Example" \
|
||||||
"QtQml/Extending QML*" \
|
"QtQml/Extending QML*" \
|
||||||
|
"QtQuick/C++ Extensions: Image Response Provider Example" \
|
||||||
"QtQuick/Qt Quick Examples - Accessibility" \
|
"QtQuick/Qt Quick Examples - Accessibility" \
|
||||||
"QtSensors/Qt Sensors - SensorGesture QML Type example" \
|
"QtSensors/Qt Sensors - SensorGesture QML Type example" \
|
||||||
"QtWinExtras/Icon Extractor"
|
"QtWinExtras/Icon Extractor"
|
||||||
|
32
mkspecs/android-clang/qmake.conf
Normal file
32
mkspecs/android-clang/qmake.conf
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# qmake configuration for building with android-g++
|
||||||
|
MAKEFILE_GENERATOR = UNIX
|
||||||
|
QMAKE_PLATFORM = android
|
||||||
|
QMAKE_COMPILER = gcc clang llvm
|
||||||
|
|
||||||
|
CONFIG += android_install unversioned_soname unversioned_libname android_deployment_settings
|
||||||
|
|
||||||
|
include(../common/linux.conf)
|
||||||
|
include(../common/clang.conf)
|
||||||
|
include(../common/android-base-head.conf)
|
||||||
|
|
||||||
|
NDK_LLVM_PATH = $$NDK_ROOT/toolchains/llvm/prebuilt/$$NDK_HOST
|
||||||
|
QMAKE_CC = $$NDK_LLVM_PATH/bin/clang
|
||||||
|
QMAKE_CXX = $$NDK_LLVM_PATH/bin/clang++
|
||||||
|
QMAKE_GCC = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLS_PREFIX-g++
|
||||||
|
|
||||||
|
equals(ANDROID_TARGET_ARCH, armeabi-v7a): \
|
||||||
|
QMAKE_CFLAGS = -target armv7-none-linux-androideabi
|
||||||
|
else: equals(ANDROID_TARGET_ARCH, armeabi): \
|
||||||
|
QMAKE_CFLAGS = -target armv5te-none-linux-androideabi
|
||||||
|
else: equals(ANDROID_TARGET_ARCH, arm64-v8a): \
|
||||||
|
QMAKE_CFLAGS = -target aarch64-none-linux-android
|
||||||
|
else: equals(ANDROID_TARGET_ARCH, x86): \
|
||||||
|
QMAKE_CFLAGS = -target i686-none-linux-android
|
||||||
|
else: equals(ANDROID_TARGET_ARCH, x86_64): \
|
||||||
|
QMAKE_CFLAGS = -target x86_64-none-linux-android
|
||||||
|
else: equals(ANDROID_TARGET_ARCH, mips): \
|
||||||
|
QMAKE_CFLAGS += -target mipsel-none-linux-android
|
||||||
|
else: equals(ANDROID_TARGET_ARCH, mips64): \
|
||||||
|
QMAKE_CFLAGS = -target mips64el-none-linux-android
|
||||||
|
|
||||||
|
include(../common/android-base-tail.conf)
|
176
mkspecs/android-clang/qplatformdefs.h
Normal file
176
mkspecs/android-clang/qplatformdefs.h
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2015 The Qt Company Ltd.
|
||||||
|
** Contact: http://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the qmake spec of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:LGPL21$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at http://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** 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 or version 3 as published by the Free
|
||||||
|
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||||
|
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||||
|
** following information to ensure the GNU Lesser General Public License
|
||||||
|
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** As a special exception, The Qt Company gives you certain additional
|
||||||
|
** rights. These rights are described in The Qt Company LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef QPLATFORMDEFS_H
|
||||||
|
#define QPLATFORMDEFS_H
|
||||||
|
|
||||||
|
#define QT_QPA_DEFAULT_PLATFORM_NAME "android"
|
||||||
|
|
||||||
|
// Get Qt defines/settings
|
||||||
|
|
||||||
|
#include "qglobal.h"
|
||||||
|
|
||||||
|
// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs
|
||||||
|
|
||||||
|
// 1) need to reset default environment if _BSD_SOURCE is defined
|
||||||
|
// 2) need to specify POSIX thread interfaces explicitly in glibc 2.0
|
||||||
|
// 3) it seems older glibc need this to include the X/Open stuff
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
// We are hot - unistd.h should have turned on the specific APIs we requested
|
||||||
|
|
||||||
|
#include <features.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <grp.h>
|
||||||
|
#include <pwd.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <dlfcn.h>
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/ipc.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
|
||||||
|
#ifndef QT_NO_IPV6IFNAME
|
||||||
|
#include <net/if.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _GNU_SOURCE
|
||||||
|
# define _GNU_SOURCE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef QT_LARGEFILE_SUPPORT
|
||||||
|
#define QT_STATBUF struct stat64
|
||||||
|
#define QT_STATBUF4TSTAT struct stat64
|
||||||
|
#define QT_STAT ::stat64
|
||||||
|
#define QT_FSTAT ::fstat64
|
||||||
|
#define QT_LSTAT ::lstat64
|
||||||
|
#define QT_OPEN ::open64
|
||||||
|
#define QT_TRUNCATE ::truncate64
|
||||||
|
#define QT_FTRUNCATE ::ftruncate64
|
||||||
|
#define QT_LSEEK ::lseek64
|
||||||
|
#else
|
||||||
|
#define QT_STATBUF struct stat
|
||||||
|
#define QT_STATBUF4TSTAT struct stat
|
||||||
|
#define QT_STAT ::stat
|
||||||
|
#define QT_FSTAT ::fstat
|
||||||
|
#define QT_LSTAT ::lstat
|
||||||
|
#define QT_OPEN ::open
|
||||||
|
#define QT_TRUNCATE ::truncate
|
||||||
|
#define QT_FTRUNCATE ::ftruncate
|
||||||
|
#define QT_LSEEK ::lseek
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef QT_LARGEFILE_SUPPORT
|
||||||
|
#define QT_FOPEN ::fopen64
|
||||||
|
#define QT_FSEEK ::fseeko64
|
||||||
|
#define QT_FTELL ::ftello64
|
||||||
|
#define QT_FGETPOS ::fgetpos64
|
||||||
|
#define QT_FSETPOS ::fsetpos64
|
||||||
|
#define QT_MMAP ::mmap64
|
||||||
|
#define QT_FPOS_T fpos64_t
|
||||||
|
#define QT_OFF_T off64_t
|
||||||
|
#else
|
||||||
|
#define QT_FOPEN ::fopen
|
||||||
|
#define QT_FSEEK ::fseek
|
||||||
|
#define QT_FTELL ::ftell
|
||||||
|
#define QT_FGETPOS ::fgetpos
|
||||||
|
#define QT_FSETPOS ::fsetpos
|
||||||
|
#define QT_MMAP ::mmap
|
||||||
|
#define QT_FPOS_T fpos_t
|
||||||
|
#define QT_OFF_T long
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define QT_STAT_REG S_IFREG
|
||||||
|
#define QT_STAT_DIR S_IFDIR
|
||||||
|
#define QT_STAT_MASK S_IFMT
|
||||||
|
#define QT_STAT_LNK S_IFLNK
|
||||||
|
#define QT_SOCKET_CONNECT ::connect
|
||||||
|
#define QT_SOCKET_BIND ::bind
|
||||||
|
#define QT_FILENO fileno
|
||||||
|
#define QT_CLOSE ::close
|
||||||
|
#define QT_READ ::read
|
||||||
|
#define QT_WRITE ::write
|
||||||
|
#define QT_ACCESS ::access
|
||||||
|
#define QT_GETCWD ::getcwd
|
||||||
|
#define QT_CHDIR ::chdir
|
||||||
|
#define QT_MKDIR ::mkdir
|
||||||
|
#define QT_RMDIR ::rmdir
|
||||||
|
#define QT_OPEN_LARGEFILE O_LARGEFILE
|
||||||
|
#define QT_OPEN_RDONLY O_RDONLY
|
||||||
|
#define QT_OPEN_WRONLY O_WRONLY
|
||||||
|
#define QT_OPEN_RDWR O_RDWR
|
||||||
|
#define QT_OPEN_CREAT O_CREAT
|
||||||
|
#define QT_OPEN_TRUNC O_TRUNC
|
||||||
|
#define QT_OPEN_APPEND O_APPEND
|
||||||
|
|
||||||
|
// Directory iteration
|
||||||
|
#define QT_DIR DIR
|
||||||
|
|
||||||
|
#define QT_OPENDIR ::opendir
|
||||||
|
#define QT_CLOSEDIR ::closedir
|
||||||
|
|
||||||
|
#if defined(QT_LARGEFILE_SUPPORT) \
|
||||||
|
&& defined(QT_USE_XOPEN_LFS_EXTENSIONS) \
|
||||||
|
&& !defined(QT_NO_READDIR64)
|
||||||
|
#define QT_DIRENT struct dirent64
|
||||||
|
#define QT_READDIR ::readdir64
|
||||||
|
#define QT_READDIR_R ::readdir64_r
|
||||||
|
#else
|
||||||
|
#define QT_DIRENT struct dirent
|
||||||
|
#define QT_READDIR ::readdir
|
||||||
|
#define QT_READDIR_R ::readdir_r
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define QT_SOCKET_CONNECT ::connect
|
||||||
|
#define QT_SOCKET_BIND ::bind
|
||||||
|
|
||||||
|
|
||||||
|
#define QT_SIGNAL_RETTYPE void
|
||||||
|
#define QT_SIGNAL_ARGS int
|
||||||
|
#define QT_SIGNAL_IGNORE SIG_IGN
|
||||||
|
|
||||||
|
#define QT_SOCKLEN_T socklen_t
|
||||||
|
|
||||||
|
#if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500)
|
||||||
|
#define QT_SNPRINTF ::snprintf
|
||||||
|
#define QT_VSNPRINTF ::vsnprintf
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // QPLATFORMDEFS_H
|
@ -7,202 +7,12 @@ CONFIG += android_install unversioned_soname unversioned_libname
|
|||||||
|
|
||||||
include(../common/linux.conf)
|
include(../common/linux.conf)
|
||||||
include(../common/gcc-base-unix.conf)
|
include(../common/gcc-base-unix.conf)
|
||||||
|
include(../common/android-base-head.conf)
|
||||||
|
|
||||||
load(device_config)
|
|
||||||
|
|
||||||
NDK_ROOT = $$(ANDROID_NDK_ROOT)
|
|
||||||
!exists($$NDK_ROOT) {
|
|
||||||
NDK_ROOT = $$DEFAULT_ANDROID_NDK_ROOT
|
|
||||||
}
|
|
||||||
|
|
||||||
NDK_HOST = $$(ANDROID_NDK_HOST)
|
|
||||||
isEmpty(NDK_HOST): NDK_HOST = $$DEFAULT_ANDROID_NDK_HOST
|
|
||||||
|
|
||||||
ANDROID_PLATFORM = $$(ANDROID_NDK_PLATFORM)
|
|
||||||
isEmpty(ANDROID_PLATFORM): ANDROID_PLATFORM = $$DEFAULT_ANDROID_PLATFORM
|
|
||||||
|
|
||||||
ANDROID_TARGET_ARCH = $$(ANDROID_TARGET_ARCH)
|
|
||||||
isEmpty(ANDROID_TARGET_ARCH): ANDROID_TARGET_ARCH = $$DEFAULT_ANDROID_TARGET_ARCH
|
|
||||||
|
|
||||||
NDK_TOOLCHAIN_PREFIX = $$(ANDROID_NDK_TOOLCHAIN_PREFIX)
|
|
||||||
isEmpty(NDK_TOOLCHAIN_PREFIX) {
|
|
||||||
equals(ANDROID_TARGET_ARCH, x86): NDK_TOOLCHAIN_PREFIX = x86
|
|
||||||
else: equals(ANDROID_TARGET_ARCH, x86_64): NDK_TOOLCHAIN_PREFIX = x86_64
|
|
||||||
else: equals(ANDROID_TARGET_ARCH, mips): NDK_TOOLCHAIN_PREFIX = mipsel-linux-android
|
|
||||||
else: equals(ANDROID_TARGET_ARCH, mips64): NDK_TOOLCHAIN_PREFIX = mips64el-linux-android
|
|
||||||
else: equals(ANDROID_TARGET_ARCH, arm64-v8a): NDK_TOOLCHAIN_PREFIX = aarch64-linux-android
|
|
||||||
else: NDK_TOOLCHAIN_PREFIX = arm-linux-androideabi
|
|
||||||
}
|
|
||||||
|
|
||||||
NDK_TOOLS_PREFIX = $$(ANDROID_NDK_TOOLS_PREFIX)
|
|
||||||
isEmpty(NDK_TOOLS_PREFIX) {
|
|
||||||
equals(ANDROID_TARGET_ARCH, x86): NDK_TOOLS_PREFIX = i686-linux-android
|
|
||||||
else: equals(ANDROID_TARGET_ARCH, x86_64): NDK_TOOLS_PREFIX = x86_64-linux-android
|
|
||||||
else: equals(ANDROID_TARGET_ARCH, mips): NDK_TOOLS_PREFIX = mipsel-linux-android
|
|
||||||
else: equals(ANDROID_TARGET_ARCH, mips64): NDK_TOOLS_PREFIX = mips64el-linux-android
|
|
||||||
else: equals(ANDROID_TARGET_ARCH, arm64-v8a): NDK_TOOLS_PREFIX = aarch64-linux-android
|
|
||||||
else: NDK_TOOLS_PREFIX = arm-linux-androideabi
|
|
||||||
}
|
|
||||||
|
|
||||||
NDK_TOOLCHAIN_VERSION = $$(ANDROID_NDK_TOOLCHAIN_VERSION)
|
|
||||||
isEmpty(NDK_TOOLCHAIN_VERSION): NDK_TOOLCHAIN_VERSION = $$DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION
|
|
||||||
|
|
||||||
equals(ANDROID_TARGET_ARCH, x86): ANDROID_ARCHITECTURE = x86
|
|
||||||
else: equals(ANDROID_TARGET_ARCH, x86_64): ANDROID_ARCHITECTURE = x86_64
|
|
||||||
else: equals(ANDROID_TARGET_ARCH, mips): ANDROID_ARCHITECTURE = mips
|
|
||||||
else: equals(ANDROID_TARGET_ARCH, mips64): ANDROID_ARCHITECTURE = mips64
|
|
||||||
else: equals(ANDROID_TARGET_ARCH, arm64-v8a): ANDROID_ARCHITECTURE = arm64
|
|
||||||
else: ANDROID_ARCHITECTURE = arm
|
|
||||||
|
|
||||||
!equals(NDK_TOOLCHAIN_VERSION, 4.4.3): ANDROID_CXXSTL_SUFFIX = -$$NDK_TOOLCHAIN_VERSION
|
|
||||||
|
|
||||||
NDK_TOOLCHAIN = $$NDK_TOOLCHAIN_PREFIX-$$NDK_TOOLCHAIN_VERSION
|
|
||||||
NDK_TOOLCHAIN_PATH = $$NDK_ROOT/toolchains/$$NDK_TOOLCHAIN/prebuilt/$$NDK_HOST
|
|
||||||
|
|
||||||
|
|
||||||
ANDROID_SDK_ROOT = $$(ANDROID_SDK_ROOT)
|
|
||||||
isEmpty(ANDROID_SDK_ROOT): ANDROID_SDK_ROOT = $$DEFAULT_ANDROID_SDK_ROOT
|
|
||||||
|
|
||||||
ANDROID_SDK_BUILD_TOOLS_REVISION = $$(ANDROID_BUILD_TOOLS_REVISION)
|
|
||||||
isEmpty(ANDROID_SDK_BUILD_TOOLS_REVISION) {
|
|
||||||
SDK_BUILD_TOOLS_REVISIONS = $$files($$ANDROID_SDK_ROOT/build-tools/*)
|
|
||||||
for (REVISION, SDK_BUILD_TOOLS_REVISIONS) {
|
|
||||||
BASENAME = $$basename(REVISION)
|
|
||||||
greaterThan(BASENAME, $$ANDROID_SDK_BUILD_TOOLS_REVISION): ANDROID_SDK_BUILD_TOOLS_REVISION = $$BASENAME
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CONFIG += $$ANDROID_PLATFORM
|
|
||||||
ANDROID_PLATFORM_ROOT_PATH = $$NDK_ROOT/platforms/$$ANDROID_PLATFORM/arch-$$ANDROID_ARCHITECTURE/
|
|
||||||
ANDROID_PLATFORM_PATH = $$ANDROID_PLATFORM_ROOT_PATH/usr
|
|
||||||
|
|
||||||
# used to compile platform plugins for android-4 and android-5
|
|
||||||
QMAKE_ANDROID_PLATFORM_INCDIR = $$ANDROID_PLATFORM_PATH/include
|
|
||||||
QMAKE_ANDROID_PLATFORM_LIBDIR = $$ANDROID_PLATFORM_PATH/lib
|
|
||||||
|
|
||||||
ANDROID_SOURCES_CXX_STL_LIBDIR = $$NDK_ROOT/sources/cxx-stl/gnu-libstdc++/$$NDK_TOOLCHAIN_VERSION/libs/$$ANDROID_TARGET_ARCH
|
|
||||||
ANDROID_SOURCES_CXX_STL_INCDIR = $$NDK_ROOT/sources/cxx-stl/gnu-libstdc++/$$NDK_TOOLCHAIN_VERSION/include $$ANDROID_SOURCES_CXX_STL_LIBDIR/include
|
|
||||||
|
|
||||||
equals(ANDROID_TARGET_ARCH, x86_64)|equals(ANDROID_TARGET_ARCH, mips64): \
|
|
||||||
QMAKE_ANDROID_PLATFORM_LIBDIR = $${QMAKE_ANDROID_PLATFORM_LIBDIR}64
|
|
||||||
|
|
||||||
# modifications to g++.conf
|
|
||||||
QMAKE_CC = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLS_PREFIX-gcc
|
QMAKE_CC = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLS_PREFIX-gcc
|
||||||
|
|
||||||
equals(ANDROID_TARGET_ARCH, armeabi-v7a): \
|
|
||||||
QMAKE_CFLAGS = -Wno-psabi -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -DANDROID -Wa,--noexecstack -fno-builtin-memmove
|
|
||||||
else: equals(ANDROID_TARGET_ARCH, armeabi): \
|
|
||||||
QMAKE_CFLAGS = -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -DANDROID -Wa,--noexecstack -fno-builtin-memmove
|
|
||||||
else: equals(ANDROID_TARGET_ARCH, arm64-v8a): \
|
|
||||||
QMAKE_CFLAGS = -ffunction-sections -funwind-tables -fstack-protector -fomit-frame-pointer -fstrict-aliasing -funswitch-loops -finline-limit=300 -DANDROID -Wa,--noexecstack
|
|
||||||
else: equals(ANDROID_TARGET_ARCH, x86): \
|
|
||||||
QMAKE_CFLAGS = -ffunction-sections -funwind-tables -O2 -fomit-frame-pointer -fstrict-aliasing -funswitch-loops -finline-limit=300 -DANDROID -Wa,--noexecstack
|
|
||||||
else: equals(ANDROID_TARGET_ARCH, x86_64): \
|
|
||||||
QMAKE_CFLAGS = -ffunction-sections -funwind-tables -fstack-protector -fomit-frame-pointer -fstrict-aliasing -funswitch-loops -finline-limit=300 -DANDROID -Wa,--noexecstack
|
|
||||||
else: equals(ANDROID_TARGET_ARCH, mips): \
|
|
||||||
QMAKE_CFLAGS = -fno-strict-aliasing -finline-functions -ffunction-sections -funwind-tables -fmessage-length=0 -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop -frename-registers -O2 -fomit-frame-pointer -funswitch-loops -finline-limit=300 -DANDROID -Wa,--noexecstack
|
|
||||||
else: equals(ANDROID_TARGET_ARCH, mips64): \
|
|
||||||
QMAKE_CFLAGS = -fno-strict-aliasing -finline-functions -ffunction-sections -funwind-tables -fmessage-length=0 -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop -frename-registers -fomit-frame-pointer -funswitch-loops -finline-limit=300 -DANDROID -Werror -Wa,--noexecstack
|
|
||||||
|
|
||||||
QMAKE_CFLAGS_WARN_ON = -Wall -Wno-psabi -W
|
|
||||||
QMAKE_CFLAGS_WARN_OFF = -Wno-psabi
|
|
||||||
equals(ANDROID_TARGET_ARCH, x86) {
|
|
||||||
QMAKE_CFLAGS_RELEASE = -O2
|
|
||||||
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO = -g -O2
|
|
||||||
QMAKE_CFLAGS_DEBUG = -g
|
|
||||||
} else: equals(ANDROID_TARGET_ARCH, x86_64) {
|
|
||||||
QMAKE_CFLAGS_RELEASE = -O2
|
|
||||||
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO = -g -O2
|
|
||||||
QMAKE_CFLAGS_DEBUG = -g
|
|
||||||
} else: equals(ANDROID_TARGET_ARCH, mips) {
|
|
||||||
QMAKE_CFLAGS_RELEASE = -O2
|
|
||||||
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO = -g -O2
|
|
||||||
QMAKE_CFLAGS_DEBUG = -g -fno-omit-frame-pointer
|
|
||||||
} else: equals(ANDROID_TARGET_ARCH, mips64) {
|
|
||||||
QMAKE_CFLAGS_RELEASE = -O2
|
|
||||||
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO = -g -O2
|
|
||||||
QMAKE_CFLAGS_DEBUG = -g -fno-omit-frame-pointer
|
|
||||||
} else: equals(ANDROID_TARGET_ARCH, arm64-v8a) {
|
|
||||||
QMAKE_CFLAGS_RELEASE = -O2
|
|
||||||
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO = -g -O2
|
|
||||||
QMAKE_CFLAGS_DEBUG = -g -fno-omit-frame-pointer
|
|
||||||
} else { # arm
|
|
||||||
QMAKE_CFLAGS_RELEASE = -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64
|
|
||||||
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO = -g -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64
|
|
||||||
QMAKE_CFLAGS_DEBUG = -g -marm -O0 -fno-omit-frame-pointer
|
|
||||||
equals(ANDROID_TARGET_ARCH, armeabi):if(equals(NDK_TOOLCHAIN_VERSION, 4.8)|equals(NDK_TOOLCHAIN_VERSION, 4.9)) {
|
|
||||||
DEFINES += QT_OS_ANDROID_GCC_48_WORKAROUND
|
|
||||||
} else {
|
|
||||||
QMAKE_CFLAGS_RELEASE += -mthumb
|
|
||||||
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -mthumb
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QMAKE_CFLAGS_SHLIB = -fPIC
|
|
||||||
QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
|
|
||||||
QMAKE_CFLAGS_THREAD = -D_REENTRANT
|
|
||||||
QMAKE_CFLAGS_HIDESYMS = -fvisibility=hidden
|
|
||||||
|
|
||||||
QMAKE_CXX = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLS_PREFIX-g++
|
QMAKE_CXX = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLS_PREFIX-g++
|
||||||
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -std=c++11
|
QMAKE_GCC = $$QMAKE_CXX
|
||||||
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON
|
|
||||||
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
|
|
||||||
QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE
|
|
||||||
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
|
|
||||||
QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG
|
|
||||||
QMAKE_CXXFLAGS_SHLIB = $$QMAKE_CFLAGS_SHLIB
|
|
||||||
QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
|
|
||||||
QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD
|
|
||||||
QMAKE_CXXFLAGS_HIDESYMS = $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
|
|
||||||
|
|
||||||
QMAKE_LINK = $$QMAKE_CXX
|
QMAKE_CFLAGS =
|
||||||
QMAKE_LINK_SHLIB = $$QMAKE_LINK
|
|
||||||
|
|
||||||
# modifications to linux.conf
|
include(../common/android-base-tail.conf)
|
||||||
QMAKE_AR = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLS_PREFIX-ar cqs
|
|
||||||
QMAKE_OBJCOPY = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLS_PREFIX-objcopy
|
|
||||||
QMAKE_NM = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLS_PREFIX-nm -P
|
|
||||||
|
|
||||||
QMAKE_STRIP =
|
|
||||||
#$$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLS_PREFIX-strip
|
|
||||||
|
|
||||||
QMAKE_RANLIB = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLS_PREFIX-ranlib
|
|
||||||
|
|
||||||
equals(ANDROID_TARGET_ARCH, armeabi)|equals(ANDROID_TARGET_ARCH, armeabi-v7a): \
|
|
||||||
LIBGCC_PATH_FULL = $$system("$$QMAKE_CC -mthumb-interwork -print-libgcc-file-name")
|
|
||||||
else: \
|
|
||||||
LIBGCC_PATH_FULL = $$system("$$QMAKE_CC -print-libgcc-file-name")
|
|
||||||
|
|
||||||
LIBGCC_PATH = $$dirname(LIBGCC_PATH_FULL)
|
|
||||||
|
|
||||||
QMAKE_INCDIR = $$ANDROID_SOURCES_CXX_STL_INCDIR $$QMAKE_ANDROID_PLATFORM_INCDIR
|
|
||||||
QMAKE_LIBDIR = $$ANDROID_SOURCES_CXX_STL_LIBDIR $$QMAKE_ANDROID_PLATFORM_LIBDIR $$LIBGCC_PATH
|
|
||||||
QMAKE_INCDIR_X11 =
|
|
||||||
QMAKE_LIBDIR_X11 =
|
|
||||||
QMAKE_INCDIR_OPENGL = $$QMAKE_ANDROID_PLATFORM_INCDIR
|
|
||||||
QMAKE_LIBDIR_OPENGL = $$QMAKE_ANDROID_PLATFORM_LIBDIR
|
|
||||||
|
|
||||||
QMAKE_LINK = $$QMAKE_CXX
|
|
||||||
QMAKE_LINK_SHLIB = $$QMAKE_CXX
|
|
||||||
QMAKE_LFLAGS = --sysroot=$$ANDROID_PLATFORM_ROOT_PATH
|
|
||||||
QMAKE_RPATHLINK = $$QMAKE_ANDROID_PLATFORM_LIBDIR
|
|
||||||
QMAKE_LFLAGS_APP = -Wl,--no-undefined -Wl,-z,noexecstack -shared
|
|
||||||
QMAKE_LFLAGS_SHLIB = -Wl,--no-undefined -Wl,-z,noexecstack -shared
|
|
||||||
QMAKE_LFLAGS_PLUGIN = $$QMAKE_LFLAGS_SHLIB
|
|
||||||
QMAKE_LFLAGS_NOUNDEF = -Wl,--no-undefined
|
|
||||||
QMAKE_LFLAGS_RPATH = -Wl,-rpath=
|
|
||||||
QMAKE_LFLAGS_RPATHLINK = -Wl,-rpath-link=
|
|
||||||
|
|
||||||
QMAKE_LIBS_PRIVATE = -lgnustl_shared -llog -lz -lm -ldl -lc -lgcc
|
|
||||||
QMAKE_LIBS_X11 =
|
|
||||||
QMAKE_LIBS_THREAD =
|
|
||||||
QMAKE_LIBS_EGL = -lEGL
|
|
||||||
QMAKE_LIBS_OPENGL =
|
|
||||||
QMAKE_LIBS_OPENGL_ES2 = -lGLESv2
|
|
||||||
|
|
||||||
!exists($$NDK_ROOT): error("You need to set the ANDROID_NDK_ROOT environment variable to point to your Android NDK.")
|
|
||||||
|
|
||||||
load(qt_config)
|
|
||||||
|
|
||||||
QMAKE_DEFAULT_LIBDIRS = $$QMAKE_LIBDIR
|
|
||||||
QMAKE_DEFAULT_INCDIRS = $$QMAKE_INCDIR
|
|
||||||
|
78
mkspecs/common/android-base-head.conf
Normal file
78
mkspecs/common/android-base-head.conf
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
load(device_config)
|
||||||
|
|
||||||
|
NDK_ROOT = $$(ANDROID_NDK_ROOT)
|
||||||
|
!exists($$NDK_ROOT) {
|
||||||
|
NDK_ROOT = $$DEFAULT_ANDROID_NDK_ROOT
|
||||||
|
}
|
||||||
|
|
||||||
|
NDK_HOST = $$(ANDROID_NDK_HOST)
|
||||||
|
isEmpty(NDK_HOST): NDK_HOST = $$DEFAULT_ANDROID_NDK_HOST
|
||||||
|
|
||||||
|
ANDROID_PLATFORM = $$(ANDROID_NDK_PLATFORM)
|
||||||
|
isEmpty(ANDROID_PLATFORM): ANDROID_PLATFORM = $$DEFAULT_ANDROID_PLATFORM
|
||||||
|
|
||||||
|
ANDROID_TARGET_ARCH = $$(ANDROID_TARGET_ARCH)
|
||||||
|
isEmpty(ANDROID_TARGET_ARCH): ANDROID_TARGET_ARCH = $$DEFAULT_ANDROID_TARGET_ARCH
|
||||||
|
|
||||||
|
NDK_TOOLCHAIN_PREFIX = $$(ANDROID_NDK_TOOLCHAIN_PREFIX)
|
||||||
|
isEmpty(NDK_TOOLCHAIN_PREFIX) {
|
||||||
|
equals(ANDROID_TARGET_ARCH, x86): NDK_TOOLCHAIN_PREFIX = x86
|
||||||
|
else: equals(ANDROID_TARGET_ARCH, x86_64): NDK_TOOLCHAIN_PREFIX = x86_64
|
||||||
|
else: equals(ANDROID_TARGET_ARCH, mips): NDK_TOOLCHAIN_PREFIX = mipsel-linux-android
|
||||||
|
else: equals(ANDROID_TARGET_ARCH, mips64): NDK_TOOLCHAIN_PREFIX = mips64el-linux-android
|
||||||
|
else: equals(ANDROID_TARGET_ARCH, arm64-v8a): NDK_TOOLCHAIN_PREFIX = aarch64-linux-android
|
||||||
|
else: NDK_TOOLCHAIN_PREFIX = arm-linux-androideabi
|
||||||
|
}
|
||||||
|
|
||||||
|
NDK_TOOLS_PREFIX = $$(ANDROID_NDK_TOOLS_PREFIX)
|
||||||
|
isEmpty(NDK_TOOLS_PREFIX) {
|
||||||
|
equals(ANDROID_TARGET_ARCH, x86): NDK_TOOLS_PREFIX = i686-linux-android
|
||||||
|
else: equals(ANDROID_TARGET_ARCH, x86_64): NDK_TOOLS_PREFIX = x86_64-linux-android
|
||||||
|
else: equals(ANDROID_TARGET_ARCH, mips): NDK_TOOLS_PREFIX = mipsel-linux-android
|
||||||
|
else: equals(ANDROID_TARGET_ARCH, mips64): NDK_TOOLS_PREFIX = mips64el-linux-android
|
||||||
|
else: equals(ANDROID_TARGET_ARCH, arm64-v8a): NDK_TOOLS_PREFIX = aarch64-linux-android
|
||||||
|
else: NDK_TOOLS_PREFIX = arm-linux-androideabi
|
||||||
|
}
|
||||||
|
|
||||||
|
NDK_TOOLCHAIN_VERSION = $$(ANDROID_NDK_TOOLCHAIN_VERSION)
|
||||||
|
isEmpty(NDK_TOOLCHAIN_VERSION): NDK_TOOLCHAIN_VERSION = $$DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION
|
||||||
|
|
||||||
|
equals(ANDROID_TARGET_ARCH, x86): ANDROID_ARCHITECTURE = x86
|
||||||
|
else: equals(ANDROID_TARGET_ARCH, x86_64): ANDROID_ARCHITECTURE = x86_64
|
||||||
|
else: equals(ANDROID_TARGET_ARCH, mips): ANDROID_ARCHITECTURE = mips
|
||||||
|
else: equals(ANDROID_TARGET_ARCH, mips64): ANDROID_ARCHITECTURE = mips64
|
||||||
|
else: equals(ANDROID_TARGET_ARCH, arm64-v8a): ANDROID_ARCHITECTURE = arm64
|
||||||
|
else: ANDROID_ARCHITECTURE = arm
|
||||||
|
|
||||||
|
!equals(NDK_TOOLCHAIN_VERSION, 4.4.3): ANDROID_CXXSTL_SUFFIX = -$$NDK_TOOLCHAIN_VERSION
|
||||||
|
|
||||||
|
NDK_TOOLCHAIN = $$NDK_TOOLCHAIN_PREFIX-$$NDK_TOOLCHAIN_VERSION
|
||||||
|
NDK_TOOLCHAIN_PATH = $$NDK_ROOT/toolchains/$$NDK_TOOLCHAIN/prebuilt/$$NDK_HOST
|
||||||
|
|
||||||
|
|
||||||
|
ANDROID_SDK_ROOT = $$(ANDROID_SDK_ROOT)
|
||||||
|
isEmpty(ANDROID_SDK_ROOT): ANDROID_SDK_ROOT = $$DEFAULT_ANDROID_SDK_ROOT
|
||||||
|
|
||||||
|
ANDROID_SDK_BUILD_TOOLS_REVISION = $$(ANDROID_BUILD_TOOLS_REVISION)
|
||||||
|
isEmpty(ANDROID_SDK_BUILD_TOOLS_REVISION) {
|
||||||
|
SDK_BUILD_TOOLS_REVISIONS = $$files($$ANDROID_SDK_ROOT/build-tools/*)
|
||||||
|
for (REVISION, SDK_BUILD_TOOLS_REVISIONS) {
|
||||||
|
BASENAME = $$basename(REVISION)
|
||||||
|
greaterThan(BASENAME, $$ANDROID_SDK_BUILD_TOOLS_REVISION): ANDROID_SDK_BUILD_TOOLS_REVISION = $$BASENAME
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CONFIG += $$ANDROID_PLATFORM
|
||||||
|
ANDROID_PLATFORM_ROOT_PATH = $$NDK_ROOT/platforms/$$ANDROID_PLATFORM/arch-$$ANDROID_ARCHITECTURE/
|
||||||
|
ANDROID_PLATFORM_PATH = $$ANDROID_PLATFORM_ROOT_PATH/usr
|
||||||
|
|
||||||
|
# used to compile platform plugins for android-4 and android-5
|
||||||
|
QMAKE_ANDROID_PLATFORM_INCDIR = $$ANDROID_PLATFORM_PATH/include
|
||||||
|
QMAKE_ANDROID_PLATFORM_LIBDIR = $$ANDROID_PLATFORM_PATH/lib
|
||||||
|
|
||||||
|
ANDROID_SOURCES_CXX_STL_LIBDIR = $$NDK_ROOT/sources/cxx-stl/gnu-libstdc++/$$NDK_TOOLCHAIN_VERSION/libs/$$ANDROID_TARGET_ARCH
|
||||||
|
ANDROID_SOURCES_CXX_STL_INCDIR = $$NDK_ROOT/sources/cxx-stl/gnu-libstdc++/$$NDK_TOOLCHAIN_VERSION/include $$ANDROID_SOURCES_CXX_STL_LIBDIR/include
|
||||||
|
|
||||||
|
equals(ANDROID_TARGET_ARCH, x86_64)|equals(ANDROID_TARGET_ARCH, mips64): \
|
||||||
|
QMAKE_ANDROID_PLATFORM_LIBDIR = $${QMAKE_ANDROID_PLATFORM_LIBDIR}64
|
||||||
|
|
105
mkspecs/common/android-base-tail.conf
Normal file
105
mkspecs/common/android-base-tail.conf
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
# -fstack-protector-strong offers good protection against stack smashing attacks.
|
||||||
|
# It is (currently) enabled only on Android because we know for sure that Andoroid compilers supports it
|
||||||
|
QMAKE_CFLAGS += -fstack-protector-strong -DANDROID
|
||||||
|
|
||||||
|
equals(ANDROID_TARGET_ARCH, armeabi-v7a): \
|
||||||
|
QMAKE_CFLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -fno-builtin-memmove
|
||||||
|
else: equals(ANDROID_TARGET_ARCH, armeabi): \
|
||||||
|
QMAKE_CFLAGS += -march=armv5te -mtune=xscale -msoft-float -fno-builtin-memmove
|
||||||
|
# -fno-builtin-memmove is used to workaround https://code.google.com/p/android/issues/detail?id=81692
|
||||||
|
|
||||||
|
QMAKE_CFLAGS += --sysroot=$$ANDROID_PLATFORM_ROOT_PATH
|
||||||
|
QMAKE_CFLAGS_WARN_ON = -Wall -W
|
||||||
|
QMAKE_CFLAGS_WARN_OFF =
|
||||||
|
equals(ANDROID_TARGET_ARCH, armeabi-v7a) | equals(ANDROID_TARGET_ARCH, armeabi) {
|
||||||
|
QMAKE_CFLAGS_RELEASE = -Os
|
||||||
|
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO = -g -Os
|
||||||
|
QMAKE_CFLAGS_DEBUG = -g -marm -O0
|
||||||
|
equals(ANDROID_TARGET_ARCH, armeabi):if(equals(NDK_TOOLCHAIN_VERSION, 4.8)|equals(NDK_TOOLCHAIN_VERSION, 4.9)) {
|
||||||
|
DEFINES += QT_OS_ANDROID_GCC_48_WORKAROUND
|
||||||
|
} else {
|
||||||
|
QMAKE_CFLAGS_RELEASE += -mthumb
|
||||||
|
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -mthumb
|
||||||
|
}
|
||||||
|
|
||||||
|
# Don't override our options with -O3
|
||||||
|
QMAKE_CFLAGS_OPTIMIZE_FULL =
|
||||||
|
} else {
|
||||||
|
QMAKE_CFLAGS_RELEASE = -O2
|
||||||
|
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO = -g -O2
|
||||||
|
QMAKE_CFLAGS_DEBUG = -g
|
||||||
|
}
|
||||||
|
|
||||||
|
QMAKE_CFLAGS_SHLIB = -fPIC
|
||||||
|
QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
|
||||||
|
QMAKE_CFLAGS_THREAD = -D_REENTRANT
|
||||||
|
QMAKE_CFLAGS_HIDESYMS = -fvisibility=hidden
|
||||||
|
QMAKE_CFLAGS_NEON = -mfpu=neon
|
||||||
|
|
||||||
|
QMAKE_CXXFLAGS_CXX11 = -std=c++11
|
||||||
|
QMAKE_CXXFLAGS_CXX14 = -std=c++14
|
||||||
|
QMAKE_CXXFLAGS_CXX1Z = -std=c++1z
|
||||||
|
QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++11
|
||||||
|
QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++14
|
||||||
|
QMAKE_CXXFLAGS_GNUCXX1Z = -std=gnu++1z
|
||||||
|
|
||||||
|
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
|
||||||
|
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON
|
||||||
|
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
|
||||||
|
QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE
|
||||||
|
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
|
||||||
|
QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG
|
||||||
|
QMAKE_CXXFLAGS_SHLIB = $$QMAKE_CFLAGS_SHLIB
|
||||||
|
QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
|
||||||
|
QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD
|
||||||
|
QMAKE_CXXFLAGS_HIDESYMS = $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
|
||||||
|
|
||||||
|
# modifications to linux.conf
|
||||||
|
QMAKE_AR = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLS_PREFIX-ar cqs
|
||||||
|
QMAKE_OBJCOPY = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLS_PREFIX-objcopy
|
||||||
|
QMAKE_NM = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLS_PREFIX-nm -P
|
||||||
|
|
||||||
|
QMAKE_STRIP =
|
||||||
|
#$$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLS_PREFIX-strip
|
||||||
|
|
||||||
|
QMAKE_RANLIB = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLS_PREFIX-ranlib
|
||||||
|
|
||||||
|
equals(ANDROID_TARGET_ARCH, armeabi)|equals(ANDROID_TARGET_ARCH, armeabi-v7a): \
|
||||||
|
LIBGCC_PATH_FULL = $$system("$$QMAKE_GCC -mthumb-interwork -print-libgcc-file-name")
|
||||||
|
else: \
|
||||||
|
LIBGCC_PATH_FULL = $$system("$$QMAKE_GCC -print-libgcc-file-name")
|
||||||
|
|
||||||
|
LIBGCC_PATH = $$dirname(LIBGCC_PATH_FULL)
|
||||||
|
|
||||||
|
QMAKE_INCDIR = $$ANDROID_SOURCES_CXX_STL_INCDIR $$QMAKE_ANDROID_PLATFORM_INCDIR
|
||||||
|
QMAKE_LIBDIR = $$ANDROID_SOURCES_CXX_STL_LIBDIR $$QMAKE_ANDROID_PLATFORM_LIBDIR $$LIBGCC_PATH
|
||||||
|
QMAKE_INCDIR_X11 =
|
||||||
|
QMAKE_LIBDIR_X11 =
|
||||||
|
QMAKE_INCDIR_OPENGL = $$QMAKE_ANDROID_PLATFORM_INCDIR
|
||||||
|
QMAKE_LIBDIR_OPENGL = $$QMAKE_ANDROID_PLATFORM_LIBDIR
|
||||||
|
|
||||||
|
QMAKE_LINK = $$QMAKE_GCC
|
||||||
|
QMAKE_LINK_SHLIB = $$QMAKE_GCC
|
||||||
|
QMAKE_LFLAGS = --sysroot=$$ANDROID_PLATFORM_ROOT_PATH
|
||||||
|
QMAKE_RPATHLINK = $$QMAKE_ANDROID_PLATFORM_LIBDIR
|
||||||
|
QMAKE_LFLAGS_APP = -Wl,--no-undefined -Wl,-z,noexecstack -shared
|
||||||
|
QMAKE_LFLAGS_SHLIB = -Wl,--no-undefined -Wl,-z,noexecstack -shared
|
||||||
|
QMAKE_LFLAGS_PLUGIN = $$QMAKE_LFLAGS_SHLIB
|
||||||
|
QMAKE_LFLAGS_NOUNDEF = -Wl,--no-undefined
|
||||||
|
QMAKE_LFLAGS_RPATH = -Wl,-rpath=
|
||||||
|
QMAKE_LFLAGS_RPATHLINK = -Wl,-rpath-link=
|
||||||
|
|
||||||
|
QMAKE_LIBS_PRIVATE = -lgnustl_shared -llog -lz -lm -ldl -lc -lgcc
|
||||||
|
QMAKE_LIBS_X11 =
|
||||||
|
QMAKE_LIBS_THREAD =
|
||||||
|
QMAKE_LIBS_EGL = -lEGL
|
||||||
|
QMAKE_LIBS_OPENGL =
|
||||||
|
QMAKE_LIBS_OPENGL_ES2 = -lGLESv2
|
||||||
|
|
||||||
|
|
||||||
|
!exists($$NDK_ROOT): error("You need to set the ANDROID_NDK_ROOT environment variable to point to your Android NDK.")
|
||||||
|
|
||||||
|
load(qt_config)
|
||||||
|
|
||||||
|
QMAKE_DEFAULT_LIBDIRS = $$QMAKE_LIBDIR
|
||||||
|
QMAKE_DEFAULT_INCDIRS = $$QMAKE_INCDIR
|
@ -12,7 +12,7 @@ isEmpty(QMAKE_XCODE_DEVELOPER_PATH) {
|
|||||||
error("Xcode is not installed in $${QMAKE_XCODE_DEVELOPER_PATH}. Please use xcode-select to choose Xcode installation path.")
|
error("Xcode is not installed in $${QMAKE_XCODE_DEVELOPER_PATH}. Please use xcode-select to choose Xcode installation path.")
|
||||||
|
|
||||||
# Make sure Xcode is set up properly
|
# Make sure Xcode is set up properly
|
||||||
isEmpty($$list($$system("/usr/bin/xcrun -find xcrun 2>/dev/null"))): \
|
isEmpty($$list($$system("/usr/bin/xcrun -find xcodebuild 2>/dev/null"))): \
|
||||||
error("Xcode not set up properly. You may need to confirm the license agreement by running /usr/bin/xcodebuild.")
|
error("Xcode not set up properly. You may need to confirm the license agreement by running /usr/bin/xcodebuild.")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,6 +57,8 @@
|
|||||||
#include <utime.h>
|
#include <utime.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/utsname.h>
|
#include <sys/utsname.h>
|
||||||
#else
|
#else
|
||||||
@ -1515,9 +1517,14 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
|
|||||||
runProcess(&proc, args.at(0).toQString(m_tmp2));
|
runProcess(&proc, args.at(0).toQString(m_tmp2));
|
||||||
return returnBool(proc.exitStatus() == QProcess::NormalExit && proc.exitCode() == 0);
|
return returnBool(proc.exitStatus() == QProcess::NormalExit && proc.exitCode() == 0);
|
||||||
#else
|
#else
|
||||||
return returnBool(system((QLatin1String("cd ")
|
int ec = system((QLatin1String("cd ")
|
||||||
+ IoUtils::shellQuote(QDir::toNativeSeparators(currentDirectory()))
|
+ IoUtils::shellQuote(QDir::toNativeSeparators(currentDirectory()))
|
||||||
+ QLatin1String(" && ") + args.at(0)).toLocal8Bit().constData()) == 0);
|
+ QLatin1String(" && ") + args.at(0)).toLocal8Bit().constData());
|
||||||
|
# ifdef Q_OS_UNIX
|
||||||
|
if (ec != -1 && WIFSIGNALED(ec) && (WTERMSIG(ec) == SIGQUIT || WTERMSIG(ec) == SIGINT))
|
||||||
|
raise(WTERMSIG(ec));
|
||||||
|
# endif
|
||||||
|
return returnBool(ec == 0);
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
return ReturnTrue;
|
return ReturnTrue;
|
||||||
|
@ -429,15 +429,13 @@ qint64 QFSFileEnginePrivate::nativeWrite(const char *data, qint64 len)
|
|||||||
if (fileHandle == INVALID_HANDLE_VALUE)
|
if (fileHandle == INVALID_HANDLE_VALUE)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
qint64 bytesToWrite = DWORD(len); // <- lossy
|
qint64 bytesToWrite = len;
|
||||||
|
|
||||||
// Writing on Windows fails with ERROR_NO_SYSTEM_RESOURCES when
|
// Writing on Windows fails with ERROR_NO_SYSTEM_RESOURCES when
|
||||||
// the chunks are too large, so we limit the block size to 32MB.
|
// the chunks are too large, so we limit the block size to 32MB.
|
||||||
static const DWORD maxBlockSize = 32 * 1024 * 1024;
|
const DWORD blockSize = DWORD(qMin(bytesToWrite, qint64(32 * 1024 * 1024)));
|
||||||
|
|
||||||
qint64 totalWritten = 0;
|
qint64 totalWritten = 0;
|
||||||
do {
|
do {
|
||||||
DWORD blockSize = qMin<DWORD>(bytesToWrite, maxBlockSize);
|
|
||||||
DWORD bytesWritten;
|
DWORD bytesWritten;
|
||||||
if (!WriteFile(fileHandle, data + totalWritten, blockSize, &bytesWritten, NULL)) {
|
if (!WriteFile(fileHandle, data + totalWritten, blockSize, &bytesWritten, NULL)) {
|
||||||
if (totalWritten == 0) {
|
if (totalWritten == 0) {
|
||||||
|
@ -51,8 +51,12 @@
|
|||||||
#include "qcoreapplication.h"
|
#include "qcoreapplication.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined(Q_OS_QNX) && !defined(Q_OS_WIN) && !defined(Q_OS_ANDROID) && !defined(Q_OS_INTEGRITY)
|
||||||
|
# define USE_SYSTEM_MKDTEMP
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h> // mkdtemp
|
#include <stdlib.h> // mkdtemp
|
||||||
#if defined(Q_OS_QNX) || defined(Q_OS_WIN) || defined(Q_OS_ANDROID) || defined(Q_OS_INTEGRITY)
|
#ifndef USE_SYSTEM_MKDTEMP
|
||||||
#include <private/qfilesystemengine_p.h>
|
#include <private/qfilesystemengine_p.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -98,8 +102,7 @@ static QString defaultTemplateName()
|
|||||||
return QDir::tempPath() + QLatin1Char('/') + baseName + QLatin1String("-XXXXXX");
|
return QDir::tempPath() + QLatin1Char('/') + baseName + QLatin1String("-XXXXXX");
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(Q_OS_QNX ) || defined(Q_OS_WIN) || defined(Q_OS_ANDROID) || defined(Q_OS_INTEGRITY)
|
#ifndef USE_SYSTEM_MKDTEMP
|
||||||
|
|
||||||
static int nextRand(int &v)
|
static int nextRand(int &v)
|
||||||
{
|
{
|
||||||
int r = v % 62;
|
int r = v % 62;
|
||||||
@ -109,30 +112,28 @@ static int nextRand(int &v)
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
QPair<QString, bool> q_mkdtemp(char *templateName)
|
QPair<QString, bool> q_mkdtemp(QString templateName)
|
||||||
{
|
{
|
||||||
|
Q_ASSERT(templateName.endsWith(QLatin1String("XXXXXX")));
|
||||||
|
|
||||||
static const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
static const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
||||||
|
|
||||||
const size_t length = strlen(templateName);
|
const int length = templateName.size();
|
||||||
|
|
||||||
char *XXXXXX = templateName + length - 6;
|
QChar *XXXXXX = templateName.data() + length - 6;
|
||||||
|
|
||||||
Q_ASSERT((length >= 6u) && strncmp(XXXXXX, "XXXXXX", 6) == 0);
|
|
||||||
|
|
||||||
for (int i = 0; i < 256; ++i) {
|
for (int i = 0; i < 256; ++i) {
|
||||||
int v = qrand();
|
int v = qrand();
|
||||||
|
|
||||||
/* Fill in the random bits. */
|
/* Fill in the random bits. */
|
||||||
XXXXXX[0] = letters[nextRand(v)];
|
XXXXXX[0] = QLatin1Char(letters[nextRand(v)]);
|
||||||
XXXXXX[1] = letters[nextRand(v)];
|
XXXXXX[1] = QLatin1Char(letters[nextRand(v)]);
|
||||||
XXXXXX[2] = letters[nextRand(v)];
|
XXXXXX[2] = QLatin1Char(letters[nextRand(v)]);
|
||||||
XXXXXX[3] = letters[nextRand(v)];
|
XXXXXX[3] = QLatin1Char(letters[nextRand(v)]);
|
||||||
XXXXXX[4] = letters[nextRand(v)];
|
XXXXXX[4] = QLatin1Char(letters[nextRand(v)]);
|
||||||
XXXXXX[5] = letters[v % 62];
|
XXXXXX[5] = QLatin1Char(letters[v % 62]);
|
||||||
|
|
||||||
QString templateNameStr = QFile::decodeName(templateName);
|
QFileSystemEntry fileSystemEntry(templateName);
|
||||||
|
|
||||||
QFileSystemEntry fileSystemEntry(templateNameStr);
|
|
||||||
if (QFileSystemEngine::createDirectory(fileSystemEntry, false)) {
|
if (QFileSystemEngine::createDirectory(fileSystemEntry, false)) {
|
||||||
QSystemError error;
|
QSystemError error;
|
||||||
QFileSystemEngine::setPermissions(fileSystemEntry,
|
QFileSystemEngine::setPermissions(fileSystemEntry,
|
||||||
@ -141,10 +142,10 @@ QPair<QString, bool> q_mkdtemp(char *templateName)
|
|||||||
QFile::ExeOwner, error);
|
QFile::ExeOwner, error);
|
||||||
if (error.error() != 0) {
|
if (error.error() != 0) {
|
||||||
if (!QFileSystemEngine::removeDirectory(fileSystemEntry, false))
|
if (!QFileSystemEngine::removeDirectory(fileSystemEntry, false))
|
||||||
qWarning() << "Unable to remove unused directory" << templateNameStr;
|
qWarning() << "Unable to remove unused directory" << templateName;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
return qMakePair(QFile::decodeName(templateName), true);
|
return qMakePair(templateName, true);
|
||||||
}
|
}
|
||||||
# ifdef Q_OS_WIN
|
# ifdef Q_OS_WIN
|
||||||
const int exists = ERROR_ALREADY_EXISTS;
|
const int exists = ERROR_ALREADY_EXISTS;
|
||||||
@ -159,7 +160,7 @@ QPair<QString, bool> q_mkdtemp(char *templateName)
|
|||||||
return qMakePair(qt_error_string(), false);
|
return qMakePair(qt_error_string(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else // defined(Q_OS_QNX ) || defined(Q_OS_WIN) || defined(Q_OS_ANDROID)
|
#else // !USE_SYSTEM_MKDTEMP
|
||||||
|
|
||||||
QPair<QString, bool> q_mkdtemp(char *templateName)
|
QPair<QString, bool> q_mkdtemp(char *templateName)
|
||||||
{
|
{
|
||||||
@ -167,14 +168,21 @@ QPair<QString, bool> q_mkdtemp(char *templateName)
|
|||||||
return qMakePair(ok ? QFile::decodeName(templateName) : qt_error_string(), ok);
|
return qMakePair(ok ? QFile::decodeName(templateName) : qt_error_string(), ok);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif // USE_SYSTEM_MKDTEMP
|
||||||
|
|
||||||
void QTemporaryDirPrivate::create(const QString &templateName)
|
void QTemporaryDirPrivate::create(const QString &templateName)
|
||||||
{
|
{
|
||||||
|
#ifndef USE_SYSTEM_MKDTEMP
|
||||||
|
QString buffer = templateName;
|
||||||
|
if (!buffer.endsWith(QLatin1String("XXXXXX")))
|
||||||
|
buffer += QLatin1String("XXXXXX");
|
||||||
|
const QPair<QString, bool> result = q_mkdtemp(buffer);
|
||||||
|
#else // !USE_SYSTEM_MKDTEMP
|
||||||
QByteArray buffer = QFile::encodeName(templateName);
|
QByteArray buffer = QFile::encodeName(templateName);
|
||||||
if (!buffer.endsWith("XXXXXX"))
|
if (!buffer.endsWith("XXXXXX"))
|
||||||
buffer += "XXXXXX";
|
buffer += "XXXXXX";
|
||||||
QPair<QString, bool> result = q_mkdtemp(buffer.data()); // modifies buffer
|
QPair<QString, bool> result = q_mkdtemp(buffer.data()); // modifies buffer
|
||||||
|
#endif // USE_SYSTEM_MKDTEMP
|
||||||
pathOrError = result.first;
|
pathOrError = result.first;
|
||||||
success = result.second;
|
success = result.second;
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -44,6 +44,11 @@ Q_CORE_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
|
|||||||
{
|
{
|
||||||
Q_UNUSED(reserved)
|
Q_UNUSED(reserved)
|
||||||
|
|
||||||
|
static bool initialized = false;
|
||||||
|
if (initialized)
|
||||||
|
return JNI_VERSION_1_6;
|
||||||
|
initialized = true;
|
||||||
|
|
||||||
typedef union {
|
typedef union {
|
||||||
JNIEnv *nenv;
|
JNIEnv *nenv;
|
||||||
void *venv;
|
void *venv;
|
||||||
|
@ -124,8 +124,8 @@ QT_DEPRECATED inline bool setYMD(int y, int m, int d)
|
|||||||
static bool isValid(int y, int m, int d);
|
static bool isValid(int y, int m, int d);
|
||||||
static bool isLeapYear(int year);
|
static bool isLeapYear(int year);
|
||||||
|
|
||||||
static Q_DECL_CONSTEXPR inline QDate fromJulianDay(qint64 jd)
|
static Q_DECL_CONSTEXPR inline QDate fromJulianDay(qint64 jd_)
|
||||||
{ return jd >= minJd() && jd <= maxJd() ? QDate(jd) : QDate() ; }
|
{ return jd_ >= minJd() && jd_ <= maxJd() ? QDate(jd_) : QDate() ; }
|
||||||
Q_DECL_CONSTEXPR inline qint64 toJulianDay() const { return jd; }
|
Q_DECL_CONSTEXPR inline qint64 toJulianDay() const { return jd; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -493,14 +493,14 @@ private:
|
|||||||
|
|
||||||
void deref() Q_DECL_NOTHROW
|
void deref() Q_DECL_NOTHROW
|
||||||
{ deref(d); }
|
{ deref(d); }
|
||||||
static void deref(Data *d) Q_DECL_NOTHROW
|
static void deref(Data *dd) Q_DECL_NOTHROW
|
||||||
{
|
{
|
||||||
if (!d) return;
|
if (!dd) return;
|
||||||
if (!d->strongref.deref()) {
|
if (!dd->strongref.deref()) {
|
||||||
d->destroy();
|
dd->destroy();
|
||||||
}
|
}
|
||||||
if (!d->weakref.deref())
|
if (!dd->weakref.deref())
|
||||||
delete d;
|
delete dd;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class X>
|
template <class X>
|
||||||
|
@ -656,10 +656,11 @@ QTimeZonePrivate *QUtcTimeZonePrivate::clone()
|
|||||||
|
|
||||||
QTimeZonePrivate::Data QUtcTimeZonePrivate::data(qint64 forMSecsSinceEpoch) const
|
QTimeZonePrivate::Data QUtcTimeZonePrivate::data(qint64 forMSecsSinceEpoch) const
|
||||||
{
|
{
|
||||||
Data d = invalidData();
|
Data d;
|
||||||
d.abbreviation = m_abbreviation;
|
d.abbreviation = m_abbreviation;
|
||||||
d.atMSecsSinceEpoch = forMSecsSinceEpoch;
|
d.atMSecsSinceEpoch = forMSecsSinceEpoch;
|
||||||
d.offsetFromUtc = m_offsetFromUtc;
|
d.standardTimeOffset = d.offsetFromUtc = m_offsetFromUtc;
|
||||||
|
d.daylightTimeOffset = 0;
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -907,7 +907,7 @@ QTimeZonePrivate::Data QTzTimeZonePrivate::data(qint64 forMSecsSinceEpoch) const
|
|||||||
{
|
{
|
||||||
// If the required time is after the last transition and we have a POSIX rule then use it
|
// If the required time is after the last transition and we have a POSIX rule then use it
|
||||||
if (m_tranTimes.size() > 0 && m_tranTimes.last().atMSecsSinceEpoch < forMSecsSinceEpoch
|
if (m_tranTimes.size() > 0 && m_tranTimes.last().atMSecsSinceEpoch < forMSecsSinceEpoch
|
||||||
&&!m_posixRule.isEmpty() && forMSecsSinceEpoch >= 0) {
|
&& !m_posixRule.isEmpty() && forMSecsSinceEpoch >= 0) {
|
||||||
const int year = QDateTime::fromMSecsSinceEpoch(forMSecsSinceEpoch, Qt::UTC).date().year();
|
const int year = QDateTime::fromMSecsSinceEpoch(forMSecsSinceEpoch, Qt::UTC).date().year();
|
||||||
const int lastMSecs = (m_tranTimes.size() > 0) ? m_tranTimes.last().atMSecsSinceEpoch : 0;
|
const int lastMSecs = (m_tranTimes.size() > 0) ? m_tranTimes.last().atMSecsSinceEpoch : 0;
|
||||||
QVector<QTimeZonePrivate::Data> posixTrans = calculatePosixTransitions(m_posixRule, year - 1,
|
QVector<QTimeZonePrivate::Data> posixTrans = calculatePosixTransitions(m_posixRule, year - 1,
|
||||||
@ -951,7 +951,7 @@ QTimeZonePrivate::Data QTzTimeZonePrivate::nextTransition(qint64 afterMSecsSince
|
|||||||
{
|
{
|
||||||
// If the required time is after the last transition and we have a POSIX rule then use it
|
// If the required time is after the last transition and we have a POSIX rule then use it
|
||||||
if (m_tranTimes.size() > 0 && m_tranTimes.last().atMSecsSinceEpoch < afterMSecsSinceEpoch
|
if (m_tranTimes.size() > 0 && m_tranTimes.last().atMSecsSinceEpoch < afterMSecsSinceEpoch
|
||||||
&&!m_posixRule.isEmpty() && afterMSecsSinceEpoch >= 0) {
|
&& !m_posixRule.isEmpty() && afterMSecsSinceEpoch >= 0) {
|
||||||
const int year = QDateTime::fromMSecsSinceEpoch(afterMSecsSinceEpoch, Qt::UTC).date().year();
|
const int year = QDateTime::fromMSecsSinceEpoch(afterMSecsSinceEpoch, Qt::UTC).date().year();
|
||||||
const int lastMSecs = (m_tranTimes.size() > 0) ? m_tranTimes.last().atMSecsSinceEpoch : 0;
|
const int lastMSecs = (m_tranTimes.size() > 0) ? m_tranTimes.last().atMSecsSinceEpoch : 0;
|
||||||
QVector<QTimeZonePrivate::Data> posixTrans = calculatePosixTransitions(m_posixRule, year - 1,
|
QVector<QTimeZonePrivate::Data> posixTrans = calculatePosixTransitions(m_posixRule, year - 1,
|
||||||
@ -977,7 +977,7 @@ QTimeZonePrivate::Data QTzTimeZonePrivate::previousTransition(qint64 beforeMSecs
|
|||||||
{
|
{
|
||||||
// If the required time is after the last transition and we have a POSIX rule then use it
|
// If the required time is after the last transition and we have a POSIX rule then use it
|
||||||
if (m_tranTimes.size() > 0 && m_tranTimes.last().atMSecsSinceEpoch < beforeMSecsSinceEpoch
|
if (m_tranTimes.size() > 0 && m_tranTimes.last().atMSecsSinceEpoch < beforeMSecsSinceEpoch
|
||||||
&&!m_posixRule.isEmpty() && beforeMSecsSinceEpoch > 0) {
|
&& !m_posixRule.isEmpty() && beforeMSecsSinceEpoch > 0) {
|
||||||
const int year = QDateTime::fromMSecsSinceEpoch(beforeMSecsSinceEpoch, Qt::UTC).date().year();
|
const int year = QDateTime::fromMSecsSinceEpoch(beforeMSecsSinceEpoch, Qt::UTC).date().year();
|
||||||
const int lastMSecs = (m_tranTimes.size() > 0) ? m_tranTimes.last().atMSecsSinceEpoch : 0;
|
const int lastMSecs = (m_tranTimes.size() > 0) ? m_tranTimes.last().atMSecsSinceEpoch : 0;
|
||||||
QVector<QTimeZonePrivate::Data> posixTrans = calculatePosixTransitions(m_posixRule, year - 1,
|
QVector<QTimeZonePrivate::Data> posixTrans = calculatePosixTransitions(m_posixRule, year - 1,
|
||||||
|
@ -1181,6 +1181,10 @@ inline int QXmlStreamReaderPrivate::fastScanLiteralContent()
|
|||||||
}
|
}
|
||||||
// fall through
|
// fall through
|
||||||
default:
|
default:
|
||||||
|
if (c < 0x20) {
|
||||||
|
putChar(c);
|
||||||
|
return n;
|
||||||
|
}
|
||||||
textBuffer += QChar(c);
|
textBuffer += QChar(c);
|
||||||
++n;
|
++n;
|
||||||
}
|
}
|
||||||
|
@ -4251,6 +4251,8 @@ void QImage::setAlphaChannel(const QImage &alphaChannel)
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
const QImage sourceImage = alphaChannel.convertToFormat(QImage::Format_RGB32);
|
const QImage sourceImage = alphaChannel.convertToFormat(QImage::Format_RGB32);
|
||||||
|
if (sourceImage.isNull())
|
||||||
|
return;
|
||||||
const uchar *src_data = sourceImage.d->data;
|
const uchar *src_data = sourceImage.d->data;
|
||||||
uchar *dest_data = d->data;
|
uchar *dest_data = d->data;
|
||||||
for (int y=0; y<h; ++y) {
|
for (int y=0; y<h; ++y) {
|
||||||
|
@ -534,7 +534,7 @@ public:
|
|||||||
};
|
};
|
||||||
class Attribute {
|
class Attribute {
|
||||||
public:
|
public:
|
||||||
Attribute(AttributeType t, int s, int l, QVariant val) : type(t), start(s), length(l), value(qMove(val)) {}
|
Attribute(AttributeType typ, int s, int l, QVariant val) : type(typ), start(s), length(l), value(qMove(val)) {}
|
||||||
AttributeType type;
|
AttributeType type;
|
||||||
|
|
||||||
int start;
|
int start;
|
||||||
|
@ -581,6 +581,20 @@ void QPlatformWindow::invalidateSurface()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QSize fixInitialSize(QSize size, const QWindow *w,
|
||||||
|
int defaultWidth, int defaultHeight)
|
||||||
|
{
|
||||||
|
if (size.width() == 0) {
|
||||||
|
const int minWidth = w->minimumWidth();
|
||||||
|
size.setWidth(minWidth > 0 ? minWidth : defaultWidth);
|
||||||
|
}
|
||||||
|
if (size.height() == 0) {
|
||||||
|
const int minHeight = w->minimumHeight();
|
||||||
|
size.setHeight(minHeight > 0 ? minHeight : defaultHeight);
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Helper function to get initial geometry on windowing systems which do not
|
Helper function to get initial geometry on windowing systems which do not
|
||||||
do smart positioning and also do not provide a means of centering a
|
do smart positioning and also do not provide a means of centering a
|
||||||
@ -593,19 +607,18 @@ void QPlatformWindow::invalidateSurface()
|
|||||||
QRect QPlatformWindow::initialGeometry(const QWindow *w,
|
QRect QPlatformWindow::initialGeometry(const QWindow *w,
|
||||||
const QRect &initialGeometry, int defaultWidth, int defaultHeight)
|
const QRect &initialGeometry, int defaultWidth, int defaultHeight)
|
||||||
{
|
{
|
||||||
|
if (!w->isTopLevel()) {
|
||||||
|
const qreal factor = QHighDpiScaling::factor(w);
|
||||||
|
const QSize size = fixInitialSize(QHighDpi::fromNative(initialGeometry.size(), factor),
|
||||||
|
w, defaultWidth, defaultHeight);
|
||||||
|
return QRect(initialGeometry.topLeft(), QHighDpi::toNative(size, factor));
|
||||||
|
}
|
||||||
const QScreen *screen = effectiveScreen(w);
|
const QScreen *screen = effectiveScreen(w);
|
||||||
if (!screen)
|
if (!screen)
|
||||||
return initialGeometry;
|
return initialGeometry;
|
||||||
QRect rect(QHighDpi::fromNativePixels(initialGeometry, w));
|
QRect rect(QHighDpi::fromNativePixels(initialGeometry, w));
|
||||||
if (rect.width() == 0) {
|
rect.setSize(fixInitialSize(rect.size(), w, defaultWidth, defaultHeight));
|
||||||
const int minWidth = w->minimumWidth();
|
if (qt_window_private(const_cast<QWindow*>(w))->positionAutomatic
|
||||||
rect.setWidth(minWidth > 0 ? minWidth : defaultWidth);
|
|
||||||
}
|
|
||||||
if (rect.height() == 0) {
|
|
||||||
const int minHeight = w->minimumHeight();
|
|
||||||
rect.setHeight(minHeight > 0 ? minHeight : defaultHeight);
|
|
||||||
}
|
|
||||||
if (w->isTopLevel() && qt_window_private(const_cast<QWindow*>(w))->positionAutomatic
|
|
||||||
&& w->type() != Qt::Popup) {
|
&& w->type() != Qt::Popup) {
|
||||||
const QRect availableGeometry = screen->availableGeometry();
|
const QRect availableGeometry = screen->availableGeometry();
|
||||||
// Center unless the geometry ( + unknown window frame) is too large for the screen).
|
// Center unless the geometry ( + unknown window frame) is too large for the screen).
|
||||||
|
@ -76,6 +76,14 @@ QT_BEGIN_NAMESPACE
|
|||||||
#define GL_TEXTURE_COMPARE_FUNC 0x884D
|
#define GL_TEXTURE_COMPARE_FUNC 0x884D
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// use GL_APICALL only on Android + __clang__
|
||||||
|
#if !defined(Q_OS_ANDROID) || !defined(__clang__)
|
||||||
|
# undef GL_APICALL
|
||||||
|
# define GL_APICALL
|
||||||
|
#elif !defined(GL_APICALL)
|
||||||
|
# define GL_APICALL
|
||||||
|
#endif
|
||||||
|
|
||||||
class QOpenGLContext;
|
class QOpenGLContext;
|
||||||
|
|
||||||
class QOpenGLTextureHelper
|
class QOpenGLTextureHelper
|
||||||
@ -754,15 +762,15 @@ private:
|
|||||||
// OpenGL 1.3
|
// OpenGL 1.3
|
||||||
void (QOPENGLF_APIENTRYP GetCompressedTexImage)(GLenum target, GLint level, GLvoid *img);
|
void (QOPENGLF_APIENTRYP GetCompressedTexImage)(GLenum target, GLint level, GLvoid *img);
|
||||||
void (QOPENGLF_APIENTRYP CompressedTexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
|
void (QOPENGLF_APIENTRYP CompressedTexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
|
||||||
void (QOPENGLF_APIENTRYP CompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
|
GL_APICALL void (QOPENGLF_APIENTRYP CompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
|
||||||
void (QOPENGLF_APIENTRYP CompressedTexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
|
void (QOPENGLF_APIENTRYP CompressedTexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
|
||||||
void (QOPENGLF_APIENTRYP CompressedTexImage1D)(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
|
void (QOPENGLF_APIENTRYP CompressedTexImage1D)(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
|
||||||
void (QOPENGLF_APIENTRYP CompressedTexImage2D)(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
|
GL_APICALL void (QOPENGLF_APIENTRYP CompressedTexImage2D)(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
|
||||||
void (QOPENGLF_APIENTRYP CompressedTexImage3D)(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
|
void (QOPENGLF_APIENTRYP CompressedTexImage3D)(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
|
||||||
void (QOPENGLF_APIENTRYP ActiveTexture)(GLenum texture);
|
GL_APICALL void (QOPENGLF_APIENTRYP ActiveTexture)(GLenum texture);
|
||||||
|
|
||||||
// OpenGL 3.0
|
// OpenGL 3.0
|
||||||
void (QOPENGLF_APIENTRYP GenerateMipmap)(GLenum target);
|
GL_APICALL void (QOPENGLF_APIENTRYP GenerateMipmap)(GLenum target);
|
||||||
|
|
||||||
// OpenGL 3.2
|
// OpenGL 3.2
|
||||||
void (QOPENGLF_APIENTRYP TexImage3DMultisample)(GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
|
void (QOPENGLF_APIENTRYP TexImage3DMultisample)(GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
|
||||||
|
@ -358,9 +358,11 @@ QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject()
|
|||||||
|
|
||||||
Q_D(QOpenGLVertexArrayObject);
|
Q_D(QOpenGLVertexArrayObject);
|
||||||
QOpenGLContext *oldContext = 0;
|
QOpenGLContext *oldContext = 0;
|
||||||
|
QSurface *oldContextSurface = 0;
|
||||||
QScopedPointer<QOffscreenSurface> offscreenSurface;
|
QScopedPointer<QOffscreenSurface> offscreenSurface;
|
||||||
if (d->context && ctx && d->context != ctx) {
|
if (d->context && ctx && d->context != ctx) {
|
||||||
oldContext = ctx;
|
oldContext = ctx;
|
||||||
|
oldContextSurface = ctx->surface();
|
||||||
// Cannot just make the current surface current again with another context.
|
// Cannot just make the current surface current again with another context.
|
||||||
// The format may be incompatible and some platforms (iOS) may impose
|
// The format may be incompatible and some platforms (iOS) may impose
|
||||||
// restrictions on using a window with different contexts. Create an
|
// restrictions on using a window with different contexts. Create an
|
||||||
@ -380,7 +382,7 @@ QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject()
|
|||||||
destroy();
|
destroy();
|
||||||
|
|
||||||
if (oldContext) {
|
if (oldContext) {
|
||||||
if (!oldContext->makeCurrent(oldContext->surface()))
|
if (!oldContext->makeCurrent(oldContextSurface))
|
||||||
qWarning("QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject() failed to restore current context");
|
qWarning("QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject() failed to restore current context");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,9 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
#ifndef QFONTCACHE_DECREASE_TRIGGER_LIMIT
|
||||||
|
# define QFONTCACHE_DECREASE_TRIGGER_LIMIT 256
|
||||||
|
#endif
|
||||||
|
|
||||||
bool QFontDef::exactMatch(const QFontDef &other) const
|
bool QFontDef::exactMatch(const QFontDef &other) const
|
||||||
{
|
{
|
||||||
@ -2800,7 +2802,7 @@ void QFontCache::insertEngineData(const QFontDef &def, QFontEngineData *engineDa
|
|||||||
|
|
||||||
engineData->ref.ref();
|
engineData->ref.ref();
|
||||||
// Decrease now rather than waiting
|
// Decrease now rather than waiting
|
||||||
if (total_cost > min_cost * 2)
|
if (total_cost > min_cost * 2 && engineDataCache.size() >= QFONTCACHE_DECREASE_TRIGGER_LIMIT)
|
||||||
decreaseCache();
|
decreaseCache();
|
||||||
|
|
||||||
engineDataCache.insert(def, engineData);
|
engineDataCache.insert(def, engineData);
|
||||||
@ -2849,7 +2851,7 @@ void QFontCache::insertEngine(const Key &key, QFontEngine *engine, bool insertMu
|
|||||||
#endif
|
#endif
|
||||||
engine->ref.ref();
|
engine->ref.ref();
|
||||||
// Decrease now rather than waiting
|
// Decrease now rather than waiting
|
||||||
if (total_cost > min_cost * 2)
|
if (total_cost > min_cost * 2 && engineCache.size() >= QFONTCACHE_DECREASE_TRIGGER_LIMIT)
|
||||||
decreaseCache();
|
decreaseCache();
|
||||||
|
|
||||||
Engine data(engine);
|
Engine data(engine);
|
||||||
|
@ -91,7 +91,7 @@ void QConnmanEngine::initialize()
|
|||||||
this, SLOT(updateServices(ConnmanMapList,QList<QDBusObjectPath>)));
|
this, SLOT(updateServices(ConnmanMapList,QList<QDBusObjectPath>)));
|
||||||
|
|
||||||
connect(connmanManager,SIGNAL(servicesReady(QStringList)),this,SLOT(servicesReady(QStringList)));
|
connect(connmanManager,SIGNAL(servicesReady(QStringList)),this,SLOT(servicesReady(QStringList)));
|
||||||
connect(connmanManager,SIGNAL(scanFinished()),this,SLOT(finishedScan()));
|
connect(connmanManager,SIGNAL(scanFinished(bool)),this,SLOT(finishedScan(bool)));
|
||||||
|
|
||||||
foreach (const QString &servPath, connmanManager->getServices()) {
|
foreach (const QString &servPath, connmanManager->getServices()) {
|
||||||
addServiceConfiguration(servPath);
|
addServiceConfiguration(servPath);
|
||||||
@ -203,11 +203,15 @@ void QConnmanEngine::requestUpdate()
|
|||||||
|
|
||||||
void QConnmanEngine::doRequestUpdate()
|
void QConnmanEngine::doRequestUpdate()
|
||||||
{
|
{
|
||||||
connmanManager->requestScan("wifi");
|
bool scanned = connmanManager->requestScan("wifi");
|
||||||
|
if (!scanned)
|
||||||
|
Q_EMIT updateCompleted();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QConnmanEngine::finishedScan()
|
void QConnmanEngine::finishedScan(bool error)
|
||||||
{
|
{
|
||||||
|
if (error)
|
||||||
|
Q_EMIT updateCompleted();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QConnmanEngine::updateServices(const ConnmanMapList &changed, const QList<QDBusObjectPath> &removed)
|
void QConnmanEngine::updateServices(const ConnmanMapList &changed, const QList<QDBusObjectPath> &removed)
|
||||||
|
@ -100,7 +100,7 @@ private Q_SLOTS:
|
|||||||
void updateServices(const ConnmanMapList &changed, const QList<QDBusObjectPath> &removed);
|
void updateServices(const ConnmanMapList &changed, const QList<QDBusObjectPath> &removed);
|
||||||
|
|
||||||
void servicesReady(const QStringList &);
|
void servicesReady(const QStringList &);
|
||||||
void finishedScan();
|
void finishedScan(bool error);
|
||||||
void changedModem();
|
void changedModem();
|
||||||
void serviceStateChanged(const QString &state);
|
void serviceStateChanged(const QString &state);
|
||||||
void configurationChange(QConnmanServiceInterface * service);
|
void configurationChange(QConnmanServiceInterface * service);
|
||||||
|
@ -249,13 +249,16 @@ QStringList QConnmanManagerInterface::getServices()
|
|||||||
return servicesList;
|
return servicesList;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QConnmanManagerInterface::requestScan(const QString &type)
|
bool QConnmanManagerInterface::requestScan(const QString &type)
|
||||||
{
|
{
|
||||||
|
bool scanned = false;
|
||||||
Q_FOREACH (QConnmanTechnologyInterface *tech, technologiesMap) {
|
Q_FOREACH (QConnmanTechnologyInterface *tech, technologiesMap) {
|
||||||
if (tech->type() == type) {
|
if (tech->type() == type) {
|
||||||
tech->scan();
|
tech->scan();
|
||||||
|
scanned = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return scanned;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QConnmanManagerInterface::technologyAdded(const QDBusObjectPath &path, const QVariantMap &)
|
void QConnmanManagerInterface::technologyAdded(const QDBusObjectPath &path, const QVariantMap &)
|
||||||
@ -265,7 +268,7 @@ void QConnmanManagerInterface::technologyAdded(const QDBusObjectPath &path, cons
|
|||||||
QConnmanTechnologyInterface *tech;
|
QConnmanTechnologyInterface *tech;
|
||||||
tech = new QConnmanTechnologyInterface(path.path(),this);
|
tech = new QConnmanTechnologyInterface(path.path(),this);
|
||||||
technologiesMap.insert(path.path(),tech);
|
technologiesMap.insert(path.path(),tech);
|
||||||
connect(tech,SIGNAL(scanFinished()),this,SIGNAL(scanFinished()));
|
connect(tech,SIGNAL(scanFinished(bool)),this,SIGNAL(scanFinished(bool)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -501,7 +504,11 @@ void QConnmanTechnologyInterface::scan()
|
|||||||
|
|
||||||
void QConnmanTechnologyInterface::scanReply(QDBusPendingCallWatcher *call)
|
void QConnmanTechnologyInterface::scanReply(QDBusPendingCallWatcher *call)
|
||||||
{
|
{
|
||||||
Q_EMIT scanFinished();
|
QDBusPendingReply<QVariantMap> props_reply = *call;
|
||||||
|
if (props_reply.isError()) {
|
||||||
|
qDebug() << props_reply.error().message();
|
||||||
|
}
|
||||||
|
Q_EMIT scanFinished(props_reply.isError());
|
||||||
call->deleteLater();
|
call->deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,7 +115,7 @@ public:
|
|||||||
bool getOfflineMode();
|
bool getOfflineMode();
|
||||||
QStringList getTechnologies();
|
QStringList getTechnologies();
|
||||||
QStringList getServices();
|
QStringList getServices();
|
||||||
void requestScan(const QString &type);
|
bool requestScan(const QString &type);
|
||||||
|
|
||||||
QHash<QString, QConnmanTechnologyInterface *> technologiesMap;
|
QHash<QString, QConnmanTechnologyInterface *> technologiesMap;
|
||||||
|
|
||||||
@ -126,7 +126,7 @@ Q_SIGNALS:
|
|||||||
void servicesChanged(const ConnmanMapList&, const QList<QDBusObjectPath> &);
|
void servicesChanged(const ConnmanMapList&, const QList<QDBusObjectPath> &);
|
||||||
|
|
||||||
void servicesReady(const QStringList &);
|
void servicesReady(const QStringList &);
|
||||||
void scanFinished();
|
void scanFinished(bool error);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void connectNotify(const QMetaMethod &signal);
|
void connectNotify(const QMetaMethod &signal);
|
||||||
@ -211,7 +211,7 @@ public:
|
|||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void propertyChanged(const QString &, const QDBusVariant &value);
|
void propertyChanged(const QString &, const QDBusVariant &value);
|
||||||
void propertyChangedContext(const QString &,const QString &,const QDBusVariant &);
|
void propertyChangedContext(const QString &,const QString &,const QDBusVariant &);
|
||||||
void scanFinished();
|
void scanFinished(bool error);
|
||||||
protected:
|
protected:
|
||||||
void connectNotify(const QMetaMethod &signal);
|
void connectNotify(const QMetaMethod &signal);
|
||||||
QVariant getProperty(const QString &);
|
QVariant getProperty(const QString &);
|
||||||
|
@ -840,6 +840,11 @@ QT_END_NAMESPACE
|
|||||||
|
|
||||||
Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void */*reserved*/)
|
Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void */*reserved*/)
|
||||||
{
|
{
|
||||||
|
static bool initialized = false;
|
||||||
|
if (initialized)
|
||||||
|
return JNI_VERSION_1_6;
|
||||||
|
initialized = true;
|
||||||
|
|
||||||
QT_USE_NAMESPACE
|
QT_USE_NAMESPACE
|
||||||
typedef union {
|
typedef union {
|
||||||
JNIEnv *nativeEnvironment;
|
JNIEnv *nativeEnvironment;
|
||||||
|
@ -75,6 +75,7 @@ private:
|
|||||||
uchar mime_type;
|
uchar mime_type;
|
||||||
mutable QPointer<QMimeData> mime;
|
mutable QPointer<QMimeData> mime;
|
||||||
mutable bool mac_mime_source;
|
mutable bool mac_mime_source;
|
||||||
|
bool resolvingBeforeDestruction;
|
||||||
static OSStatus promiseKeeper(PasteboardRef, PasteboardItemID, CFStringRef, void *);
|
static OSStatus promiseKeeper(PasteboardRef, PasteboardItemID, CFStringRef, void *);
|
||||||
void clear_helper();
|
void clear_helper();
|
||||||
public:
|
public:
|
||||||
|
@ -87,6 +87,7 @@ QMacPasteboard::QMacPasteboard(PasteboardRef p, uchar mt)
|
|||||||
mime_type = mt ? mt : uchar(QMacInternalPasteboardMime::MIME_ALL);
|
mime_type = mt ? mt : uchar(QMacInternalPasteboardMime::MIME_ALL);
|
||||||
paste = p;
|
paste = p;
|
||||||
CFRetain(paste);
|
CFRetain(paste);
|
||||||
|
resolvingBeforeDestruction = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QMacPasteboard::QMacPasteboard(uchar mt)
|
QMacPasteboard::QMacPasteboard(uchar mt)
|
||||||
@ -100,6 +101,7 @@ QMacPasteboard::QMacPasteboard(uchar mt)
|
|||||||
} else {
|
} else {
|
||||||
qDebug("PasteBoard: Error creating pasteboard: [%d]", (int)err);
|
qDebug("PasteBoard: Error creating pasteboard: [%d]", (int)err);
|
||||||
}
|
}
|
||||||
|
resolvingBeforeDestruction = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QMacPasteboard::QMacPasteboard(CFStringRef name, uchar mt)
|
QMacPasteboard::QMacPasteboard(CFStringRef name, uchar mt)
|
||||||
@ -113,23 +115,14 @@ QMacPasteboard::QMacPasteboard(CFStringRef name, uchar mt)
|
|||||||
} else {
|
} else {
|
||||||
qDebug("PasteBoard: Error creating pasteboard: %s [%d]", QCFString::toQString(name).toLatin1().constData(), (int)err);
|
qDebug("PasteBoard: Error creating pasteboard: %s [%d]", QCFString::toQString(name).toLatin1().constData(), (int)err);
|
||||||
}
|
}
|
||||||
|
resolvingBeforeDestruction = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QMacPasteboard::~QMacPasteboard()
|
QMacPasteboard::~QMacPasteboard()
|
||||||
{
|
{
|
||||||
// commit all promises for paste after exit close
|
// commit all promises for paste after exit close
|
||||||
for (int i = 0; i < promises.count(); ++i) {
|
resolvingBeforeDestruction = true;
|
||||||
const Promise &promise = promises.at(i);
|
PasteboardResolvePromises(paste);
|
||||||
// At this point app teardown has started and control is somewhere in the Q[Core]Application
|
|
||||||
// destructor. Skip "lazy" promises where the application has not provided data;
|
|
||||||
// the application will generally not be in a state to provide it.
|
|
||||||
if (promise.dataRequestType == LazyRequest)
|
|
||||||
continue;
|
|
||||||
QCFString flavor = QCFString(promise.convertor->flavorFor(promise.mime));
|
|
||||||
NSInteger pbItemId = promise.itemId;
|
|
||||||
promiseKeeper(paste, reinterpret_cast<PasteboardItemID>(pbItemId), flavor, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (paste)
|
if (paste)
|
||||||
CFRelease(paste);
|
CFRelease(paste);
|
||||||
}
|
}
|
||||||
@ -181,7 +174,7 @@ OSStatus QMacPasteboard::promiseKeeper(PasteboardRef paste, PasteboardItemID id,
|
|||||||
// to request the data from the application.
|
// to request the data from the application.
|
||||||
QVariant promiseData;
|
QVariant promiseData;
|
||||||
if (promise.dataRequestType == LazyRequest) {
|
if (promise.dataRequestType == LazyRequest) {
|
||||||
if (!promise.mimeData.isNull())
|
if (!qpaste->resolvingBeforeDestruction && !promise.mimeData.isNull())
|
||||||
promiseData = promise.mimeData->variantData(promise.mime);
|
promiseData = promise.mimeData->variantData(promise.mime);
|
||||||
} else {
|
} else {
|
||||||
promiseData = promise.variantData;
|
promiseData = promise.variantData;
|
||||||
|
@ -407,8 +407,13 @@ QVariant QWindowsTheme::themeHint(ThemeHint hint) const
|
|||||||
return QVariant(booleanSystemParametersInfo(SPI_GETSNAPTODEFBUTTON, false));
|
return QVariant(booleanSystemParametersInfo(SPI_GETSNAPTODEFBUTTON, false));
|
||||||
case ContextMenuOnMouseRelease:
|
case ContextMenuOnMouseRelease:
|
||||||
return QVariant(true);
|
return QVariant(true);
|
||||||
case WheelScrollLines:
|
case WheelScrollLines: {
|
||||||
return QVariant(int(dWordSystemParametersInfo(SPI_GETWHEELSCROLLLINES, 3)));
|
int result = 3;
|
||||||
|
const DWORD scrollLines = dWordSystemParametersInfo(SPI_GETWHEELSCROLLLINES, DWORD(result));
|
||||||
|
if (scrollLines != DWORD(-1)) // Special value meaning "scroll one screen", unimplemented in Qt.
|
||||||
|
result = int(scrollLines);
|
||||||
|
return QVariant(result);
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -254,7 +254,7 @@
|
|||||||
\li \c -nocrashhandler \br
|
\li \c -nocrashhandler \br
|
||||||
Disables the crash handler on Unix platforms.
|
Disables the crash handler on Unix platforms.
|
||||||
On Windows, it re-enables the Windows Error Reporting dialog, which is
|
On Windows, it re-enables the Windows Error Reporting dialog, which is
|
||||||
turned off by default.
|
turned off by default. This is useful for debugging crashes.
|
||||||
|
|
||||||
\li \c -platform \e name \br
|
\li \c -platform \e name \br
|
||||||
This command line argument applies to all Qt applications, but might be
|
This command line argument applies to all Qt applications, but might be
|
||||||
|
@ -453,7 +453,7 @@ Q_TESTLIB_EXPORT void qtest_qParseArgs(int argc, char *argv[], bool qml)
|
|||||||
" -mousedelay ms : Set default delay for mouse simulation to ms milliseconds\n"
|
" -mousedelay ms : Set default delay for mouse simulation to ms milliseconds\n"
|
||||||
" -maxwarnings n : Sets the maximum amount of messages to output.\n"
|
" -maxwarnings n : Sets the maximum amount of messages to output.\n"
|
||||||
" 0 means unlimited, default: 2000\n"
|
" 0 means unlimited, default: 2000\n"
|
||||||
" -nocrashhandler : Disables the crash handler\n"
|
" -nocrashhandler : Disables the crash handler. Useful for debugging crashes.\n"
|
||||||
"\n"
|
"\n"
|
||||||
" Benchmarking options:\n"
|
" Benchmarking options:\n"
|
||||||
#ifdef QTESTLIB_USE_VALGRIND
|
#ifdef QTESTLIB_USE_VALGRIND
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2016 The Qt Company Ltd.
|
** Copyright (C) 2016 The Qt Company Ltd.
|
||||||
|
** Copyright (C) 2016 Olivier Goffart <ogoffart@woboq.com>
|
||||||
** Contact: https://www.qt.io/licensing/
|
** Contact: https://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the tools applications of the Qt Toolkit.
|
** This file is part of the tools applications of the Qt Toolkit.
|
||||||
@ -179,6 +180,8 @@ Type Moc::parseType()
|
|||||||
case Q_SLOT_TOKEN:
|
case Q_SLOT_TOKEN:
|
||||||
type.name += lexem();
|
type.name += lexem();
|
||||||
return type;
|
return type;
|
||||||
|
case NOTOKEN:
|
||||||
|
return type;
|
||||||
default:
|
default:
|
||||||
prev();
|
prev();
|
||||||
break;
|
break;
|
||||||
@ -213,6 +216,8 @@ Type Moc::parseType()
|
|||||||
type.name += lexem();
|
type.name += lexem();
|
||||||
isVoid |= (lookup(0) == VOID);
|
isVoid |= (lookup(0) == VOID);
|
||||||
break;
|
break;
|
||||||
|
case NOTOKEN:
|
||||||
|
return type;
|
||||||
default:
|
default:
|
||||||
prev();
|
prev();
|
||||||
;
|
;
|
||||||
|
@ -1923,7 +1923,7 @@ NSView *QMacStylePrivate::cocoaControl(QCocoaWidget widget) const
|
|||||||
}
|
}
|
||||||
case QCocoaPushButton: {
|
case QCocoaPushButton: {
|
||||||
NSButton *bc = (NSButton *)bv;
|
NSButton *bc = (NSButton *)bv;
|
||||||
bc.buttonType = NSMomentaryPushButton;
|
bc.buttonType = NSMomentaryLightButton;
|
||||||
bc.bezelStyle = NSRoundedBezelStyle;
|
bc.bezelStyle = NSRoundedBezelStyle;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include <qfile.h>
|
#include <qfile.h>
|
||||||
#include <qdir.h>
|
#include <qdir.h>
|
||||||
#include <qset.h>
|
#include <qset.h>
|
||||||
|
#include <qtextcodec.h>
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
@ -108,6 +109,38 @@ void tst_QTemporaryDir::getSetCheck()
|
|||||||
QCOMPARE(true, obj1.autoRemove());
|
QCOMPARE(true, obj1.autoRemove());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool canHandleUnicodeFileNames()
|
||||||
|
{
|
||||||
|
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
|
||||||
|
return true;
|
||||||
|
#else
|
||||||
|
// Check for UTF-8 by converting the Euro symbol (see tst_utf8)
|
||||||
|
return QFile::encodeName(QString(QChar(0x20AC))) == QByteArrayLiteral("\342\202\254");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static QString hanTestText()
|
||||||
|
{
|
||||||
|
QString text;
|
||||||
|
text += QChar(0x65B0);
|
||||||
|
text += QChar(0x5E10);
|
||||||
|
text += QChar(0x6237);
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
static QString umlautTestText()
|
||||||
|
{
|
||||||
|
QString text;
|
||||||
|
text += QChar(0xc4);
|
||||||
|
text += QChar(0xe4);
|
||||||
|
text += QChar(0xd6);
|
||||||
|
text += QChar(0xf6);
|
||||||
|
text += QChar(0xdc);
|
||||||
|
text += QChar(0xfc);
|
||||||
|
text += QChar(0xdf);
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
void tst_QTemporaryDir::fileTemplate_data()
|
void tst_QTemporaryDir::fileTemplate_data()
|
||||||
{
|
{
|
||||||
QTest::addColumn<QString>("constructorTemplate");
|
QTest::addColumn<QString>("constructorTemplate");
|
||||||
@ -124,6 +157,14 @@ void tst_QTemporaryDir::fileTemplate_data()
|
|||||||
QTest::newRow("constructor with XXXX suffix") << "qt_XXXXXX_XXXX" << "qt_";
|
QTest::newRow("constructor with XXXX suffix") << "qt_XXXXXX_XXXX" << "qt_";
|
||||||
QTest::newRow("constructor with XXXX prefix") << "qt_XXXX" << "qt_";
|
QTest::newRow("constructor with XXXX prefix") << "qt_XXXX" << "qt_";
|
||||||
QTest::newRow("constructor with XXXXX prefix") << "qt_XXXXX" << "qt_";
|
QTest::newRow("constructor with XXXXX prefix") << "qt_XXXXX" << "qt_";
|
||||||
|
if (canHandleUnicodeFileNames()) {
|
||||||
|
// Test Umlauts (contained in Latin1)
|
||||||
|
QString prefix = "qt_" + umlautTestText();
|
||||||
|
QTest::newRow("Umlauts") << (prefix + "XXXXXX") << prefix;
|
||||||
|
// Test Chinese
|
||||||
|
prefix = "qt_" + hanTestText();
|
||||||
|
QTest::newRow("Chinese characters") << (prefix + "XXXXXX") << prefix;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QTemporaryDir::fileTemplate()
|
void tst_QTemporaryDir::fileTemplate()
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include <qfile.h>
|
#include <qfile.h>
|
||||||
#include <qdir.h>
|
#include <qdir.h>
|
||||||
#include <qset.h>
|
#include <qset.h>
|
||||||
|
#include <qtextcodec.h>
|
||||||
|
|
||||||
#if defined(Q_OS_WIN)
|
#if defined(Q_OS_WIN)
|
||||||
# include <windows.h>
|
# include <windows.h>
|
||||||
@ -140,6 +141,38 @@ void tst_QTemporaryFile::getSetCheck()
|
|||||||
QCOMPARE(true, obj1.autoRemove());
|
QCOMPARE(true, obj1.autoRemove());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool canHandleUnicodeFileNames()
|
||||||
|
{
|
||||||
|
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
|
||||||
|
return true;
|
||||||
|
#else
|
||||||
|
// Check for UTF-8 by converting the Euro symbol (see tst_utf8)
|
||||||
|
return QFile::encodeName(QString(QChar(0x20AC))) == QByteArrayLiteral("\342\202\254");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static QString hanTestText()
|
||||||
|
{
|
||||||
|
QString text;
|
||||||
|
text += QChar(0x65B0);
|
||||||
|
text += QChar(0x5E10);
|
||||||
|
text += QChar(0x6237);
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
static QString umlautTestText()
|
||||||
|
{
|
||||||
|
QString text;
|
||||||
|
text += QChar(0xc4);
|
||||||
|
text += QChar(0xe4);
|
||||||
|
text += QChar(0xd6);
|
||||||
|
text += QChar(0xf6);
|
||||||
|
text += QChar(0xdc);
|
||||||
|
text += QChar(0xfc);
|
||||||
|
text += QChar(0xdf);
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
void tst_QTemporaryFile::fileTemplate_data()
|
void tst_QTemporaryFile::fileTemplate_data()
|
||||||
{
|
{
|
||||||
QTest::addColumn<QString>("constructorTemplate");
|
QTest::addColumn<QString>("constructorTemplate");
|
||||||
@ -166,6 +199,14 @@ void tst_QTemporaryFile::fileTemplate_data()
|
|||||||
QTest::newRow("set template, with xxx") << "" << "qt_" << ".xxx" << "qt_XXXXXX.xxx";
|
QTest::newRow("set template, with xxx") << "" << "qt_" << ".xxx" << "qt_XXXXXX.xxx";
|
||||||
QTest::newRow("set template, with >6 X's") << "" << "qt_" << ".xxx" << "qt_XXXXXXXXXXXXXX.xxx";
|
QTest::newRow("set template, with >6 X's") << "" << "qt_" << ".xxx" << "qt_XXXXXXXXXXXXXX.xxx";
|
||||||
QTest::newRow("set template, with >6 X's, no suffix") << "" << "qt_" << "" << "qt_XXXXXXXXXXXXXX";
|
QTest::newRow("set template, with >6 X's, no suffix") << "" << "qt_" << "" << "qt_XXXXXXXXXXXXXX";
|
||||||
|
if (canHandleUnicodeFileNames()) {
|
||||||
|
// Test Umlauts (contained in Latin1)
|
||||||
|
QString prefix = "qt_" + umlautTestText();
|
||||||
|
QTest::newRow("Umlauts") << (prefix + "XXXXXX") << prefix << QString() << QString();
|
||||||
|
// Test Chinese
|
||||||
|
prefix = "qt_" + hanTestText();
|
||||||
|
QTest::newRow("Chinese characters") << (prefix + "XXXXXX") << prefix << QString() << QString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QTemporaryFile::fileTemplate()
|
void tst_QTemporaryFile::fileTemplate()
|
||||||
|
@ -557,6 +557,8 @@ private slots:
|
|||||||
void checkCommentIndentation_data() const;
|
void checkCommentIndentation_data() const;
|
||||||
void crashInXmlStreamReader() const;
|
void crashInXmlStreamReader() const;
|
||||||
void write8bitCodec() const;
|
void write8bitCodec() const;
|
||||||
|
void invalidStringCharacters_data() const;
|
||||||
|
void invalidStringCharacters() const;
|
||||||
void hasError() const;
|
void hasError() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -1614,6 +1616,63 @@ void tst_QXmlStream::write8bitCodec() const
|
|||||||
QVERIFY(decodedText.startsWith(expected));
|
QVERIFY(decodedText.startsWith(expected));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_QXmlStream::invalidStringCharacters() const
|
||||||
|
{
|
||||||
|
// test scan in attributes
|
||||||
|
QFETCH(QString, testString);
|
||||||
|
QFETCH(bool, expectedResultNoError);
|
||||||
|
|
||||||
|
QByteArray values = testString.toUtf8();
|
||||||
|
QBuffer inBuffer;
|
||||||
|
inBuffer.setData(values);
|
||||||
|
QVERIFY(inBuffer.open(QIODevice::ReadOnly));
|
||||||
|
QXmlStreamReader reader(&inBuffer);
|
||||||
|
do {
|
||||||
|
reader.readNext();
|
||||||
|
} while (!reader.atEnd());
|
||||||
|
QCOMPARE((reader.error() == QXmlStreamReader::NoError), expectedResultNoError);
|
||||||
|
}
|
||||||
|
|
||||||
|
void tst_QXmlStream::invalidStringCharacters_data() const
|
||||||
|
{
|
||||||
|
// test scan in attributes
|
||||||
|
QTest::addColumn<bool>("expectedResultNoError");
|
||||||
|
QTest::addColumn<QString>("testString");
|
||||||
|
QChar ctrl(0x1A);
|
||||||
|
QTest::newRow("utf8, attributes, legal") << true << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'/>");
|
||||||
|
QTest::newRow("utf8, attributes, only char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='")+ctrl+QString("'/>");
|
||||||
|
QTest::newRow("utf8, attributes, 1st char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='")+ctrl+QString("abc'/>");
|
||||||
|
QTest::newRow("utf8, attributes, middle char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='abc")+ctrl+QString("efgx'/>");
|
||||||
|
QTest::newRow("utf8, attributes, last char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='abcde")+ctrl+QString("'/>");
|
||||||
|
//
|
||||||
|
QTest::newRow("utf8, text, legal") << true << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'>abcx1A</root>");
|
||||||
|
QTest::newRow("utf8, text, only, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'>")+ctrl+QString("</root>");
|
||||||
|
QTest::newRow("utf8, text, 1st char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'>abc")+ctrl+QString("def</root>");
|
||||||
|
QTest::newRow("utf8, text, middle char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'>abc")+ctrl+QString("efg</root>");
|
||||||
|
QTest::newRow("utf8, text, last char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'>abc")+ctrl+QString("</root>");
|
||||||
|
//
|
||||||
|
QTest::newRow("utf8, cdata text, legal") << true << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'><![CDATA[abcdefghi]]></root>");
|
||||||
|
QTest::newRow("utf8, cdata text, only, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'><![CDATA[")+ctrl+QString("]]></root>");
|
||||||
|
QTest::newRow("utf8, cdata text, 1st char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'><![CDATA[")+ctrl+QString("abcdefghi]]></root>");
|
||||||
|
QTest::newRow("utf8, cdata text, middle char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'><![CDATA[abcd")+ctrl+QString("efghi]]></root>");
|
||||||
|
QTest::newRow("utf8, cdata text, last char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'><![CDATA[abcdefghi")+ctrl+QString("]]></root>");
|
||||||
|
//
|
||||||
|
QTest::newRow("utf8, mixed, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='a")+ctrl+QString("a'><![CDATA[abcdefghi")+ctrl+QString("]]></root>");
|
||||||
|
QTest::newRow("utf8, tag") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><roo")+ctrl+QString("t attr='aa'><![CDATA[abcdefghi]]></roo")+ctrl+QString("t>");
|
||||||
|
//
|
||||||
|
QTest::newRow("utf8, attributes, 1st char, legal escaping hex") << true << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='a '/>");
|
||||||
|
QTest::newRow("utf8, attributes, 1st char, control escaping hex") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aaa'/>");
|
||||||
|
QTest::newRow("utf8, attributes, middle char, legal escaping hex") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aaaaaa'/>");
|
||||||
|
QTest::newRow("utf8, attributes, last char, control escaping hex") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aaa'/>");
|
||||||
|
QTest::newRow("utf8, attributes, 1st char, legal escaping dec") << true << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='a '/>");
|
||||||
|
QTest::newRow("utf8, attributes, 1st char, control escaping dec") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aaaa'/>");
|
||||||
|
QTest::newRow("utf8, attributes, middle char, legal escaping dec") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aaaaaaaa'/>");
|
||||||
|
QTest::newRow("utf8, attributes, last char, control escaping dec") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aaaaaa'/>");
|
||||||
|
QTest::newRow("utf8, tag escaping") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'><![CDATA[abcdefghi]]></root>");
|
||||||
|
//
|
||||||
|
QTest::newRow("utf8, mix of illegal control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='a�a'><![CDATA[abcdefghi]]></root>");
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
#include "tst_qxmlstream.moc"
|
#include "tst_qxmlstream.moc"
|
||||||
// vim: et:ts=4:sw=4:sts=4
|
// vim: et:ts=4:sw=4:sts=4
|
||||||
|
@ -1938,6 +1938,13 @@ void tst_Moc::warnings_data()
|
|||||||
<< 1
|
<< 1
|
||||||
<< QString("IGNORE_ALL_STDOUT")
|
<< QString("IGNORE_ALL_STDOUT")
|
||||||
<< QString(":-1: Error: Unexpected character in macro argument list.");
|
<< QString(":-1: Error: Unexpected character in macro argument list.");
|
||||||
|
|
||||||
|
QTest::newRow("QTBUG-54815: Crash on invalid input")
|
||||||
|
<< QByteArray("class M{(})F<{}d000000000000000#0")
|
||||||
|
<< QStringList()
|
||||||
|
<< 0
|
||||||
|
<< QString()
|
||||||
|
<< QString("standard input:1: Note: No relevant classes found. No output generated.");
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_Moc::warnings()
|
void tst_Moc::warnings()
|
||||||
|
@ -4,6 +4,7 @@ SUBDIRS = bearerex \
|
|||||||
filetest \
|
filetest \
|
||||||
foreignwindows \
|
foreignwindows \
|
||||||
gestures \
|
gestures \
|
||||||
|
highdpi \
|
||||||
inputmethodhints \
|
inputmethodhints \
|
||||||
keypadnavigation \
|
keypadnavigation \
|
||||||
lance \
|
lance \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user