aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitattributes1
-rw-r--r--coin/module_config.yaml189
-rw-r--r--licenses/The-Qt-Company-Commercial1964
-rw-r--r--recipes-qt/qt5/nativesdk-qtbase_git.bb2
-rw-r--r--recipes-qt/qt5/ogl-runtime_git.bb6
-rw-r--r--recipes-qt/qt5/qt3d/0001-Allow-a-tools-only-build.patch1
-rw-r--r--recipes-qt/qt5/qt3d_git.bb2
-rw-r--r--recipes-qt/qt5/qt5-creator/0002-Fix-QPainterPath-related-compilation-errors-in-Qt-5..patch115
-rw-r--r--recipes-qt/qt5/qt5-creator_git.bb1
-rw-r--r--recipes-qt/qt5/qt5-git.inc4
-rw-r--r--recipes-qt/qt5/qtbase-native_git.bb2
-rw-r--r--recipes-qt/qt5/qtbase_git.bb5
-rw-r--r--recipes-qt/qt5/qtdeclarative_git.bb2
-rw-r--r--recipes-qt/qt5/qtlocation_git.bb2
-rw-r--r--recipes-qt/qt5/qtmultimedia_git.bb2
-rw-r--r--recipes-qt/qt5/qtquick3d_git.bb2
-rw-r--r--recipes-qt/qt5/qtquicktimeline_git.bb13
-rw-r--r--recipes-qt/qt5/qtremoteobjects_git.bb2
-rw-r--r--recipes-qt/qt5/qtserialport_git.bb2
-rw-r--r--recipes-qt/qt5/qttools_git.bb3
-rw-r--r--recipes-qt/qt5/qtvirtualkeyboard_git.bb2
-rw-r--r--recipes-qt/qt5/qtwayland_git.bb2
-rw-r--r--recipes-qt/qt5/qtwebengine/chromium/0008-chromium-Fix-build-on-32bit-arches-with-64bit-time_t.patch19
-rw-r--r--recipes-qt/qt5/qtwebengine_git.bb2
-rw-r--r--recipes-qt/qt5/qtwebkit/0001-Do-not-skip-build-for-cross-compile.patch (renamed from recipes-qt/qt5/qtwebkit/0002-Do-not-skip-build-for-cross-compile.patch)0
-rw-r--r--recipes-qt/qt5/qtwebkit/0001-Port-build-to-python3.patch3845
-rw-r--r--recipes-qt/qt5/qtwebkit/0002-Fix-build-with-non-glibc-libc-on-musl.patch (renamed from recipes-qt/qt5/qtwebkit/0003-Fix-build-with-non-glibc-libc-on-musl.patch)0
-rw-r--r--recipes-qt/qt5/qtwebkit/0003-Fix-build-bug-for-armv32-BE.patch (renamed from recipes-qt/qt5/qtwebkit/0004-Fix-build-bug-for-armv32-BE.patch)0
-rw-r--r--recipes-qt/qt5/qtwebkit/0004-PlatformQt.cmake-Do-not-generate-hardcoded-include-p.patch (renamed from recipes-qt/qt5/qtwebkit/0005-PlatformQt.cmake-Do-not-generate-hardcoded-include-p.patch)0
-rw-r--r--recipes-qt/qt5/qtwebkit/0005-Riscv-Add-support-for-riscv.patch83
-rw-r--r--recipes-qt/qt5/qtwebkit_git.bb18
-rw-r--r--recipes-qt/qwt/qwt-qt5/0001-fix-qpainterpath-build-issues.patch228
-rw-r--r--recipes-qt/qwt/qwt-qt5_6.1.4.bb1
33 files changed, 1688 insertions, 4832 deletions
diff --git a/.gitattributes b/.gitattributes
index cb2381c0..f6a86105 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,2 +1,3 @@
+/coin export-ignore
# linguist overrides
recipes-*/**/*.inc linguist-language=BitBake
diff --git a/coin/module_config.yaml b/coin/module_config.yaml
new file mode 100644
index 00000000..d75eba32
--- /dev/null
+++ b/coin/module_config.yaml
@@ -0,0 +1,189 @@
+version: 1
+accept_configuration:
+ condition: and
+ conditions:
+ - condition: property
+ property: host.osVersion
+ equals_value: Ubuntu_18_04
+ - condition: property
+ property: target.osVersion
+ equals_value: QEMU
+ - condition: property
+ property: target.arch
+ in_values: [ARMv7, ARM64]
+
+environment: &environment
+ type: Group
+ instructions:
+ - type: EnvironmentVariable
+ variableName: POKY_SHA1
+ variableValue: 1adc7478a0548e1ebd75d96d2b938c5852c78365
+ - type: EnvironmentVariable
+ variableName: OE_SHA1
+ variableValue: daa50331352c1f75da3a8ef6458ae3ddf94ef863
+ - type: EnvironmentVariable
+ variableName: PYTHON2_SHA1
+ variableValue: 8fc9be701d430388b4c5234c97e623debd26a1df
+ - type: EnvironmentVariable
+ variableName: MACHINE
+ variableValue: qemuarm64
+ enable_if:
+ condition: property
+ property: target.arch
+ equals_value: ARM64
+ - type: EnvironmentVariable
+ variableName: MACHINE
+ variableValue: qemux86
+ enable_if:
+ condition: property
+ property: target.arch
+ equals_value: ARMv7
+
+build_instructions:
+ - *environment
+ - type: SetBuildDirectory
+ directory: "{{.AgentWorkingDir}}/build"
+ - type: MakeDirectory
+ directory: "{{.BuildDir}}"
+ - type: ChangeDirectory
+ directory: "{{.BuildDir}}"
+ - type: ExecuteCommand
+ command: ["sudo", "mkdir", "-p", "/mnt/yocto-cache"]
+ userMessageOnFailure: "Could not create '/mnt/yocto-cache' directory"
+ - type: ExecuteCommand
+ command: ["sudo", "mount", "yocto-cache.intra.qt.io:/srv/yocto-cache", "/mnt/yocto-cache"]
+ userMessageOnFailure: "Could not mount yocto cache."
+ - type: WriteFile
+ fileContents: |
+ # https://github.com/shr-project/jenkins-jobs/blob/master/jenkins-job.sh
+ INHERIT += "reproducible_build_simple"
+ # We want musl and glibc to share the same tmpfs, so instead of appending default "-${TCLIBC}" we append "fs"
+ TCLIBCAPPEND = "fs"
+ PREFERRED_PROVIDER_udev = "systemd"
+ PREFERRED_PROVIDER_virtual/fftw = "fftw"
+ # use gold
+ DISTRO_FEATURES_append = " ld-is-gold"
+ # use ptest
+ DISTRO_FEATURES_append = " ptest"
+ # use systemd
+ DISTRO_FEATURES_append = " systemd"
+ DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
+ VIRTUAL-RUNTIME_init_manager = "systemd"
+ VIRTUAL-RUNTIME_initscripts = ""
+ # use opengl
+ DISTRO_FEATURES_append = " opengl"
+ # use wayland to fix building weston and qtwayland
+ DISTRO_FEATURES_append = " wayland"
+ PREFERRED_PROVIDER_jpeg = "libjpeg-turbo"
+ PREFERRED_PROVIDER_jpeg-native = "libjpeg-turbo-native"
+ PREFERRED_PROVIDER_gpsd = "gpsd"
+ PREFERRED_PROVIDER_e-wm-sysactions = "e-wm"
+ ESYSACTIONS = "e-wm-sysactions"
+ # don't pull libhybris unless explicitly asked for
+ PREFERRED_PROVIDER_virtual/libgl ?= "mesa"
+ PREFERRED_PROVIDER_virtual/libgles1 ?= "mesa"
+ PREFERRED_PROVIDER_virtual/libgles2 ?= "mesa"
+ PREFERRED_PROVIDER_virtual/egl ?= "mesa"
+ # to fix fsoaudiod, alsa-state conflict in shr-image-all
+ VIRTUAL-RUNTIME_alsa-state = ""
+ # to prevent alsa-state being pulled into -dev or -dbg images
+ RDEPENDS_${PN}-dev_pn-alsa-state = ""
+ RDEPENDS_${PN}-dbg_pn-alsa-state = ""
+ # to fix dependency on conflicting x11-common from packagegroup-core-x11
+ VIRTUAL-RUNTIME_xserver_common ?= "xserver-common"
+ RDEPENDS_${PN}-dev_pn-x11-common = ""
+ RDEPENDS_${PN}-dbg_pn-x11-common = ""
+ # to fix apm, fso-apm conflict in shr-image-all
+ VIRTUAL-RUNTIME_apm = "fso-apm"
+ # remove qtwebkit-dev
+ USE_RUBY = ""
+ # require conf/distro/include/qt5-versions.inc
+ # QT5_VERSION = "5.4.0+git%"
+ # for qtwebkit etc
+ # see https://bugzilla.yoctoproject.org/show_bug.cgi?id=5013
+ # DEPENDS_append_pn-qtbase = " mesa"
+ PACKAGECONFIG_append_pn-qtbase = " icu gl accessibility freetype fontconfig"
+ # qtwayland doesn't like egl and xcomposite-glx enabled at the same time
+ # http://lists.openembedded.org/pipermail/openembedded-devel/2016-December/110444.html
+ PACKAGECONFIG_remove_pn-qtwayland = "xcomposite-egl xcomposite-glx"
+ # for webkit-efl
+ PACKAGECONFIG_append_pn-harfbuzz = " icu"
+ inherit blacklist
+ # PNBLACKLIST[samsung-rfs-mgr] = "needs newer libsamsung-ipc with negative D_P: Requested 'samsung-ipc-1.0 >= 0.2' but version of libsamsung-ipc is 0.1.0"
+ PNBLACKLIST[android-system] = "depends on lxc from meta-virtualiazation which isn't included in my world builds"
+ PNBLACKLIST[bigbuckbunny-1080p] = "big and doesn't really need to be tested so much"
+ PNBLACKLIST[bigbuckbunny-480p] = "big and doesn't really need to be tested so much"
+ PNBLACKLIST[bigbuckbunny-720p] = "big and doesn't really need to be tested so much"
+ PNBLACKLIST[bigbuckbunny-720p] = "big and doesn't really need to be tested so much"
+ PNBLACKLIST[tearsofsteel-1080p] = "big and doesn't really need to be tested so much"
+ PNBLACKLIST[build-appliance-image] = "tries to include whole downloads directory in /home/builder/poky :/"
+ # enable reporting
+ # needs http://patchwork.openembedded.org/patch/68735/
+ #ERR_REPORT_SERVER = "errors.yoctoproject.org"
+ #ERR_REPORT_PORT = "80"
+ #ERR_REPORT_USERNAME = "Martin Jansa"
+ #ERR_REPORT_EMAIL = "Martin.Jansa@gmail.com"
+ #ERR_REPORT_UPLOAD_FAILURES = "1"
+ #INHERIT += "report-error"
+ # needs patch with buildstats-summary.bbclass
+ INHERIT += "buildstats buildstats-summary"
+ # be more strict with QA warnings, turn them all to errors:
+ ERROR_QA_append = " ldflags useless-rpaths rpaths staticdev libdir xorg-driver-abi textrel already-stripped incompatible-license files-invalid installed-vs-shipped compile-host-path install-host-path pn-overrides infodir build-deps unknown-configure-option symlink-to-sysroot multilib invalid-packageconfig host-user-contaminated uppercase-pn"
+ WARN_QA_remove = " ldflags useless-rpaths rpaths staticdev libdir xorg-driver-abi textrel already-stripped incompatible-license files-invalid installed-vs-shipped compile-host-path install-host-path pn-overrides infodir build-deps unknown-configure-option symlink-to-sysroot multilib invalid-packageconfig host-user-contaminated uppercase-pn"
+ # enable thumb for broader test coverage (oe-core autobuilder doesn't have thumb enabled)
+ PREFERRED_ARM_INSTRUCTION_SET ?= "thumb"
+ ARM_INSTRUCTION_SET = "${PREFERRED_ARM_INSTRUCTION_SET}"
+ # use musl for qemux86 and qemux86copy
+ TCLIBC_qemux86 = "musl"
+ TCLIBC_qemux86copy = "musl"
+ # limit parallel make to avoid OOM
+ PARALLEL_MAKE_pn-qtwebkit = "-j 8"
+ filename: "{{.BuildDir}}/world_fixes.inc"
+ fileMode: 420
+ - type: WriteFile
+ fileContents: |
+ #!/bin/bash -xe
+ git clone git://git.yoctoproject.org/poky --reference /mnt/yocto-cache/mirror/poky.git
+ (cd poky; git checkout ${POKY_SHA1})
+ git clone git://github.com/openembedded/meta-openembedded --reference /mnt/yocto-cache/mirror/meta-openembedded.git
+ (cd meta-openembedded; git checkout ${OE_SHA1})
+ git clone git://git.openembedded.org/meta-python2 --reference /mnt/yocto-cache/mirror/meta-python2.git
+ (cd meta-python2; git checkout ${PYTHON2_SHA1})
+
+ source ./poky/oe-init-build-env
+ export BB_ENV_EXTRAWHITE="$BB_ENV_EXTRAWHITE SSTATE_DIR DL_DIR"
+ export DL_DIR=/mnt/yocto-cache/downloads
+ export BB_GENERATE_MIRROR_TARBALLS=1
+ export SSTATE_DIR=/mnt/yocto-cache/sstate-caches/$(sed -n -e "s/DISTRO_CODENAME.*\"\(.*\)\"/\1/p" ../poky/meta-*/conf/distro/poky.conf)
+ bitbake-layers add-layer ../meta-openembedded/meta-oe
+ bitbake-layers add-layer ../meta-python2
+ bitbake-layers add-layer ${SOURCE_DIR}
+
+ echo 'require ../world_fixes.inc' >> conf/local.conf
+
+ # EXCLUDE_FROM_WORLD
+ rm -f ${SOURCE_DIR}/recipes-qt/examples/qt5-opengles2-test_git.bb
+ rm -r ${SOURCE_DIR}/recipes-qt/qt5/qtwebkit_git.bb
+
+ bitbake $(find ${SOURCE_DIR} -name *.bb | xargs -n1 basename | sed -e 's/\([^._]*\).*/\1/')
+ filename: "{{.BuildDir}}/start-build"
+ fileMode: 420
+ - type: ExecuteCommand
+ command: ["chmod", "+x", "{{.BuildDir}}/start-build"]
+ userMessageOnFailure: "Could not add execution right to the start-build."
+ - type: EnvironmentVariable
+ variableName: DL_DIR
+ variableValue: "/mnt/yocto-cache/downloads"
+ - type: EnvironmentVariable
+ variableName: SOURCE_DIR
+ variableValue: "{{.SourceDir}}"
+ - type: ExecuteCommand
+ command: ["{{.BuildDir}}/start-build"]
+ maxTimeInSeconds: 28800
+ maxTimeBetweenOutput: 28800
+ userMessageOnFailure: "Build failed."
+ - type: ExecuteCommand
+ command: ["sudo", "umount", "/mnt/yocto-cache"]
+ userMessageOnFailure: "Unmounting cache failed."
+
+test_instructions: []
diff --git a/licenses/The-Qt-Company-Commercial b/licenses/The-Qt-Company-Commercial
index 7be8fb5d..19a20ea4 100644
--- a/licenses/The-Qt-Company-Commercial
+++ b/licenses/The-Qt-Company-Commercial
@@ -1,6 +1,7 @@
-QT LICENSE AGREEMENT Agreement version 4.2
+QT LICENSE AGREEMENT
+Agreement version 4.2.1
-This Qt License Agreement (“Agreement”) is a legal agreement for the licensing
+This Qt License Agreement ("Agreement") is a legal agreement for the licensing
of Licensed Software (as defined below) between The Qt Company (as defined
below) and the Licensee who has accepted the terms of this Agreement by
downloading or using the Licensed Software and/or as defined herein:
@@ -17,283 +18,276 @@ WHEREAS:
NOW, THEREFORE, THE PARTIES HEREBY AGREE AS FOLLOWS:
-
1. DEFINITIONS
-
-“Affiliate” of a Party shall mean an entity (i) which is directly
-or indirectly controlling such Party; (ii) which is under the same direct or
-indirect ownership or control as such Party; or (iii) which is directly or
-indirectly owned or controlled by such Party. For these purposes, an entity
-shall be treated as being controlled by another if that other entity has fifty
-percent (50 %) or more of the votes in such entity, is able to direct its
-affairs and/or to control the composition of its board of directors or
-equivalent body.
-
-“Add-on Products” shall mean The Qt Company’s specific add-on software products
-(for example Qt Safe Renderer, Qt for Automation, Qt Application Manager), which
-are not licensed as part of The Qt Company’s standard offering, but shall be
-included into the scope of Licensed Software only if so specifically agreed
+"Affiliate" of a Party shall mean an entity (i) which is directly or indirectly
+controlling such Party; (ii) which is under the same direct or indirect
+ownership or control as such Party; or (iii) which is directly or indirectly
+owned or controlled by such Party. For these purposes, an entity shall be
+treated as being controlled by another if that other entity has fifty percent
+(50 %) or more of the votes in such entity, is able to direct its affairs
+and/or to control the composition of its board of directors or equivalent body.
+
+"Add-on Products" shall mean The Qt Company's specific add-on software products
+(for example Qt Safe Renderer, Qt for Automation, Qt Application Manager),
+which are not licensed as part of The Qt Company's standard offering, but shall
+be included into the scope of Licensed Software only if so specifically agreed
between the Parties.
-“Applications” shall mean Licensee's software products created using the
+"Applications" shall mean Licensee's software products created using the
Licensed Software, which may include the Redistributables, or part thereof.
-“Contractor(s)” shall mean third party consultants, distributors and contractors
-performing services to the Licensee under applicable contractual arrangement.
+"Contractor(s)" shall mean third party consultants, distributors and
+contractors performing services to the Licensee under applicable contractual
+arrangement.
-“Customer(s)” shall mean Licensee’s end users to whom Licensee, directly or
+"Customer(s)" shall mean Licensee's end users to whom Licensee, directly or
indirectly, distributes copies of the Redistributables.
-“Data Protection Legislation” shall mean the General Data Protection Regulation
+"Data Protection Legislation" shall mean the General Data Protection Regulation
(EU 2016/679) (GDPR) and any national implementing laws, regulations and
secondary legislation, as may be amended or updated from time to time, as well
as any other data protection laws or regulations applicable in relevant
territory.
-“Deployment Platforms” shall mean operating systems specified in the License
-Certificate, on which the Redistributables can be distributed pursuant to the
-terms and conditions of this Agreement.
+"Deployment Platforms" shall mean operating systems and/or hardware specified
+in the License Certificate, on which the Redistributables can be distributed
+pursuant to the terms and conditions of this Agreement.
-“Designated User(s)” shall mean the employee(s) of Licensee or Licensee’s
-Affiliates acting within the scope of their employment or Licensee's Contractors
-acting within the scope of their services for Licensee and on behalf of
-Licensee. Designated Users shall be named in the License Certificate.
+"Designated User(s)" shall mean the employee(s) of Licensee or Licensee's
+Affiliates acting within the scope of their employment or Licensee's
+Contractors acting within the scope of their services for Licensee and on
+behalf of Licensee. Designated Users shall be named in the License Certificate.
-“Development License” shall mean the license needed by the Licensee for each
+"Development License" shall mean the license needed by the Licensee for each
Designated User to use the Licensed Software under the license grant described
-in Section 3.1 of this Agreement. Development Licenses are available separately
-for Qt for Application Development and Qt for Device Creation products, each
-product having its designated scope and purpose of use. Distribution Licenses
-are always connected to Qt for Device Creation product only.
+in Section 3.1 of this Agreement. Development Licenses are available
+separately for Qt for Application Development and Qt for Device Creation
+products, each product having its designated scope and purpose of use.
+Distribution Licenses are always connected to Qt for Device Creation
+product only.
-“Development Platforms” shall mean those operating systems specified in the
+"Development Platforms" shall mean those operating systems specified in the
License Certificate, in which the Licensed Software can be used under the
Development License, but not distributed in any form or used for any other
purpose.
-“Devices” shall mean hardware devices or products that 1) are manufactured
-and/or distributed by the Licensee or its Affiliates or Contractors, and (2)(i)
-incorporate or integrate the Redistributables or parts thereof; or (ii) where
-the main user interface or substantial functionality of such unit , when used by
-a Customer, is provided by Application(s) or otherwise depends on the Licensed
-Software, regardless of whether the Redistributables are distributed together
-with the hardware or not. Devices covered with this Agreement shall be specified
-in Appendix 2 or in a quote.
+"Devices" shall mean hardware devices or products that 1) are manufactured
+and/or distributed by the Licensee or its Affiliates or Contractors, and
+(2)(i) incorporate or integrate the Redistributables or parts thereof; or (ii)
+where the main user interface or substantial functionality of such unit , when
+used by a Customer, is provided by Application(s) or otherwise depends on the
+Licensed Software, regardless of whether the Redistributables are distributed
+together with the hardware or not. Devices covered with this Agreement shall
+be specified in Appendix 2 or in a quote.
-“Distribution License(s)” shall mean the license required for any kind of sale,
+"Distribution License(s)" shall mean the license required for any kind of sale,
trade, exchange, loan, lease, rental or other distribution by or on behalf of
Licensee to a third party of Redistributables in connection with Devices
pursuant to license grant described in Section 3.3 of this Agreement.
-“Distribution License Packs” shall mean set of prepaid Distribution Licenses for
-distribution of Redistributables, as defined in The Qt Company’s standard price
-list, quote, Purchase Order confirmation or in an appendix hereto, as the case
-may be.
+"Distribution License Packs" shall mean set of prepaid Distribution Licenses
+for distribution of Redistributables, as defined in The Qt Company's standard
+price list, quote, Purchase Order confirmation or in an appendix hereto, as
+the case may be.
-“Intellectual Property Rights” shall mean patents (including utility models),
+"Intellectual Property Rights" shall mean patents (including utility models),
design patents, and designs (whether or not capable of registration), chip
topography rights and other like protection, copyrights, trademarks, service
marks, trade names, logos or other words or symbols and any other form of
statutory protection of any kind and applications for any of the foregoing as
well as any trade secrets.
-“License Certificate” shall mean a certificate generated by The Qt Company for
+"License Certificate" shall mean a certificate generated by The Qt Company for
each Designated User respectively upon them downloading the Licensed Software,
-which will be available under respective Designated User’s Qt Account at
+which will be available under respective Designated User's Qt Account at
account.qt.io. License Certificates will specify the Designated User, the
-Development Platforms, Deployment Platforms and the License Term. Such terms are
-considered part of the licenses granted hereunder and shall be updated from time
-to time to reflect any agreed changes to the foregoing terms relating to
-Designated User’s rights to the Licensed Software.
+Development Platforms, Deployment Platforms and the License Term. Such terms
+are considered part of the licenses granted hereunder and shall be updated
+from time to time to reflect any agreed changes to the foregoing terms
+relating to Designated User's rights to the Licensed Software.
-“License Fee” shall mean the fee charged to the Licensee for rights granted
+"License Fee" shall mean the fee charged to the Licensee for rights granted
under the terms of this Agreement.
-“License Term” shall mean the agreed validity period of the Development License
+"License Term" shall mean the agreed validity period of the Development License
of the respective Designated User, during which time the Designated User is
entitled to use the Licensed Software, as set forth in the respective License
Certificate.
-“Licensed Software” shall mean either
- (i) Qt for Application Development or
- (ii) Qt for Device Creation, and/or
- (iii) Qt 3D Studio, and/or
- (iv) Qt Design Studio, and/or
- (v) selected Add-on Products, if any,
+"Licensed Software" shall mean either
+ (i) Qt for Application Development or
+ (ii) Qt for Device Creation, and/or
+ (iii) Qt 3D Studio, and/or
+ (iv) Qt Design Studio, and/or
+ (v) Qt for MCUs, and/or
+ (vi) selected Add-on Products, if any,
depending on which product(s) the Licensee has purchased under this Agreement,
as well as corresponding online or electronic documentation, associated media
-and printed materials, including the source code, example programs and the
-documentation, licensed to the Licensee under this Agreement. Licensed Software
-does not include Third Party Software (as defined in Section 4) or Open Source
-Qt. The Qt Company may, in the course of its development activities, at its free
-and absolute discretion and without any obligation to send or publish any
-notifications to the Licensee or in general, make changes, additions or
-deletions in the components and functionalities of the Licensed Software,
-provided that no such changes, additions or deletions will affect the already
-released version of the Licensed Software, but only upcoming version(s).
-
-“Licensee” shall mean the individual or legal entity that is party to this
+and printed materials, including the source code (where applicable), example
+programs and the documentation, licensed to the Licensee under this Agreement.
+Licensed Software does not include Third Party Software (as defined in Section
+4) or Open Source Qt. The Qt Company may, in the course of its development
+activities, at its free and absolute discretion and without any obligation to
+send or publish any notifications to the Licensee or in general, make changes,
+additions or deletions in the components and functionalities of the Licensed
+Software, provided that no such changes, additions or deletions will affect
+the already released version of the Licensed Software, but only upcoming
+version(s).
+
+"Licensee" shall mean the individual or legal entity that is party to this
Agreement, as identified on the signature page hereof.
-“Licensee’s Records” shall mean books and records that are likely to contain
-information bearing on Licensee’s compliance with this Agreement, Licensee’s use
-of Open Source Qt and/or the payments due to The Qt Company under this
-Agreement, including, but not limited to user information, assembly logs, sales
-records and distribution records.
+"Licensee's Records" shall mean books and records that are likely to contain
+information bearing on Licensee's compliance with this Agreement, Licensee's
+use of Open Source Qt and/or the payments due to The Qt Company under this
+Agreement, including, but not limited to user information, assembly logs,
+sales records and distribution records.
-“Modified Software” shall have the meaning as set forth in Section 2.3.
+"Modified Software" shall have the meaning as set forth in Section 2.3.
-“Online Services” shall mean any services or access to systems made available by
-The Qt Company to the Licensee over the Internet relating to the Licensed
+"Online Services" shall mean any services or access to systems made available
+by The Qt Company to the Licensee over the Internet relating to the Licensed
Software or for the purpose of use by the Licensee of the Licensed Software or
Support. Use of any such Online Services is discretionary for the Licensee and
some of them may be subject to additional fees.
-“Open Source Qt” shall mean the non-commercial Qt computer software products,
+"Open Source Qt" shall mean the non-commercial Qt computer software products,
licensed under the terms of the GNU Lesser General Public License, version 2.1
-or later (“LGPL”) or the GNU General Public License, version 2.0 or later
-(“GPL”). For clarity, Open Source Qt shall not be provided nor governed under
+or later ("LGPL") or the GNU General Public License, version 2.0 or later
+("GPL"). For clarity, Open Source Qt shall not be provided nor governed under
this Agreement.
-”Party” or “Parties” shall mean Licensee and/or The Qt Company.
+"Party" or "Parties" shall mean Licensee and/or The Qt Company.
-“Permitted Combination” shall have the meaning as set forth in Section
+"Permitted Combination" shall have the meaning as set forth in Section
3.4(viii).
-“Pre-Release Code” shall have the meaning as set forth in Section 4.
+"Pre-Release Code" shall have the meaning as set forth in Section 4.
-“Prohibited Combination” shall mean any means to (i) use, combine, incorporate,
+"Prohibited Combination" shall mean any means to (i) use, combine, incorporate,
link or integrate Licensed Software with any software created with or
incorporating Open Source Qt, (ii) use Licensed Software for creation of any
software created with or incorporating Open Source Qt, or (iii) incorporate or
integrate Applications into a hardware device or product other than a Device.
-“Qt 3D Studio” shall mean all versions of The Qt Company’s Qt 3D Studio, a 3D
-user interface design and development environment for rapid designing and
-prototyping of animated user interfaces.
+"Qt 3D Studio" shall mean The Qt Company's productized offering, which consist
+of all versions of modules and tools as set forth in Appendix 1.
-“Qt Design Studio” shall mean all versions of The Qt Company’s Qt Design Studio
-tool, a user interface design and development environment for rapid designing
-and prototyping of animated user interfaces.
+"Qt Design Studio" shall mean The Qt Company's productized offering, which
+consist of all versions of modules and tools as set forth in Appendix 1.
-“Qt for Application Development” shall mean The Qt Company’s productized
-offering, which consist of all versions of
- (i) Qt Toolkit, and
- (ii) Qt Tools/Applications.
+"Qt for Application Development" shall mean The Qt Company's productized
+offering, which consist of all versions of modules and tools as set forth in
+Appendix 1.
-“Qt for Device Creation” shall mean The Qt Company’s productized offering, which
-consist of all versions of
- (i) Qt for Application Development, and
- (ii) Software components specific to embedded software development as set
- forth in Appendix 1, Sections 1b and 1d.
+"Qt for Device Creation" shall mean The Qt Company's productized offering,
+which consist of all versions of modules and tools as set forth in Appendix 1.
-“Qt Toolkit” shall mean the modules defined in Appendix 1, Section 1a.
+"Qt for MCUs" shall mean The Qt Company's productized offering, which consist
+of all versions of modules and tools as set forth in Appendix 1.
-“Qt Tools/Applications” shall mean the tools defined in Appendix 1, Section 1c.
+"Redistributables" shall mean the portions of the Licensed Software set forth
+in Appendix 1 that may be distributed pursuant to the terms of this Agreement
+in object code form only, including any relevant documentation. Where
+relevant, any reference to Licensed Software in this Agreement shall include
+and refer also to Redistributables.
-"Redistributables" shall mean the portions of the Licensed Software set forth in
-Appendix 1, Section 2 that may be distributed pursuant to the terms of this
-Agreement in object code form only, including any relevant documentation. Where
-relevant, any reference to Licensed Software in this Agreement shall include and
-refer also to Redistributables.
-
-“Renewal Term” shall mean an extension of previous License Term as agreed
+"Renewal Term" shall mean an extension of previous License Term as agreed
between the Parties.
-“Submitted Modified Software” shall have the meaning as set forth in Section
-2.3.
+"Submitted Modified Software" shall have the meaning as set forth in
+Section 2.3.
-“Support” shall mean standard developer support that is provided by The Qt
-Company to assist Designated Users in using the Licensed Software in accordance
-with The Qt Company’s standard support terms available at
+"Support" shall mean standard developer support that is provided by The Qt
+Company to assist Designated Users in using the Licensed Software in
+accordance with The Qt Company's standard support terms available at
https://www.qt.io/terms-conditions/ and as further defined in Section 8
hereunder.
-“Taxes” shall have the meaning set forth in Section 10.5.
-
-“Term” shall have the meaning set forth in Section 12.
-
-“The Qt Company” shall mean:
- (i) in the event Licensee is an individual residing in the United States
- or a legal entity incorporated in the United States or having its
- headquarters in the United States, The Qt Company Inc., a
- Delaware corporation with its office at 2350 Mission College Blvd.,
- Suite 1020, Santa Clara, CA 95054, USA.; or
- (ii) in the event the Licensee is an individual residing outside of the
- United States or a legal entity incorporated outside of the United
- States or having its registered office outside of the United States,
- The Qt Company Ltd., a Finnish company with its registered office at
- Bertel Jungin aukio D3A, 02600 Espoo, Finland.
-
-"Third Party Software " shall have the meaning set forth in Section 4.
-
-“Updates” shall mean a release or version of the Licensed Software containing
-bug fixes, error corrections and other changes that are generally made available
-to users of the Licensed Software that have contracted for Support. Updates are
-generally depicted as a change to the digits following the decimal in the
-Licensed Software version number. The Qt Company shall make Updates available to
-the Licensee under the Support. Updates shall be considered as part of the
-Licensed Software hereunder.
-
-“Upgrades” shall mean a release or version of the Licensed Software containing
+"Taxes" shall have the meaning set forth in Section 10.5.
+
+"Term" shall have the meaning set forth in Section 12.
+
+"The Qt Company" shall mean:
+ (i) in the event Licensee is an individual residing in the United
+ States or a legal entity incorporated in the United States or
+ having its headquarters in the United States, The Qt Company Inc.,
+ a Delaware corporation with its office at 2350 Mission College
+ Blvd., Suite 1020, Santa Clara, CA 95054, USA.; or
+ (ii) in the event the Licensee is an individual residing outside of the
+ United States or a legal entity incorporated outside of the United
+ States or having its registered office outside of the United
+ States, The Qt Company Ltd., a Finnish company with its registered
+ office at Bertel Jungin aukio D3A, 02600 Espoo, Finland.
+
+"Third-Party Software" shall have the meaning set forth in Section 4.
+
+"Updates" shall mean a release or version of the Licensed Software containing
+bug fixes, error corrections and other changes that are generally made
+available to users of the Licensed Software that have contracted for Support.
+Updates are generally depicted as a change to the digits following the decimal
+in the Licensed Software version number. The Qt Company shall make Updates
+available to the Licensee under the Support. Updates shall be considered as
+part of the Licensed Software hereunder.
+
+"Upgrades" shall mean a release or version of the Licensed Software containing
enhancements and new features and are generally depicted as a change to the
first digit of the Licensed Software version number. In the event Upgrades are
-provided to the Licensee under this Agreement, they shall be considered as part
-of the Licensed Software hereunder.
+provided to the Licensee under this Agreement, they shall be considered as
+part of the Licensed Software hereunder.
2. OWNERSHIP
+2.1. Ownership of The Qt Company
+The Licensed Software is protected by copyright laws and international
+copyright treaties, as well as other intellectual property laws and
+treaties. The Licensed Software is licensed, not sold.
-2.1 Ownership of The Qt Company
-The Licensed Software is protected by copyright laws and international copyright
-treaties, as well as other intellectual property laws and treaties. The Licensed
-Software is licensed, not sold. All of The Qt Company's Intellectual Property
-Rights are and shall remain the exclusive property of The Qt Company or its
-licensors respectively.
+All of The Qt Company's Intellectual Property Rights are and shall remain the
+exclusive property of The Qt Company or its licensors respectively.
-2.2 Ownership of Licensee
+2.2. Ownership of Licensee
All the Licensee's Intellectual Property Rights are and shall remain the
-exclusive property of the Licensee or its licensors respectively. All
-Intellectual Property Rights to the Modified Software, Applications and Devices
-shall remain with the Licensee and no rights thereto shall be granted by the
-Licensee to The Qt Company under this Agreement (except as set forth in Section
-2.3 below).
+exclusive property of the Licensee or its licensors respectively.
+
+All Intellectual Property Rights to the Modified Software, Applications and
+Devices shall remain with the Licensee and no rights thereto shall be granted
+by the Licensee to The Qt Company under this Agreement (except as set forth in
+Section 2.3 below).
-2.3 Modified Software
+2.3. Modified Software
Licensee may create bug-fixes, error corrections, patches or modifications to
-the Licensed Software (“Modified Software”). Such Modified Software may break
-the source or binary compatibility with the Licensed Software (including without
-limitation through changing the application programming interfaces ("API") or by
-adding, changing or deleting any variable, method, or class signature in the
-Licensed Software and/or any inter-process protocols, services or standards in
-the Licensed Software libraries). To the extent that Licensee’s Modified
-Software so breaks source or binary compatibility with the Licensed Software,
-Licensee acknowledges that The Qt Company's ability to provide Support may be
-prevented or limited and Licensee's ability to make use of Updates may be
-restricted.
+the Licensed Software ("Modified Software"). Such Modified Software may break
+the source or binary compatibility with the Licensed Software (including
+without limitation through changing the application programming interfaces
+("API") or by adding, changing or deleting any variable, method, or class
+signature in the Licensed Software and/or any inter-process protocols,
+services or standards in the Licensed Software libraries). To the extent that
+Licensee's Modified Software so breaks source or binary compatibility with the
+Licensed Software, Licensee acknowledges that The Qt Company's ability to
+provide Support may be prevented or limited and Licensee's ability to make use
+of Updates may be restricted.
Licensee may, at its sole and absolute discretion, choose to submit Modified
-Software to The Qt Company (“Submitted Modified Software”) in connection with
-Licensee’s Support request, service request or otherwise. In the event Licensee
-does so, then, Licensee hereby grants The Qt Company a sublicensable,
+Software to The Qt Company ("Submitted Modified Software") in connection with
+Licensee's Support request, service request or otherwise. In the event
+Licensee does so, then, Licensee hereby grants The Qt Company a sublicensable,
assignable, irrevocable, perpetual, worldwide, non-exclusive, royalty-free and
-fully paid-up license, under all of Licensee’s Intellectual Property Rights, to
-reproduce, adapt, translate, modify, and prepare derivative works of, publicly
-display, publicly perform, sublicense, make available and distribute such
-Submitted Modified Software as The Qt Company sees fit at its free and absolute
-discretion.
-
+fully paid-up license, under all of Licensee's Intellectual Property Rights,
+to reproduce, adapt, translate, modify, and prepare derivative works of,
+publicly display, publicly perform, sublicense, make available and distribute
+such Submitted Modified Software as The Qt Company sees fit at its free and
+absolute discretion.
3. LICENSES GRANTED
-
-3.1 Development with Licensed Software
+3.1. Development with Licensed Software
Subject to the terms of this Agreement, The Qt Company grants to Licensee a
-worldwide, non- exclusive, non-transferable license, valid for the License Term,
-to use, modify and copy the Licensed Software by Designated Users on the
+worldwide, non-exclusive, non-transferable license, valid for the License
+Term, to use, modify and copy the Licensed Software by Designated Users on the
Development Platforms for the sole purposes of designing, developing,
-demonstrating and testing Application(s) and/or Devices, and to provide thereto
-related support and other related services to end-user Customers.
+demonstrating and testing Application(s) and/or Devices, and to provide
+thereto related support and other related services to end-user Customers.
Licensee may install copies of the Licensed Software on five (5) computers per
Designated User, provided that only the Designated Users who have a valid
@@ -304,212 +298,216 @@ then-current Designated User by notifying The Qt Company in writing, provided
that any Designated User may be replaced only once during any six-month period.
Upon expiry of the initially agreed License Term, the respective License Terms
-shall be automatically extended to one or more Renewal Term(s), unless and until
-either Party notifies the other Party in writing that it does not wish to
-continue the License Term, such notification to be provided to the other Party
-no less than ninety (90) days before expiry of the respective License Term.
-Unless otherwise agreed between the Parties, Renewal Term shall be of equal
-length with the initial License Term.
+shall be automatically extended to one or more Renewal Term(s), unless and
+until either Party notifies the other Party in writing that it does not wish
+to continue the License Term, such notification to be provided to the other
+Party no less than ninety (90) days before expiry of the respective License
+Term. Unless otherwise agreed between the Parties, Renewal Term shall be of
+equal length with the initial License Term.
Any such Renewal Term shall be subject to License Fees agreed between the
-Parties or, if no advance agreement exists, subject to The Qt Company’s standard
-pricing applicable at the commencement date of any such Renewal Term.
+Parties or, if no advance agreement exists, subject to The Qt Company's
+standard pricing applicable at the commencement date of any such Renewal Term.
-Any price or other term specified for a Renewal Term shall be valid only for the
-specified time. The Qt Company may request the Licensee to place a purchase
-order corresponding to a quote by The Qt Company for the relevant Renewal Term.
+Any price or other term specified for a Renewal Term shall be valid only for
+the specified time.
+
+The Qt Company may request the Licensee to place a purchase order corresponding
+to a quote by The Qt Company for the relevant Renewal Term.
In the event Licensee does not prevent auto-renewal pursuant the above, but a
Renewal Term is nevertheless not duly ordered within 30 days from the date of
-the respective quote from The Qt Company and/or the respective License Fee paid
-by due date specified in The Qt Company’s respective invoice, The Qt Company
-shall apply a reinstatement fee equal to ten percent (10 %) of the total value
-of the License Fees of the Development Licenses for the expired term to be added
-to the License Fee of the respective Renewal Term.
+the respective quote from The Qt Company and/or the respective License Fee
+paid by due date specified in The Qt Company's respective invoice, The Qt
+Company shall apply a reinstatement fee equal to ten percent (10 %) of the
+total value of the License Fees of the Development Licenses for the expired
+term to be added to the License Fee of the respective Renewal Term.
In the event Licensee chooses not to renew a Development License for a Renewal
Term by notifying The Qt Company thereof no less than ninety (90) days before
-expiry of the respective License Term, Licensee may still reinstate such expired
-Development Licenses for a Renewal Term subject to applicable renewal Term
-License Fees until thirty (30) days from the expiry of the initially agreed
-License Term or preceding Renewal Term. After such thirty (30) day period a
-Development License shall be subject to applicable License Fees for a new
-Development License and not any Renewal Term License Fees.
-
-3.2 Distribution of Applications
+expiry of the respective License Term, Licensee may still reinstate such
+expired Development Licenses for a Renewal Term subject to applicable renewal
+Term License Fees until thirty (30) days from the expiry of the initially
+agreed License Term or preceding Renewal Term. After such thirty (30) day
+period a Development License shall be subject to applicable License Fees for a
+new Development License and not any Renewal Term License Fees.
+
+3.2. Distribution of Applications
Subject to the terms of this Agreement, The Qt Company grants to Licensee a
-worldwide, non- exclusive, non-transferable, revocable (for cause pursuant to
+worldwide, non-exclusive, non-transferable, revocable (for cause pursuant to
this Agreement) right and license, valid for the Term, to
- (i) distribute, by itself or through its Contractors, Redistributables as
- installed, incorporated or integrated into Applications for execution
- on the Deployment Platforms, and
- (ii) grant sublicenses to Redistributables, as distributed hereunder, for
- Customers solely for Customer’s internal use and to the extent
- necessary in order for the Customers to use the Applications for their
- respective intended purposes.
+ (i) distribute, by itself or through its Contractors, Redistributables
+ as installed, incorporated or integrated into Applications for
+ execution on the Deployment Platforms, and
+ (ii) grant sublicenses to Redistributables, as distributed hereunder,
+ for Customers solely for Customer's internal use and to the extent
+ necessary in order for the Customers to use the Applications for
+ their respective intended purposes.
Right to distribute the Redistributables as part of an Application as provided
-herein is not royalty- bearing but is conditional upon the Licensee not having
+herein is not royalty-bearing but is conditional upon the Licensee not having
any unpaid License Fees for Development Licenses owed to The Qt Company at the
time of distribution of any Redistributables to Customers.
-3.3 Distribution of Devices
+3.3. Distribution of Devices
Subject to the terms of this Agreement, The Qt Company grants to Licensee a
-worldwide, non- exclusive, non-transferable, revocable (for cause pursuant to
+worldwide, non-exclusive, non-transferable, revocable (for cause pursuant to
this Agreement) right and license, valid for the Term, to
- (i) distribute, by itself or through one or more tiers of Contractors,
- Redistributables as installed, incorporated or integrated, or intended
- to be installed, incorporated or integrated into Devices for execution
- on the Deployment Platforms, and
- (ii) grant sublicenses to Redistributables, as distributed hereunder, for
- Customers solely for Customer’s internal use and to the extent
- necessary in order for the Customers to use the Devices for their
- respective intended purposes.
+ (i) distribute, by itself or through one or more tiers of Contractors,
+ Redistributables as installed, incorporated or integrated, or
+ intended to be installed, incorporated or integrated into Devices
+ for execution on the Deployment Platforms, and
+ (ii) grant sublicenses to Redistributables, as distributed hereunder,
+ for Customers solely for Customer's internal use and to the extent
+ necessary in order for the Customers to use the Devices for their
+ respective intended purposes.
Right to distribute the Redistributables with Devices as provided herein is
conditional upon the Licensee (i) not having any unpaid License Fees for
-Development Licenses owed to The Qt Company, and (ii) having purchased and paid
-corresponding Distribution Licenses at the time of distribution of any
+Development Licenses owed to The Qt Company, and (ii) having purchased and
+paid corresponding Distribution Licenses at the time of distribution of any
Redistributables to Customers.
-3.4 Further Requirements
+3.4. Further Requirements
The licenses granted above in this Section 3 by The Qt Company to Licensee are
conditional and subject to Licensee's compliance with the following terms:
- (i) Licensee shall not remove or alter any copyright, trademark or other
- proprietary rights notice(s) contained in any portion of the Licensed
- Software;
- (ii) Applications must add primary and substantial functionality to the
- Licensed Software so as not to compete with the Licensed Software;
- (iii) Applications may not pass on functionality which in any way makes it
- possible for others to create software with the Licensed Software;
- provided however that Licensee may use the Licensed Software's
- scripting and QML ("Qt Quick") functionality solely in order to enable
- scripting, themes and styles that augment the functionality and
- appearance of the Application(s) without adding primary and
- substantial functionality to the Application(s);
- (iv) Licensee shall not use Licensed Software in any manner or for any
- purpose that infringes, misappropriates or otherwise violates any
- Intellectual property or right of any third party, or that violates
- any applicable law;
- (v) Licensee shall not use The Qt Company's or any of its suppliers'
- names, logos, or trademarks to market Applications, except that
- Licensee may use “Built with Qt” logo to indicate that Application(s)
- was developed using the Licensed Software;
- (vi) Licensee shall not distribute, sublicense or disclose source code of
- Licensed Software to any third party (provided however that Licensee
- may appoint employee(s) of Contractors as Designated Users to use
- Licensed Software pursuant to this Agreement). Such right may be
- available for the Licensee subject to a separate software development
- kit (“SDK”) license agreement to be concluded with The Qt Company;
- (vii) Licensee shall not grant the Customers a right to (i) make copies of
- the Redistributables except when and to the extent required to use the
- Applications and/or Devices for their intended purpose, (ii) modify
- the Redistributables or create derivative works thereof, (iii)
- decompile, disassemble or otherwise reverse engineer Redistributables,
- or (iv) redistribute any copy or portion of the Redistributables to
- any third party, except as part of the onward sale of the Device on
- which the Redistributables are installed;
- (viii) Licensee shall not and shall cause that its Affiliates or Contractors
- shall not use Licensed Software in any Prohibited Combination, unless
- Licensee has received an advance written permission from The Qt
- Company to do so. Absent such written permission, any and all
- distribution by the Licensee during the Term of a hardware device or
- product a) which incorporate or integrate any part of Licensed
- Software or Open Source Qt; or b) where the main user interface or
- substantial functionality is provided by software built with
- Licensed Software or Open Source Qt or otherwise depends on the
- Licensed Software or Open Source Qt, shall be considered to be
- Device distribution under this Agreement and shall be dependent on
- Licensee’s compliance thereof (including but not limited to
- obligation to pay applicable License Fees for such distribution).
- Notwithstanding what is provided above in this sub-section (viii),
- Licensee is entitled to use and combine Qt 3D Studio and/or Qt
- Design Studio with Open Source Qt (“Permitted Combination”) for
- its internal evaluation purposes, provided that Licensee shall in no
- way transfer, publish, disclose, display or otherwise make available
- any software or work resulting from such Permitted Combination;
- (ix) Licensee shall cause all of its Affiliates and Contractors entitled
- to make use of the licenses granted under this Agreement, to be
- contractually bound to comply with the relevant terms of this
- Agreement and not to use the Licensed Software beyond the terms
- hereof and for any purposes other than operating within the scope of
- their services for Licensee. Licensee shall be responsible for any
- and all actions and omissions of its Affiliates and Contractors
- relating to the Licensed Software and use thereof (including but not
- limited to payment of all applicable License Fees);
- (x) Except when and to the extent explicitly provided in this Section 3,
- Licensee shall not transfer, publish, disclose, display or otherwise
- make available the Licensed Software; and
- (xi) Licensee shall not attempt or enlist a third party to conduct or
- attempt to conduct any of the above.
-
-Above terms shall not be applicable if and to the extent they conflict with any
-mandatory provisions of any applicable laws. Any use of Licensed Software
-beyond the provisions of this Agreement is strictly prohibited and requires an
-additional license from The Qt Company.
-
-
-4. THIRD PARTY SOFTWARE
+ (i) Licensee shall not remove or alter any copyright, trademark or
+ other proprietary rights notice(s) contained in any portion of the
+ Licensed Software;
+ (ii) Applications must add primary and substantial functionality to the
+ Licensed Software so as not to compete with the Licensed Software;
+ (iii) Applications may not pass on functionality which in any way makes
+ it possible for others to create software with the Licensed
+ Software; provided however that Licensee may use the Licensed
+ Software's scripting and QML ("Qt Quick") functionality solely in
+ order to enable scripting, themes and styles that augment the
+ functionality and appearance of the Application(s) without adding
+ primary and substantial functionality to the Application(s);
+ (iv) Licensee shall not use Licensed Software in any manner or for any
+ purpose that infringes, misappropriates or otherwise violates any
+ Intellectual property or right of any third party, or that
+ violates any applicable law;
+ (v) Licensee shall not use The Qt Company's or any of its suppliers'
+ names, logos, or trademarks to market Applications, except that
+ Licensee may use "Built with Qt" logo to indicate that
+ Application(s) was developed using the Licensed Software;
+ (vi) Licensee shall not distribute, sublicense or disclose source code
+ of Licensed Software to any third party (provided however that
+ Licensee may appoint employee(s) of Contractors as Designated
+ Users to use Licensed Software pursuant to this Agreement). Such
+ right may be available for the Licensee subject to a separate
+ software development kit ("SDK") license agreement to be concluded
+ with The Qt Company;
+ (vii) Licensee shall not grant the Customers a right to (i) make copies
+ of the Redistributables except when and to the extent required to
+ use the Applications and/or Devices for their intended purpose,
+ (ii) modify the Redistributables or create derivative works
+ thereof, (iii) decompile, disassemble or otherwise reverse
+ engineer Redistributables, or (iv) redistribute any copy or
+ portion of the Redistributables to any third party, except as part
+ of the onward sale of the Device on which the Redistributables are
+ installed;
+ (viii) Licensee shall not and shall cause that its Affiliates or
+ Contractors shall not use Licensed Software in any Prohibited
+ Combination, unless Licensee has received an advance written
+ permission from The Qt Company to do so. Absent such written
+ permission, any and all distribution by the Licensee during the
+ Term of a hardware device or product a) which incorporate or
+ integrate any part of Licensed Software or Open Source Qt; or b)
+ where the main user interface or substantial functionality is
+ provided by software built with Licensed Software or Open Source
+ Qt or otherwise depends on the Licensed Software or Open Source
+ Qt, shall be considered to be Device distribution under this
+ Agreement and shall be dependent on Licensee's compliance thereof
+ (including but not limited to obligation to pay applicable License
+ Fees for such distribution). Notwithstanding what is provided
+ above in this sub-section (viii), Licensee is entitled to use and
+ combine Qt 3D Studio and/or Qt Design Studio with Open Source Qt
+ ("Permitted Combination") for its internal evaluation purposes,
+ provided that Licensee shall in no way transfer, publish, disclose,
+ display or otherwise make available any software or work resulting
+ from such Permitted Combination;
+ (ix) Licensee shall cause all of its Affiliates and Contractors
+ entitled to make use of the licenses granted under this Agreement,
+ to be contractually bound to comply with the relevant terms of
+ this Agreement and not to use the Licensed Software beyond the
+ terms hereof and for any purposes other than operating within the
+ scope of their services for Licensee. Licensee shall be responsible
+ for any and all actions and omissions of its Affiliates and
+ Contractors relating to the Licensed Software and use thereof
+ (including but not limited to payment of all applicable License
+ Fees);
+ (x) Except when and to the extent explicitly provided in this Section
+ 3, Licensee shall not transfer, publish, disclose, display or
+ otherwise make available the Licensed Software; and
+ (xi) Licensee shall not attempt or enlist a third party to conduct or
+ attempt to conduct any of the above.
+
+Above terms shall not be applicable if and to the extent they conflict with
+any mandatory provisions of any applicable laws.
+Any use of Licensed Software beyond the provisions of this Agreement is
+strictly prohibited and requires an additional license from The Qt Company.
+
+4. THIRD-PARTY SOFTWARE
The Licensed Software may provide links to third party libraries or code
-(collectively "Third Party Software") to implement various functions. Third
-Party Software does not comprise part of the Licensed Software. In some cases,
-access to Third Party Software may be included with the Licensed Software. Such
-Third Party Software will be listed in the ".../src/3rdparty" source tree
-delivered with the Licensed Software or documented in the Licensed Software, as
-such may be amended from time to time. Licensee acknowledges that use or
-distribution of Third Party Software is in all respects subject to applicable
-license terms of applicable third party right holders.
-
+(collectively "Third-Party Software") to implement various functions.
+Third-Party Software does not comprise part of the Licensed Software. In some
+cases, access to Third-Party Software may be included with the Licensed
+Software. Such Third-Party Software will be listed in the ".../src/3rdparty"
+source tree delivered with the Licensed Software or documented in the Licensed
+Software, as such may be amended from time to time. Licensee acknowledges that
+use or distribution of Third-Party Software is in all respects subject to
+applicable license terms of applicable third-party right holders.
5. PRE-RELEASE CODE
The Licensed Software may contain pre-release code and functionality, or sample
-code marked or otherwise stated with appropriate designation such as “Technology
-Preview”, “Alpha”, “Beta”, “Sample” etc. (“Pre-Release Code”).
+code marked or otherwise stated with appropriate designation such as
+"Technology Preview", "Alpha", "Beta", "Sample" etc. ("Pre-Release Code").
-Such Pre-Release Code may be present complimentary for the Licensee, in order to
-provide experimental support or information for new platforms or preliminary
+Such Pre-Release Code may be present complimentary for the Licensee, in order
+to provide experimental support or information for new platforms or preliminary
versions of one or more new functionalities or for other similar reasons. The
Pre-Release Code may not be at the level of performance and compatibility of a
-final, generally available, product offering. The Pre-Release Code may not
+final, generally available, product offering. The Pre-Release Code may not
operate correctly, may contain errors and may be substantially modified by The
-Qt Company prior to the first commercial product release, if any. The Qt Company
-is under no obligation to make Pre-Release Code commercially available, or
-provide any Support or Updates relating thereto. The Qt Company assumes no
+Qt Company prior to the first commercial product release, if any. The Qt
+Company is under no obligation to make Pre-Release Code commercially available,
+or provide any Support or Updates relating thereto. The Qt Company assumes no
liability whatsoever regarding any Pre-Release Code, but any use thereof is
-exclusively at Licensee’s own risk and expense.
+exclusively at Licensee's own risk and expense.
For clarity, unless Licensed Software specifies different license terms for the
-respective Pre- Release Code, the Licensee is entitled to use such pre-release
+respective Pre-Release Code, the Licensee is entitled to use such pre-release
code pursuant to Section 3, just like other Licensed Software, provided however
-that in the event Add-on Products are included and available as such Pre-Release
-Code, Licensee’s right to use such Add-on Products is nevertheless subject to
-and conditional upon conclusion of separate agreement with The Qt Company.
-
+that in the event Add-on Products are included and available as such
+Pre-Release Code, Licensee's right to use such Add-on Products is nevertheless
+subject to and conditional upon conclusion of separate agreement with The Qt
+Company.
6. LIMITED WARRANTY AND WARRANTY DISCLAIMER
The Qt Company hereby represents and warrants that it has the power and
authority to grant the rights and licenses granted to Licensee under this
-Agreement. Except as set forth above, the Licensed Software is licensed to
-Licensee "as is" and Licensee’s exclusive remedy and The Qt Company’s entire
-liability for errors in the Licensed Software shall be limited, at The Qt
-Company’s option, to correction of the error, replacement of the Licensed
-Software or return of the applicable fees paid for the defective Licensed
-Software for the time period during which the License is not able to utilize the
-Licensed Software under the terms of this Agreement.
+Agreement.
+
+Except as set forth above, the Licensed Software is licensed to Licensee
+"as is" and Licensee's exclusive remedy and The Qt Company's entire liability
+for errors in the Licensed Software shall be limited, at The Qt Company's
+option, to correction of the error, replacement of the Licensed Software or
+return of the applicable fees paid for the defective Licensed Software for the
+time period during which the License is not able to utilize the Licensed
+Software under the terms of this Agreement.
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE QT COMPANY ON BEHALF OF
ITSELF AND ITS LICENSORS, SUPPLIERS AND AFFILIATES, DISCLAIMS ALL OTHER
WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
NON-INFRINGEMENT WITH REGARD TO THE LICENSED SOFTWARE. THE QT COMPANY DOES NOT
-WARRANT THAT THE LICENSED SOFTWARE WILL SATISFY LICENSEE’S REQUIREMENTS OR THAT
+WARRANT THAT THE LICENSED SOFTWARE WILL SATISFY LICENSEE'S REQUIREMENTS OR THAT
IT WILL OPERATE WITHOUT DEFECT OR ERROR OR THAT THE OPERATION THEREOF WILL BE
UNINTERRUPTED.
-
7. INDEMNIFICATION AND LIMITATION OF LIABILITY
-
-7.1 Limitation of Liability
+7.1. Limitation of Liability
EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, AND (II)
BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO
EVENT SHALL EITHER PARTY BE LIABLE TO THE OTHER PARTY FOR ANY LOSS OF PROFIT,
@@ -519,16 +517,19 @@ HOWSOEVER ARISING UNDER OR IN CONNECTION WITH THIS AGREEMENT.
EXCEPT FOR (I) CASES OF GROSS NEGLIGENCE OR INTENTIONAL MISCONDUCT, AND (II)
BREACH OF CONFIDENTIALITY, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, IN NO
-EVENT SHALL EITHER PARTY’S TOTAL AGGREGATE LIABILITY UNDER THIS AGREEMENT EXCEED
-THE AGGREGATE LICENSE FEES PAID OR PAYABLE TO THE QT COMPANY FROM LICENSEE
-DURING THE PERIOD OF TWELVE (12) MONTHS IMMEDIATELY PRECEDING THE EVENT
-RESULTING IN SUCH LIABILITY. THE PROVISIONS OF THIS SECTION 7 ALLOCATE THE
-RISKS UNDER THIS AGREEMENT BETWEEN THE QT COMPANY AND LICENSEE AND THE PARTIES
-HAVE RELIED UPON THE LIMITATIONS SET FORTH HEREIN IN DETERMINING WHETHER TO
-ENTER INTO THIS AGREEMENT. NOTWITHSTANDING ANYTHING TO THE CONTRARY IN THIS
-AGREEMENT, LICENSEE SHALL ALWAYS BE LIABLE TO PAY THE APPLICABLE LICENSE FEES
-CORRESPONDING TO ITS ACTUAL USE OF LICENSED SOFTWARE.
+EVENT SHALL EITHER PARTY'S TOTAL AGGREGATE LIABILITY UNDER THIS AGREEMENT
+EXCEED THE AGGREGATE LICENSE FEES PAID OR PAYABLE TO THE QT COMPANY FROM
+LICENSEE DURING THE PERIOD OF TWELVE (12) MONTHS IMMEDIATELY PRECEDING THE
+EVENT RESULTING IN SUCH LIABILITY.
+THE PROVISIONS OF THIS SECTION 7 ALLOCATE THE RISKS UNDER THIS AGREEMENT
+BETWEEN THE QT COMPANY AND LICENSEE AND THE PARTIES HAVE RELIED UPON THE
+LIMITATIONS SET FORTH HEREIN IN DETERMINING WHETHER TO ENTER INTO THIS
+AGREEMENT.
+
+NOTWITHSTANDING ANYTHING TO THE CONTRARY IN THIS AGREEMENT, LICENSEE SHALL
+ALWAYS BE LIABLE TO PAY THE APPLICABLE LICENSE FEES CORRESPONDING TO ITS ACTUAL
+USE OF LICENSED SOFTWARE.
8. SUPPORT, UPDATES AND ONLINE SERVICES
Upon due payment of the agreed License Fees the Licensee will be eligible to
@@ -539,747 +540,792 @@ unless the Parties specifically otherwise agree.
Unless otherwise decided by The Company at its free and absolute discretion,
Upgrades will not be included in the Support but may be available subject to
-additional fees. From time to time The Qt Company may change the Support terms,
-provided that during the respective ongoing License Term the level of Support
-provided by The Qt Company may not be reduced without the consent of the
-Licensee. Unless otherwise agreed, The Qt Company shall not be responsible for
-providing any service or support to Customers.
+additional fees.
+
+From time to time The Qt Company may change the Support terms, provided that
+during the respective ongoing License Term the level of Support provided by The
+Qt Company may not be reduced without the consent of the Licensee.
+Unless otherwise agreed, The Qt Company shall not be responsible for providing
+any service or support to Customers.
9. CONFIDENTIALITY
Each Party acknowledges that during the Term of this Agreement each Party may
-receive information about the other Party's business, business methods, business
-plans, customers, business relations, technology, and other information,
-including the terms of this Agreement, that is confidential and of great value
-to the other Party, and the value of which would be significantly reduced if
-disclosed to third parties (“Confidential Information”). Accordingly, when a
-Party (the “Receiving Party”) receives Confidential Information from the other
-Party (the “Disclosing Party”), the Receiving Party shall only disclose such
-information to employees and Contractors on a need to know basis, and shall
-cause its employees and employees of its Affiliates to: (i) maintain any and all
-Confidential Information in confidence; (ii) not disclose the Confidential
-Information to a third party without the Disclosing Party's prior written
-approval; and (iii) not, directly or indirectly, use the Confidential
-Information for any purpose other than for exercising its rights and fulfilling
-its responsibilities pursuant to this Agreement. Each Party shall take
-reasonable measures to protect the Confidential Information of the other Party,
-which measures shall not be less than the measures taken by such Party to
-protect its own confidential and proprietary information. Obligation of
-confidentiality shall not apply to information that (i) is or becomes generally
-known to the public through no act or omission of the Receiving Party; (ii) was
-in the Receiving Party's lawful possession prior to the disclosure hereunder and
-was not subject to limitations on disclosure or use; (iii) is developed
-independently by employees or Contractors of the Receiving Party or other
-persons working for the Receiving Party who have not had access to the
-Confidential Information of the Disclosing Party, as proven by the written
-records of the Receiving Party; (iv) is lawfully disclosed to the Receiving
-Party without restrictions, by a third party not under an obligation of
-confidentiality; or (v) the Receiving Party is legally compelled to disclose, in
-which case the Receiving Party shall notify the Disclosing Party of such
-compelled disclosure and assert the privileged and confidential nature of the
-information and cooperate fully with the Disclosing Party to limit the scope of
-disclosure and the dissemination of disclosed Confidential Information to the
-minimum extent necessary.
+receive information about the other Party's business, business methods,
+business plans, customers, business relations, technology, and other
+information, including the terms of this Agreement, that is confidential and of
+great value to the other Party, and the value of which would be significantly
+reduced if disclosed to third parties ("Confidential Information").
+Accordingly, when a Party (the "Receiving Party") receives Confidential
+Information from the other Party (the "Disclosing Party"), the Receiving Party
+shall only disclose such information to employees and Contractors on a need to
+know basis, and shall cause its employees and employees of its Affiliates to:
+(i) maintain any and all Confidential Information in confidence; (ii) not
+disclose the Confidential Information to a third party without the Disclosing
+Party's prior written approval; and (iii) not, directly or indirectly, use the
+Confidential Information for any purpose other than for exercising its rights
+and fulfilling its responsibilities pursuant to this Agreement. Each Party
+shall take reasonable measures to protect the Confidential Information of the
+other Party, which measures shall not be less than the measures taken by such
+Party to protect its own confidential and proprietary information.
+
+Obligation of confidentiality shall not apply to information that (i) is or
+becomes generally known to the public through no act or omission of the
+Receiving Party; (ii) was in the Receiving Party's lawful possession prior to
+the disclosure hereunder and was not subject to limitations on disclosure or
+use; (iii) is developed independently by employees or Contractors of the
+Receiving Party or other persons working for the Receiving Party who have not
+had access to the Confidential Information of the Disclosing Party, as proven
+by the written records of the Receiving Party; (iv) is lawfully disclosed to
+the Receiving Party without restrictions, by a third party not under an
+obligation of confidentiality; or (v) the Receiving Party is legally compelled
+to disclose, in which case the Receiving Party shall notify the Disclosing
+Party of such compelled disclosure and assert the privileged and confidential
+nature of the information and cooperate fully with the Disclosing Party to
+limit the scope of disclosure and the dissemination of disclosed Confidential
+Information to the minimum extent necessary.
The obligations under this Section 9 shall continue to remain in force for a
period of five (5) years after the last disclosure, and, with respect to trade
secrets, for so long as such trade secrets are protected under applicable trade
secret laws.
-
10. FEES, DELIVERY AND PAYMENT
+10.1. License Fees
+License Fees are described in The Qt Company's standard price list, quote or
+Purchase Order confirmation or in an appendix hereto, as the case may be.
-10.1 License Fees
-License Fees are described in The Qt Company’s standard price list, quote or
-Purchase Order confirmation or in an appendix hereto, as the case may be. The
-License Fees shall not be refunded or claimed as a credit in any event or for
-any reason whatsoever.
+The License Fees shall not be refunded or claimed as a credit in any event or
+for any reason whatsoever.
-10.2 Ordering Licenses
-Licensee may purchase Development Licenses and Distribution Licenses pursuant to
-agreed pricing terms or, if no specific pricing terms have been agreed upon, at
-The Qt Company's standard pricing terms applicable at the time of purchase.
+10.2. Ordering Licenses
+Licensee may purchase Development Licenses and Distribution Licenses pursuant
+to agreed pricing terms or, if no specific pricing terms have been agreed upon,
+at The Qt Company's standard pricing terms applicable at the time of purchase.
Unless specifically otherwise provided, any pricing terms referenced in this
Agreement shall be valid for twelve (12) months from the date of this Agreement.
+
Licensee shall submit all purchase orders for Development Licenses and
Distribution Licenses to The Qt Company by email or any other method acceptable
-to The Qt Company (each such order is referred to herein as a “Purchase Order”)
+to The Qt Company (each such order is referred to herein as a "Purchase Order")
for confirmation, whereupon the Purchase Order shall become binding between the
Parties.
-10.3 Distribution License Packs
+10.3. Distribution License Packs
Unless otherwise agreed, Distribution Licenses shall be purchased by way of
-Distribution License Packs. Upon due payment of the ordered Distribution
-License Pack(s), the Licensee will have an account of Distribution Licenses
-available for distributing the Redistributables in accordance with this
-Agreement. Each time Licensee distributes a copy of Redistributables, then one
-Distribution License is used, and Licensee’s account of available Distribution
-Licenses is decreased accordingly. Licensee may distribute copies of the
-Redistributables so long as Licensee has Distribution Licenses remaining on its
-account.
-
-10.4 Payment Terms
+Distribution License Packs.
+
+Upon due payment of the ordered Distribution License Pack(s), the Licensee will
+have an account of Distribution Licenses available for distributing the
+Redistributables in accordance with this Agreement.
+
+Each time Licensee distributes a copy of Redistributables, then one
+Distribution License is used, and Licensee's account of available Distribution
+Licenses is decreased accordingly.Licensee may distribute copies of the
+Redistributables so long as Licensee has Distribution Licenses remaining on
+its account.
+
+10.4. Payment Terms
License Fees and any other charges under this Agreement shall be paid by
-Licensee no later than thirty (30) days from the date of the applicable invoice
-from The Qt Company. The Qt Company will submit an invoice to Licensee after
-the date of this Agreement and/or after The Qt Company receives a Purchase Order
-from Licensee. A late payment charge of the lower of (a) one percent per month;
-or (b) the interest rate stipulated by applicable law, shall be charged on any
-unpaid balances that remain past due.
-
-10.5 Taxes
-All License Fees and other charges payable hereunder are gross amounts but
-exclusive of any value added tax, use tax, sales tax, withholding tax and other
-taxes, duties or tariffs (“Taxes”) levied directly for the sale, delivery or use
-of Licensed Software hereunder pursuant to any applicable law. Such applicable
-Taxes shall be paid by Licensee to The Qt Company, or, where applicable, in lieu
-of payment of such Taxes to The Qt Company, Licensee shall provide an exemption
-certificate to The Qt Company and any applicable authority.
+Licensee no later than thirty (30) days from the date of the applicable
+invoice from The Qt Company.
+
+The Qt Company will submit an invoice to Licensee after the date of this
+Agreement and/or after The Qt Company receives a Purchase Order from Licensee.
-11 RECORD-KEEPING AND REPORTING OBLIGATIONS; AUDIT RIGHTS
+A late payment charge of the lower of (a) one percent per month; or (b) the
+interest rate stipulated by applicable law, shall be charged on any unpaid
+balances that remain past due.
-11.1 Licensee’s Record-keeping
+10.5. Taxes
+All License Fees and other charges payable hereunder are gross amounts but
+exclusive of any value added tax, use tax, sales tax, withholding tax and other
+taxes, duties or tariffs ("Taxes") levied directly for the sale, delivery or
+use of Licensed Software hereunder pursuant to any applicable law. Such
+applicable Taxes shall be paid by Licensee to The Qt Company, or, where
+applicable, in lieu of payment of such Taxes to The Qt Company, Licensee shall
+provide an exemption certificate to The Qt Company and any applicable authority.
+
+11. RECORD-KEEPING AND REPORTING OBLIGATIONS; AUDIT RIGHTS
+11.1. Licensee's Record-keeping
Licensee shall at all times during the Term of this Agreement and for a period
-of seven (7) years thereafter maintain Licensee’s Records in an accurate and
-up-to-date form. Licensee’s Records shall be adequate to reasonably enable The
-Qt Company to determine Licensee’s compliance with the provisions of this
+of seven (7) years thereafter maintain Licensee's Records in an accurate and
+up-to-date form. Licensee's Records shall be adequate to reasonably enable The
+Qt Company to determine Licensee's compliance with the provisions of this
Agreement. The records shall conform to general good accounting practices.
-Licensee shall, within thirty (30) days from receiving The Qt Company’s request
-to that effect, deliver to The Qt Company a report based on Licensee’s Records,
+
+Licensee shall, within thirty (30) days from receiving The Qt Company's request
+to that effect, deliver to The Qt Company a report based on Licensee's Records,
such report to contain information, in sufficient detail, on (i) number and
identity of users working with Licensed Software or Open Source Qt, (ii) copies
of Redistributables distributed by Licensee during the most recent calendar
quarter and/or any other term specified by The Qt Company, (iii) number of
undistributed copies of Redistributables and corresponding number of unused
-Distribution Licenses remaining on Licensee’s account, and (iv) any other
+Distribution Licenses remaining on Licensee's account, and (iv) any other
information as The Qt Company may reasonably require from time to time.
-11.2. The Qt Company’s Audit Rights
-The Qt Company or an independent auditor acting on behalf of The Qt Company’s,
-may, upon at least five (5) business days’ prior written notice and at its
-expense, audit Licensee with respect to the Licensee’s use of the Licensed
-Software, but not more frequently than once during each 6- month period. Such
+11.2. The Qt Company's Audit Rights
+The Qt Company or an independent auditor acting on behalf of The Qt Company's,
+may, upon at least five (5) business days' prior written notice and at its
+expense, audit Licensee with respect to the Licensee's use of the Licensed
+Software, but not more frequently than once during each 6-month period. Such
audit may be conducted by mail, electronic means or through an in-person visit
-to Licensee’s place of business. Any such in-person audit shall be conducted
+to Licensee's place of business. Any such in-person audit shall be conducted
during regular business hours at Licensee's facilities and shall not
unreasonably interfere with Licensee's business activities. The Qt Company or
the independent auditor acting on behalf of The Qt Company shall be entitled to
-inspect Licensee’s Records and conduct necessary interviews of Licensee’s
-relevant employees and Contractors. All such Licensee’s Records and use thereof
-shall be subject to an obligation of confidentiality under this Agreement. If
-an audit reveals that Licensee is using the Licensed Software beyond scope of
-the licenses Licensee has paid for, Licensee agrees to pay The Qt Company any
-amounts owed for such unauthorized use within 30 days from receipt of the
-corresponding invoice from The Qt Company. In addition, in the event the audit
-reveals a material violation of the terms of this Agreement (without limitation,
-either (i) underpayment of more than 10 % of License Fees or 10,000 euros
-(whichever is more) or (ii) distribution of products, which include or result
-from Prohibited Combination, shall be deemed a material violation for purposes
-of this section), then the Licensee shall pay The Qt Company's reasonable cost
-of conducting such audit.
-
-
-12 TERM AND TERMINATION
-
-12.1 Agreement Term
+inspect Licensee's Records and conduct necessary interviews of Licensee's
+relevant employees and Contractors. All such Licensee's Records and use thereof
+shall be subject to an obligation of confidentiality under this Agreement.
+
+If an audit reveals that Licensee is using the Licensed Software beyond scope
+of the licenses Licensee has paid for, Licensee agrees to pay The Qt Company
+any amounts owed for such unauthorized use within 30 days from receipt of the
+corresponding invoice from The Qt Company. In addition, in the event the audit
+reveals a material violation of the terms of this Agreement (without
+limitation, either (i) underpayment of more than 10 % of License Fees or 10,000
+euros (whichever is more) or (ii) distribution of products, which include or
+result from Prohibited Combination, shall be deemed a material violation for
+purposes of this section), then the Licensee shall pay The Qt Company's
+reasonable cost of conducting such audit.
+
+12. TERM AND TERMINATION
+12.1. Agreement Term
This Agreement shall enter into force upon due acceptance by both Parties and
remain in force for as long as there is any Development License(s) purchased
-under this Agreement in force (“Term”), unless and until terminated pursuant to
+under this Agreement in force ("Term"), unless and until terminated pursuant to
the terms of this Section 12.
-12.2 Termination and suspension of rights
+12.2. Termination and suspension of rights
Either Party shall have the right to terminate this Agreement upon thirty (30)
days prior written notice if the other Party commits a material breach of any
obligation of this Agreement and fails to remedy such breach within such notice
-period. Instead of termination, The Qt Company shall have the right to suspend
-or withhold grants of all rights to the Licensed Software hereunder, including
-but not limited to the Development Licenses, Distribution License, and Support,
+period.
+
+Instead of termination, The Qt Company shall have the right to suspend or
+withhold grants of all rights to the Licensed Software hereunder, including but
+not limited to the Development Licenses, Distribution License, and Support,
should Licensee fail to make payment in timely fashion or otherwise violates or
is reasonably suspected to violate its obligations or terms of this Agreement,
and where such violation or breach is not cured within five (5) business days
-following The Qt Company’s written notice thereof.
+following The Qt Company's written notice thereof.
-12.3 Mutual Right to Terminate
+12.3. Mutual Right to Terminate
Either Party shall have the right to terminate this Agreement immediately upon
written notice in the event that the other Party becomes insolvent, files for
-any form of bankruptcy, makes any assignment for the benefit of creditors, has a
-receiver, administrative receiver or officer appointed over the whole or a
-substantial part of its assets, ceases to conduct business, or an act equivalent
-to any of the above occurs under the laws of the jurisdiction of the other
-Party.
-
-12.4 Parties´ Rights and Duties upon Termination
-Upon expiry or termination of the Agreement Licensee shall cease and shall cause
-all Designated Users (including those of its Affiliates’ and Contractors’) to
-cease using the Licensed Software and distribution of the Redistributables under
-this Agreement. Notwithstanding the above, in the event the Agreement expires
-or is terminated:
- (i) as a result of The Qt Company choosing not to renew the Development
- License(s) as set forth in Section 3.1, then all valid licenses
- possessed by the Licensee at such date shall be extended to be valid
- in perpetuity under the terms of this Agreement and Licensee is
- entitled to purchase additional licenses as set forth in Section
- 10.2; or
- (ii) for reason other than by The Qt Company pursuant to item (i) above or
- pursuant to Section 12.2, then the Licensee is entitled, for a period
- of six (6) months after the effective date of termination, to continue
- distribution of Devices under the Distribution Licenses paid but
- unused at such effective date of termination.
-
-Upon any such termination the Licensee shall destroy or return to The Qt Company
-all copies of the Licensed Software and all related materials and will certify
-the same to The Qt Company upon its request, provided however that Licensee may
-retain and exploit such copies of the Licensed Software as it may reasonably
-require in providing continued support to Customers. Expiry or termination of
-this Agreement for any reason whatsoever shall not relieve Licensee of its
-obligation to pay any License Fees accrued or payable to The Qt Company prior to
-the effective date of termination, and Licensee shall immediately pay to The Qt
-Company all such fees upon the effective date of termination. Termination of
-this Agreement shall not affect any rights of Customers to continue use of
-Applications and Devices (and therein incorporated Redistributables).
-
-12.5 Extension in case of bankruptcy
+any form of bankruptcy, makes any assignment for the benefit of creditors, has
+a receiver, administrative receiver or officer appointed over the whole or a
+substantial part of its assets, ceases to conduct business, or an act
+equivalent to any of the above occurs under the laws of the jurisdiction of the
+other Party.
+
+12.4. Parties´ Rights and Duties upon Termination
+Upon expiry or termination of the Agreement, Licensee shall cease and shall
+cause all Designated Users (including those of its Affiliates' and
+Contractors') to cease using the Licensed Software and distribution of the
+Redistributables under this Agreement.
+
+Notwithstanding the above, in the event the Agreement expires or is terminated:
+ (i) as a result of The Qt Company choosing not to renew the Development
+ License(s) as set forth in Section 3.1, then all valid licenses
+ possessed by the Licensee at such date shall be extended to be
+ valid in perpetuity under the terms of this Agreement and Licensee
+ is entitled to purchase additional licenses as set forth in
+ Section 10.2; or
+ (ii) for reason other than by The Qt Company pursuant to item (i) above
+ or pursuant to Section 12.2, then the Licensee is entitled, for a
+ period of six (6) months after the effective date of termination,
+ to continue distribution of Devices under the Distribution Licenses
+ paid but unused at such effective date of termination.
+
+Upon any such termination the Licensee shall destroy or return to The Qt
+Company all copies of the Licensed Software and all related materials and will
+certify the same to The Qt Company upon its request, provided however that
+Licensee may retain and exploit such copies of the Licensed Software as it may
+reasonably require in providing continued support to Customers.
+
+Expiry or termination of this Agreement for any reason whatsoever shall not
+relieve Licensee of its obligation to pay any License Fees accrued or payable
+to The Qt Company prior to the effective date of termination, and Licensee
+shall immediately pay to The Qt Company all such fees upon the effective date
+of termination. Termination of this Agreement shall not affect any rights of
+Customers to continue use of Applications and Devices (and therein incorporated
+Redistributables).
+
+12.5. Extension in case of bankruptcy
In the event The Qt Company is declared bankrupt under a final, non-cancellable
decision by relevant court of law, and this Agreement is not, at the date of
-expiry of the Development License(s) pursuant to Section 3.1, assigned to party,
-who has assumed The Qt Company’s position as a legitimate licensor of Licensed
-Software under this Agreement, then all valid licenses possessed by the Licensee
-at such date of expiry, and which the Licensee has not notified for expiry,
-shall be extended to be valid in perpetuity under the terms of this Agreement.
-
+expiry of the Development License(s) pursuant to Section 3.1, assigned to
+party, who has assumed The Qt Company's position as a legitimate licensor of
+Licensed Software under this Agreement, then all valid licenses possessed by
+the Licensee at such date of expiry, and which the Licensee has not notified
+for expiry, shall be extended to be valid in perpetuity under the terms of this
+Agreement.
13. GOVERNING LAW AND LEGAL VENUE
In the event this Agreement is in the name of The Qt Company Inc., a Delaware
Corporation, then:
- (i) this Agreement shall be construed and interpreted in accordance with
- the laws of the State of California, USA, excluding its choice of law
- provisions;
- (ii) the United Nations Convention on Contracts for the International Sale
- of Goods will not apply to this Agreement; and
- (iii) any dispute, claim or controversy arising out of or relating to this
- Agreement or the breach, termination, enforcement, interpretation or
- validity thereof, including the determination of the scope or
- applicability of this Agreement to arbitrate, shall be determined by
- arbitration in San Francisco, USA, before one arbitrator. The
- arbitration shall be administered by JAMS pursuant to JAMS'
- Streamlined Arbitration Rules and Procedures. Judgment on the Award
- may be entered in any court having jurisdiction. This Section shall
- not preclude parties from seeking provisional remedies in aid of
- arbitration from a court of appropriate jurisdiction.
+ (i) this Agreement shall be construed and interpreted in accordance
+ with the laws of the State of California, USA, excluding its choice
+ of law provisions;
+ (ii) the United Nations Convention on Contracts for the International
+ Sale of Goods will not apply to this Agreement; and
+ (iii) any dispute, claim or controversy arising out of or relating to
+ this Agreement or the breach, termination, enforcement,
+ interpretation or validity thereof, including the determination of
+ the scope or applicability of this Agreement to arbitrate, shall
+ be determined by arbitration in San Francisco, USA, before one
+ arbitrator. The arbitration shall be administered by JAMS pursuant
+ to JAMS' Streamlined Arbitration Rules and Procedures. Judgment on
+ the Award may be entered in any court having jurisdiction. This
+ Section shall not preclude parties from seeking provisional
+ remedies in aid of arbitration from a court of appropriate
+ jurisdiction.
In the event this Agreement is in the name of The Qt Company Ltd., a Finnish
Company, then:
- (i) this Agreement shall be construed and interpreted in accordance with
- the laws of Finland, excluding its choice of law provisions;
- (ii) the United Nations Convention on Contracts for the International Sale
- of Goods will not apply to this Agreement; and
- (iii) any disputes, controversy or claim arising out of or relating to this
- Agreement, or the breach, termination or validity thereof shall be
- finally settled by arbitration in accordance with the Arbitration
- Rules of Finland Chamber of Commerce. The arbitration tribunal shall
- consist of one (1), or if either Party so requires, of three (3),
- arbitrators. The award shall be final and binding and enforceable in
- any court of competent jurisdiction. The arbitration shall be held in
- Helsinki, Finland and the process shall be conducted in the English
- language. This Section shall not preclude parties from seeking
- provisional remedies in aid of arbitration from a court of
- appropriate jurisdiction.
-
+ (i) this Agreement shall be construed and interpreted in accordance
+ with the laws of Finland, excluding its choice of law provisions;
+ (ii) the United Nations Convention on Contracts for the International
+ Sale of Goods will not apply to this Agreement; and
+ (iii) any disputes, controversy or claim arising out of or relating to
+ this Agreement, or the breach, termination or validity thereof
+ shall be finally settled by arbitration in accordance with the
+ Arbitration Rules of Finland Chamber of Commerce. The arbitration
+ tribunal shall consist of one (1), or if either Party so requires,
+ of three (3), arbitrators. The award shall be final and binding and
+ enforceable in any court of competent jurisdiction. The arbitration
+ shall be held in Helsinki, Finland and the process shall be
+ conducted in the English language. This Section shall not preclude
+ parties from seeking provisional remedies in aid of arbitration
+ from a court of appropriate jurisdiction.
14. GENERAL PROVISIONS
-
-14.1 No Assignment
+14.1. No Assignment
Except in the case of a merger or sale of substantially all of its corporate
assets, Licensee shall not be entitled to assign or transfer all or any of its
rights, benefits and obligations under this Agreement without the prior written
consent of The Qt Company, which shall not be unreasonably withheld or delayed.
-The Qt Company shall be entitled to freely assign or transfer any of its rights,
-benefits or obligations under this Agreement. 14.2 No Third Party
-Representations Licensee shall make no representations or warranties concerning
-the Licensed Software on behalf of The Qt Company. Any representation or
-warranty Licensee makes or purports to make on The Qt Company’s behalf shall be
-void as to The Qt Company. 14.3 Surviving Sections Any terms and conditions
-that by their nature or otherwise reasonably should survive termination of this
-Agreement shall so be deemed to survive. Such sections include especially the
-following: 1, 2, 6, 7, 9, 11, 12.4, 13 and 14.
-
-14.4 Entire Agreement
+The Qt Company shall be entitled to freely assign or transfer any of its
+rights, benefits or obligations under this Agreement.
+
+14.2. No Third-Party Representations
+Licensee shall make no representations or warranties concerning the Licensed
+Software on behalf of The Qt Company. Any representation or warranty Licensee
+makes or purports to make on The Qt Company's behalf shall be void as to The
+Qt Company.
+
+14.3. Surviving Sections
+Any terms and conditions that by their nature or otherwise reasonably should
+survive termination of this Agreement shall so be deemed to survive. Such
+sections include especially the following: 1, 2, 6, 7, 9, 11, 12.4, 13 and 14.
+
+14.4. Entire Agreement
This Agreement, the exhibits hereto, the License Certificate and any applicable
Purchase Order accepted by The Qt Company constitute the complete agreement
between the Parties and supersedes all prior or contemporaneous discussions,
representations, and proposals, written or oral, with respect to the subject
-matters discussed herein. In the event of any conflict or inconsistency between
-this Agreement and any Purchase Order, the terms of this Agreement will prevail
-over the terms of the Purchase Order with respect to such conflict or
-inconsistency. Parties specifically acknowledge and agree that this Agreement
-prevails over any click-to-accept or similar agreements the Designated Users may
-need to accept online upon download of the Licensed Software, as may be required
-by The Qt Company’s applicable processes relating to Licensed Software.
-
-14.5 Modifications
+matters discussed herein.
+
+In the event of any conflict or inconsistency between this Agreement and any
+Purchase Order, the terms of this Agreement will prevail over the terms of the
+Purchase Order with respect to such conflict or inconsistency.
+
+Parties specifically acknowledge and agree that this Agreement prevails over
+any click-to-accept or similar agreements the Designated Users may need to
+accept online upon download of the Licensed Software, as may be required by
+The Qt Company's applicable processes relating to Licensed Software.
+
+14.5. Modifications
No modification of this Agreement shall be effective unless contained in a
writing executed by an authorized representative of each Party. No term or
-condition contained in Licensee's Purchase Order (“Deviating Terms”) shall apply
-unless The Qt Company has expressly agreed such Deviating Terms in writing.
-Unless and to the extent expressly agreed by The Qt Company, any such Deviating
-Terms shall be deemed void and with no legal effect. For clarity, delivery of
-the Licensed Software following the receipt of the Purchase Order including
-Deviating Terms shall not constitute acceptance of such Deviating Terms.”
-
-14.6 Force Majeure
+condition contained in Licensee's Purchase Order ("Deviating Terms") shall
+apply unless The Qt Company has expressly agreed such Deviating Terms in
+writing. Unless and to the extent expressly agreed by The Qt Company, any such
+Deviating Terms shall be deemed void and with no legal effect. For clarity,
+delivery of the Licensed Software following the receipt of the Purchase Order
+including Deviating Terms shall not constitute acceptance of such Deviating
+Terms."
+
+14.6. Force Majeure
Except for the payment obligations hereunder, neither Party shall be liable to
the other for any delay or non-performance of its obligations hereunder in the
-event and to the extent that such delay or non-performance is due to an event of
-act of God, terrorist attack or other similar unforeseeable catastrophic event
-that prevents either Party for fulfilling its obligations under this Agreement
-and which such Party cannot avoid or circumvent (“Force Majeure Event”). If the
-Force Majeure Event results in a delay or non-performance of a Party for a
-period of three (3) months or longer, then either Party shall have the right to
-terminate this Agreement with immediate effect without any liability (except for
-the obligations of payment arising prior to the event of Force Majeure) towards
-the other Party.
-
-14.7 Notices
+event and to the extent that such delay or non-performance is due to an event
+of act of God, terrorist attack or other similar unforeseeable catastrophic
+event that prevents either Party for fulfilling its obligations under this
+Agreement and which such Party cannot avoid or circumvent ("Force Majeure
+Event"). If the Force Majeure Event results in a delay or non-performance of a
+Party for a period of three (3) months or longer, then either Party shall have
+the right to terminate this Agreement with immediate effect without any
+liability (except for the obligations of payment arising prior to the event of
+Force Majeure) towards the other Party.
+
+14.7. Notices
Any notice given by one Party to the other shall be deemed properly given and
deemed received if specifically acknowledged by the receiving Party in writing
-or when successfully delivered to the recipient by hand, fax, or special courier
-during normal business hours on a business day to the addresses specified for
-each Party on the signature page. Each communication and document made or
-delivered by one Party to the other Party pursuant to this Agreement shall be in
-the English language.
-
-14.8 Export Control
-Licensee acknowledges that the Redistributables, as incorporated in Applications
-or Devices, may be subject to export control restrictions under the applicable
-laws of respective countries. Licensee shall fully comply with all applicable
-export license restrictions and requirements as well as with all laws and
-regulations relating to the Redistributables and exercise of licenses hereunder
-and shall procure all necessary governmental authorizations, including without
-limitation, all necessary licenses, approvals, permissions or consents, where
-necessary for the re-exportation of the Redistributables, Applications and/or
-Devices.
-
-14.9 No Implied License
+or when successfully delivered to the recipient by hand, fax, or special
+courier during normal business hours on a business day to the addresses
+specified for each Party on the signature page. Each communication and document
+made or delivered by one Party to the other Party pursuant to this Agreement
+shall be in the English language.
+
+14.8. Export Control
+Licensee acknowledges that the Redistributables, as incorporated in
+Applications or Devices, may be subject to export control restrictions under
+the applicable laws of respective countries. Licensee shall fully comply with
+all applicable export license restrictions and requirements as well as with all
+laws and regulations relating to the Redistributables and exercise of licenses
+hereunder and shall procure all necessary governmental authorizations,
+including without limitation, all necessary licenses, approvals, permissions or
+consents, where necessary for the re-exportation of the Redistributables,
+Applications and/or Devices.
+
+14.9. No Implied License
There are no implied licenses or other implied rights granted under this
Agreement, and all rights, save for those expressly granted hereunder, shall
remain with The Qt Company and its licensors. In addition, no licenses or
immunities are granted to the combination of the Licensed Software with any
other software or hardware not delivered by The Qt Company under this Agreement.
-14.10 Attorney Fees
+14.10. Attorney Fees
The prevailing Party in any action to enforce this Agreement shall be entitled
-to recover its attorney’s fees and costs in connection with such action.
+to recover its attorney's fees and costs in connection with such action.
-14.11 Privacy
+14.11. Privacy
Licensee acknowledges and agrees that for the purpose of this Agreement, The Qt
Company may collect, use, transfer and disclose personal data pertaining to
Designated Users as well as any other employees and directors of the Licensee
-and its Contractors relevant for carrying out the intent of this Agreement. Such
-personal data may be collected from the Licensee or directly from the relevant
-individuals. The Parties acknowledge that with regard to such personal data
-processed hereunder, The Qt Company shall be regarded as the Data Controller
-under the applicable Data Protection Legislation. The Qt Company shall process
-any such personal data in accordance with its privacy policies and practices,
-which will comply with all applicable requirements of the Data Protection
-Legislation.
-
-14.12 Severability
-
+and its Contractors relevant for carrying out the intent of this Agreement.
+Such personal data may be collected from the Licensee or directly from the
+relevant individuals. The Parties acknowledge that with regard to such personal
+data processed hereunder, The Qt Company shall be regarded as the Data
+Controller under the applicable Data Protection Legislation. The Qt Company
+shall process any such personal data in accordance with its privacy policies
+and practices, which will comply with all applicable requirements of the Data
+Protection Legislation.
+
+14.12. Severability
If any provision of this Agreement shall be adjudged by any court of competent
jurisdiction to be unenforceable or invalid, that provision shall be limited or
eliminated to the minimum extent necessary so that this Agreement shall
otherwise remain in full force and effect and enforceable.
-APPENDICES
-This Agreement includes Appendix 1 or/and Appendix 8, and possibly one or more
-of the appendices 3-5, depending on the product(s) purchased by the Licensee,
-what is stated in the quote or invoice, and/or what is stated in the Licensee’s
-License Certificate.
-
-
-APPENDIX 1: LICENSED SOFTWARE
-
-1a. Licensed Software - Qt Toolkit
-
-Module Description
-Qt Core Core non-graphical classes used by other modules.
-Qt GUI Base classes for graphical user interface (GUI)
- components.
-Qt Multimedia Classes for audio, video and camera functionality.
-Qt Multimedia Widgets Widget-based classes for implementing multimedia
- functionality.
-Qt Network Classes to make network programming easier and more
- portable.
-Qt QML Classes for QML and JavaScript languages.
-Qt Quick A declarative framework for building highly dynamic
- applications with custom user interfaces.
-Qt Quick Controls 2 Provides lightweight QML types for creating
- performant user interfaces for desktop, embedded,
- and mobile devices.
-Qt Quick Dialogs Types for creating and interacting with system
- dialogs from a Qt Quick application.
-Qt Quick Layouts Layouts are items that are used to arrange Qt Quick
- 2 based items in the user interface.
-Qt Quick Test A unit test framework for QML applications.
-Qt SQL Classes for database integration using SQL.
-Qt Test Classes for unit testing Qt applications and
- libraries.
-Qt Widgets Classes to extend Qt GUI with C++ widgets.
-Active Qt Classes for applications which use ActiveX and COM
-Qt 3D Functionality for near-realtime simulation systems
- with support for 2D and 3D rendering.
-Qt Android Extras Provides platform-specific APIs for Android.
-Qt Bluetooth Provides access to Bluetooth hardware.
-Qt Canvas 3D Enables OpenGL-like 3D drawing calls from Qt Quick
- applications using JavaScript.
-Qt Concurrent Classes for writing multi-threaded programs without
- using low-level threading primitives.
-Qt D-Bus Classes for inter-process communication over the
- D-Bus protocol.
-Qt Gamepad Enables Qt applications to support the use of gamepad
- hardware.
-Qt Graphical Effects Graphical effects for use with Qt Quick 2.
-Qt Help Classes for integrating documentation into
- applications, similar to Qt Assistant.
-Qt Image Formats Plugins for additional image formats: TIFF,
- MNG, TGA, WBMP.
-Qt Location Displays map, navigation, and place content in a QML
- application.
-Qt Mac Extras Provides platform-specific APIs for macOS.
-Qt Network Authorization Provides support for OAuth-based authorization to
- online services.
-Qt NFC Provides access to Near-Field communication (NFC)
- hardware.
-Qt Platform Headers Provides classes that encapsulate platform-specific
- information.
-Qt Positioning Provides access to position, satellite and area
- monitoring classes.
-Qt Print Support Classes to make printing easier and more portable.
-Qt Purchasing Enables in-app purchase of products in Qt
- applications.
-Qt for Python Python bindings for Qt.
-Qt Quick Controls Reusable Qt Quick based UI controls to create
- classic desktop-style user interfaces.
-Qt Quick Extras Provides a specialized set of controls that can
- be used to build interfaces in Qt Quick.
-Qt Quick Widgets Provides a C++ widget class for displaying a Qt
- Quick user interface.
-Qt SCXML Provides classes and tools for creating state
- machines from SCXML files.
-Qt Sensors Provides access to sensor hardware and motion
- gesture recognition.
-Qt Serial Bus Provides access to serial industrial bus interface.
-Qt Serial Port Provides access to hardware and virtual serial ports.
-Qt Speech Provides support for accessibility features such as
- text-to-speech.
-Qt SVG Classes for displaying the contents of SVG files.
-Qt UI Tools Classes for loading QWidget based forms created in
- Qt Designer dynamically, at runtime.
-Qt WebChannel Provides access to QObject or QML objects from HTML
- clients for seamless integration of Qt applications
- with HTML/JavaScript clients.
-Qt WebEngine Classes and functions for embedding web content in
- applications using the Chromium browser project.
-Qt WebSockets Provides WebSocket communication.
-Qt WebView Displays web content in a QML application by using
- APIs native to the platform.
-Qt Windows Extras Provides platform-specific APIs for Windows.
-Qt X11 Extras Provides platform-specific APIs for X11.
-Qt XML C++ implementations of SAX and DOM.
-Qt XML Patterns Support for XPath, XQuery, XSLT and XML schema
- validation.
-Qt Wayland Compositor Provides a framework to develop a Wayland compositor.
-Qt Charts UI Components for displaying charts.
-Qt Data Visualization UI Components for creating 3D data visualizations.
-Qt Virtual Keyboard A framework for implementing different input methods
- as well as a QML virtual keyboard.
-
-
-1b. Licenses software – Embedded software development libraries
-
-Module Description
-Boot 2 Qt stack Yocto based Embedded Linux stack for selected
- target hardware.
-Qt OTA Client-side capability for device image updates Over
- The Air.
-Device Utilities Collection of API’s to manage the device; E.g.
- display, WiFi and Bluetooth settings.
-Qt Debugging Bridge (QDB) Daemon Enables host-target deployment, debugging,
- profiling and other features over USB. Up to developer
- to decide if this is left in the final solution.
-
-
-1c. Licensed Software - Qt Tools/Applications
-
-Tool Description
-Qt Creator The integrated development environment for Qt.
-Qt Designer Qt tool for designing and building graphical user
- interfaces.
-Qt Linguist Tool used to add translations to Qt applications.
-Qt Assistant Tool for viewing online documentation in Qt
- help-file format.
-Qmake Utility tool used to automate the generation of make
- files.
-uic User interface compiler for the Qt GUI toolkit.
-rcc Resource compiler used for embedding resources into
- Qt applications.
-lupdate Tool that finds the translatable strings in the
- specified source, header and Qt Designer interface
- files, and produces or updates translation files.
-lrelease Tool that produces translation files in the compact
- binary format used by localized Qt applications.
-qlalr Qt parser generator tool.
-qdoc Configurable documentation generation tool.
-qmlscene QML launcher tool.
-qmlviewer QML launcher tool.
-
-
-1d. Licenses software –Qt Tools/Applications specific to embedded software
-development
-
-Tool Description
-Target toolchains Cross compilation toolchains for supported target
- devices and operating systems.
-Qt Debugging Bridge (QDB) Enables deployment, debugging, profiling and other
-Host Tools features over USB from development host PC to target
- device.
-qtconfig-gui Qt Lite Configurator tool graphical interface.
-Qt Emulator Qt Emulator
-
-
-2. Parts of the Licensed Software that are permitted for distribution in
-object-code form only (“Redistributables”) under this Agreement:
-
-2a. Qt for Application Development
-
- - The Licensed Software's Qt Toolkit libraries defined in 1a
- - The Licensed Software's installer framework
-
-2b. Qt for Device Creation
-
- - Qt for Application Development Redistributables defined in 2a
- - The Licensed Software’s Embedded software development libraries defined
- in 1b
-
-2c. Qt 3D Studio
-
-- The Licensed Software’s Qt 3D Studio Runtime (“Qt53DStudioRuntime2”)
+APPENDICES
+The Agreement includes Appendix 1, and possibly one or more of the appendices
+3-5, depending on the product(s) purchased by the Licensee, what is stated in
+the quote or invoice, and/or what is stated in the Licensee's License
+Certificate.
-APPENDIX 3: ADDITIONS TO LICENSED SOFTWARE
+APPENDIX 1
+The modules and/or tools that are included in the respective product - Qt for
+Application Development (QtAD), Qt for Device Creation (QtDC), Qt for MCUs
+(QtMCU), Qt 3D Studio (Qt3DS) and Qt Design Studio (QtDS) - are marked with 'X'
+in the below table.
+
+Parts of the product that are permitted for distribution in object-code form
+only ("Redistributables") are marked with 'R' in the below table.
+
+Modules/Tools | QtAD | QtDC | QtMCU | Qt3DS | QtDS
+-------------------------------------------------------------------------------
+Qt Core | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt GUI | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Multimedia | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Multimedia Widgets | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Network | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt QML | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Quick | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Quick Controls 2 | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Quick Dialogs | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Quick Layouts | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Quick Test | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt SQL | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Test | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Widgets | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Active Qt | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt 3D | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Android Extras | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Bluetooth | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Canvas 3D | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Concurrent | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt D-Bus | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Gamepad | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Graphical Effects | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Help | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Image Formats | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Location | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Mac Extras | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Network Authorization | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt NFC | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Platform Headers | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Positioning | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Print Support | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Purchasing | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt for Python | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Quick Controls | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Quick Extras | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Quick Widgets | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt SCXML | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Sensors | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Serial Bus | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Serial Port | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Speech | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt SVG | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt UI Tools | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt WebChannel | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt WebEngine | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt WebSockets | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt WebView | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Windows Extras | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt X11 Extras | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt XML | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt XML Patterns | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Wayland Compositor | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Charts | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Data Visualization | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Qt Virtual Keyboard | X,R | X,R | | |
+-------------------------------------------------------------------------------
+Boot 2 Qt stack | | X,R | | |
+-------------------------------------------------------------------------------
+Qt OTA | | X,R | | |
+-------------------------------------------------------------------------------
+Device Utilities | | X,R | | |
+-------------------------------------------------------------------------------
+Qt Debugging Bridge (QDB) Daemon | | X,R | | |
+-------------------------------------------------------------------------------
+Qt Quick Ultralite Controls | | | X,R | |
+-------------------------------------------------------------------------------
+Qt Quick Ultralite | | | X,R | |
+-------------------------------------------------------------------------------
+Qt Creator | X | X | X | |
+-------------------------------------------------------------------------------
+Qt Designer (Qt Widget Designer) | X | X | | |
+-------------------------------------------------------------------------------
+Qt Quick Designer (Qt Creator plugin) | X | X | X | |
+-------------------------------------------------------------------------------
+Qt Linguist | X | X | X | |
+-------------------------------------------------------------------------------
+Qt Assistant | X | X | X | |
+-------------------------------------------------------------------------------
+lupdate | X | X | X | |
+-------------------------------------------------------------------------------
+lrelease | X | X | X | |
+-------------------------------------------------------------------------------
+qmake | X | X | | |
+-------------------------------------------------------------------------------
+uic | X | X | | |
+-------------------------------------------------------------------------------
+rcc | X | X | | |
+-------------------------------------------------------------------------------
+qlalr | X | X | | |
+-------------------------------------------------------------------------------
+qdoc | X | X | | |
+-------------------------------------------------------------------------------
+qmlscene | X | X | | |
+-------------------------------------------------------------------------------
+qmlviewer | X | X | | |
+-------------------------------------------------------------------------------
+Target toolchains | | X | X | |
+-------------------------------------------------------------------------------
+Qt Debugging Bridge (QDB) Host Tools | | X | | |
+-------------------------------------------------------------------------------
+qtconfig-gui | | X | | |
+-------------------------------------------------------------------------------
+Qt Emulator | | X | | |
+-------------------------------------------------------------------------------
+qmlinterfacegenerator | | | X | |
+-------------------------------------------------------------------------------
+qmltocpp | | | X | |
+-------------------------------------------------------------------------------
+qulfontcompiler | | | X | |
+-------------------------------------------------------------------------------
+Qt53DStudioRuntime2 | | | | X,R |
+-------------------------------------------------------------------------------
+Qt 3D Studio | | | | X |
+-------------------------------------------------------------------------------
+Qt Design Studio | | | | | X
+-------------------------------------------------------------------------------
-1. Licensed Software
+APPENDIX 3: ADDITIONS TO LICENSED SOFTWARE
In addition to what is provided under the definition of the Licensed Software,
-Parties agree that Licensed Software shall also include the following additional
-software products of The Qt Company if included in the quote / invoice:
-
-Additional software product Description
-Qt for Automation A collection of software components and
- libraries targeted for the development of
- automation systems.
-Qt Safe Renderer Provides a UI rendering component that can be
- used to render safety- critical items as well
- as documentation and certification artifacts.
-Qt Application Manager Daemon, that helps to create embedded Linux
- systems that have a highly complex UI setup.
-GammaRay A software introspection tool for Qt
- applications.
-
-
-2. Parts of the Licensed Software that are permitted for distribution in
-object-code form only (“Redistributables”) under this Agreement:
-
- - Qt for Automation The Licensed Software’s Qt for Automation
- libraries defined in 1
- - Qt Safe Renderer The Licensed Software’s Qt Safe Renderer
- libraries defined in 1
- - Qt Application Manager The Licensed Software’s Qt Application Manager
- libraries defined in 1
-
-All the above is considered as Redistributables and subject to applicable
-provisions and limitations including but not limited to what is defined in
-section 3.
-
-
-APPENDIX 4: SMALL BUSINESS AND START-UP APPENDIX
-
+Parties agree that Licensed Software shall also include the Add-On Products of
+The Qt Company, as mentioned in this Appendix, if included in the
+quote / invoice.
+
+The Modules and/or Tools of the Licensed Software that are included with each
+Add-On Product respectively are marked with 'X' in the below table. Parts of
+the respective Add-On Product that are permitted for distribution in
+object-code form only ("Redistributables") are marked with 'R' in the below
+table.
+
+-------------------------------------------------------------------------------
+ | Add-On Product(s)
+Modules / |------------------------------------------------------------------
+Tools of |Qt for |Qt |Qt Safe |Qt |Qt |Qt
+Licensed |Automation |Automotive |Renderer |Application|Gammaray |Deployment
+Software | |Suite | |Manager | |Platform
+ | | | | | |Package
+-------------------------------------------------------------------------------
+Qt MQTT | X,R | | | | |
+-------------------------------------------------------------------------------
+Qt KNX | X,R | | | | |
+-------------------------------------------------------------------------------
+Qt OPC UA | X,R | | | | |
+-------------------------------------------------------------------------------
+Qt CoAP | X,R | | | | |
+-------------------------------------------------------------------------------
+Qt Safe | | X,R | X,R | | |
+Renderer | | | | | |
+-------------------------------------------------------------------------------
+Qt | | | | | |
+Application | | X,R | | X,R | |
+Manager | | | | | |
+-------------------------------------------------------------------------------
+Qt IVI | | X,R | | | |
+-------------------------------------------------------------------------------
+Reference UI| | X,R | | | |
+-------------------------------------------------------------------------------
+Qt GENIVI | | X,R | | | |
+Extras | | | | | |
+-------------------------------------------------------------------------------
+QML Live | | X | | | |
+-------------------------------------------------------------------------------
+Qt Creator | | X | | | |
+Deployment | | | | | |
+-------------------------------------------------------------------------------
+Qt Creator | | | | | |
+Plugin for | | | | | |
+Qt | | X | | X | |
+Application | | | | | |
+Manager | | | | | |
+-------------------------------------------------------------------------------
+Qt | | | | | |
+Automotive | | | | | |
+Suite | | X | | | |
+Deployment | | | | | |
+Server | | | | | |
+-------------------------------------------------------------------------------
+Qt Design | | X | | | |
+Studio | | | | | |
+-------------------------------------------------------------------------------
+Qt 3D Studio| | X | | | |
+-------------------------------------------------------------------------------
+GammaRay | | X | | | X |
+-------------------------------------------------------------------------------
+Platform | | | | | |
+adaptations | | | | | |
+for | | | | | | X
+specified | | | | | |
+Deployment | | | | | |
+Platforms | | | | | |
+-------------------------------------------------------------------------------
+Qt for | | | | | |
+Device | | X | | | |
+Creation | | | | | |
+-------------------------------------------------------------------------------
+
+All the above Redistributables are subject to applicable provisions and
+limitations including but not limited to what is defined in section 3 of the
+Agreement.
+
+
+APPENDIX 4: SMALL BUSINESS AND STARTUP
The provisions of this Appendix 4 are applicable for Start-up Companies and for
-the Evaluation Term.
+the Evaluation Term.For the purpose of this Appendix 4, the following
+additional definitions shall be applicable:
-For the purpose of this Appendix 4, the following additional definitions shall
-be applicable:
-“Trial Term” shall mean a period of twelve (12) months.
+"Trial Term" shall mean a period of twelve (12) months.
-“Start-up Company” means a company with a maximum annual revenue, including
+"Start-up Company" means a company with a maximum annual revenue, including
funding, equivalent to 100,000 USD (in applicable currency) during a respective
-calendar year, as evidenced by duly audited records of the Licensee and approved
-by The Qt Company.
+calendar year, as evidenced by duly audited records of the Licensee and
+approved by The Qt Company.
During the Trial Term, Section 3 shall apply with following modifications
-(“Trial Term Modifications”):
-
- - Licenses granted under Sections 3.1 and 3.2 shall be free of any charge.
- For clarity, License for distribution of Devices pursuant to Section 3.3 is
- subject to applicable License Fee for necessary Distribution Licenses;
- - Development License under Section 3.1 is limited to a maximum of three (3)
- Designated Users; and
- - Support is available subject to availability, as judged by The Qt Company
- at its free and absolute discretion, provided that support will be limited
- to a maximum of ten (10) tickets during the Trial Term.
+("Trial Term Modifications"):
+ (i) Licenses granted under Sections 3.1 and 3.2 shall be free of any
+ charge. For clarity, License for distribution of Devices pursuant
+ to Section 3.3 is subject to applicable License Fee for necessary
+ Distribution Licenses;
+ (ii) Development License under Section 3.1 is limited to a maximum of
+ three (3) Designated Users; and
+ (iii) Support is available subject to availability, as judged by The Qt
+ Company at its free and absolute discretion, provided that support
+ will be limited to a maximum of ten (10) tickets during the Trial
+ Term.
Upon expiry of the Trial Term:
-
- a) This Appendix 4 is terminated, Trial Term Modifications cease to remain in
- force, Licensee’s Development Licenses shall be automatically converted
- into licenses subject to a License Fee (in the amount specified in the
- quote or in Appendix 2 and payable with a 30-day payment term) and
- Licensee’s rights and obligations under this Agreement shall continue to
- remain in force under the standard provisions of the Agreement, unless the
- Licensee notifies The Qt Company in writing no less than ninety (90) days
- before such expiry date that Licensee does not agree to such continuance,
- in which event the Agreement, and all rights of the Licensee thereunder,
- shall expire; provided however that
- b) in the event the Licensee still qualifies as a Start-up Company, the
- Licensee has an option (“Option”), instead of what is stated in item a)
- above, to extend the Trial Term renewal is limited to one time and total
- duration of Trial Terms thus to 24 months after the effective date.
- Licensee shall notify The Qt Company in writing no less than ninety (90)
- days before the expiry date, if Licensee wish to exercise the Option.
-
-
-APPENDIX 5: NON-COMMERCIAL USE APPENDIX
-
+ (a) This Appendix 4 is terminated, Trial Term Modifications cease to
+ remain in force, Licensee's Development Licenses shall be
+ automatically converted into licenses subject to a License Fee (in
+ the amount specified in the quote or in Appendix 2 and payable with
+ a 30-day payment term) and Licensee's rights and obligations under
+ this Agreement shall continue to remain in force under the standard
+ provisions of the Agreement, unless the Licensee notifies The Qt
+ Company in writing no less than ninety (90) days before such expiry
+ date that Licensee does not agree to such continuance, in which
+ event the Agreement, and all rights of the Licensee thereunder,
+ shall expire; provided however that
+ (b) in the event the Licensee still qualifies as a Start-up Company,
+ the Licensee has an option ("Option"), instead of what is stated in
+ item a) above, to renew the Trial Term. Renewal is limited to one
+ time, and the total duration of Trial Term is thus 24 months after
+ the effective date. Licensee shall notify The Qt Company in
+ writing, no less than ninety (90) days before the expiry date, if
+ Licensee wish to exercise the Option.
+
+
+APPENDIX 5: NON-COMMERCIAL USE
The provisions of this Appendix 5 are applicable for non-commercial use of the
-Licensed Software by the Licensee. For the purpose of this Appendix 5, the
-following additional definitions (replacing the relevant definition of the
-Agreement, where applicable) shall be applicable:
+Licensed Software by the Licensee.
-“Demo Units” shall mean
- (i) hardware development platform, which incorporates the Licensed
- Software along with Licensee’s software and/or hardware, and
- (ii) prototype versions of Applications or Devices.
+For the purpose of this Appendix 5, the following additional definitions
+(replacing the relevant definition of the Agreement, where applicable) shall be
+applicable:
-“Designated User(s)” shall mean the employees and students of the Licensee.
+"Demo Units" shall mean (i) hardware development platform, which incorporates
+the Licensed Software along with Licensee's software and/or hardware, and (ii)
+prototype versions of Applications or Devices.
-“Licensee Products” shall mean Applications and/or Devices.
+"Designated User(s)" shall mean the employees and students of the Licensee.
-“Permitted Purpose” shall mean
- (i) Licensee’s internal evaluation and testing of Licensed Software,
- (ii) building Demo Units as well as
- (iii) educational use.
+"Licensee Products" shall mean Applications and/or Devices.
-“Term” shall mean a period of twelve (12) months or any such other period as
+"Permitted Purpose" shall mean (i) Licensee's internal evaluation and testing
+of Licensed Software, (ii) building Demo Units as well as (iii) educational
+use.
+
+"Term" shall mean a period of twelve (12) months or any such other period as
may be agreed between the Parties.
For the purpose of this Appendix 5, the following changes shall be agreed with
respect to relevant Sections of the Agreement:
- I. Recital (A) shall be replaced in its entirety to read as follows: “(A)
- Licensee wishes to use the Licensed Software for the Permitted Purpose.”
- II. Section 3.1 shall be replaced in its entirety to read as follows: “The
- Qt Company grants to Licensee a personal, non-exclusive,
- non-transferable, revocable, royalty-free license, valid for the Term,
- to use, modify and copy the Licensed Software solely for the Permitted
- Purpose. Licensee may install copies of the Licensed Software on an
- unlimited number of computers provided that only Designated Users may
- use the Licensed Software. Licensee may demonstrate the Demo Units,
- provided that such demonstrations must be conducted by Licensee, and
- the Demo Units must remain in Licensee’s possession and under
- Licensee’s control at all times. For clarity, this Agreement does not
- (i) entitle Licensee to use Licensed Software to create Applications
- or Devices (other than prototypes thereof) or
- (ii) carry any distribution rights to Licensee, but such rights are
- subject to and conditional upon conclusion of a separate
- license agreement with The Qt Company.”
- III. Sections 3.2, 3.3, 8 and 10 shall be deleted.
- IV. Section 3.4 shall be replaced in its entirety to read as follows:
- “Licensee shall not:
- - remove or alter any copyright, trademark or other proprietary
- rights notice contained in any portion of the Licensed Software;
- - transfer, publish, sublicense, disclose, display or otherwise make
- the Licensed Software available to any third party (except that
- Licensee may demonstrate the Demo Units pursuant to Section 3.1);
- - in any way combine, incorporate or integrate Licensed Software
- with, or use Licensed Software for creation of, any software
- created with or incorporating Open Source Qt;
- - Licensee shall cause all Designated Users who make use of the
- licenses granted under this Agreement, to be contractually bound to
- comply with the relevant terms of this Agreement and not to use the
- Licensed Software beyond the terms hereof. Licensee shall be
- responsible for any and all actions and omissions of its Designated
- Users relating to the Licensed Software and use thereof. Any use
- of Licensed Software beyond the provisions of this Agreement is
- strictly prohibited and requires an additional license from The Qt
- Company.”
- V. Section 12 shall be replaced in its entirety to read as follows: “This
- Agreement shall enter into force upon due acceptance by both Parties
- and remain in force for the Term, unless and until terminated pursuant
- to the terms of Section 12. Upon termination of the Agreement, Licensee
- shall cease using the Licensed Software. All other copies of Licensed
- Software in the possession or control of Licensee must be erased or
- destroyed. An officer of Licensee must, upon request, promptly deliver
- to The Qt Company a written confirmation that this has occurred.”
+ I. Recital (A) shall be replaced in its entirety to read as follows:
-Except for the modifications specified above, this Appendix carries no change to
-the terms of the Agreement, which shall remain in full force.
+ "(A) Licensee wishes to use the Licensed Software for the Permitted
+ Purpose."
+ II. Section 3.1 shall be replaced in its entirety to read as follows:
-APPENDIX 8: QT FOR DEVICE CREATION MCU APPENDIX
+ "The Qt Company grants to Licensee a personal, non-exclusive,
+ non-transferable, revocable, royalty-free license, valid for the
+ Term, to use, modify and copy the Licensed Software solely for the
+ Permitted Purpose.
-This Appendix 8 shall be applicable in case the Licensee and/or respective
-Designated User have purchased Qt for Device Creation MCU, either as an
-add-on or standalone package. In case Qt for Device Creation MCU is purchased
-as an addition to Qt for Device Creation, this appendix is an addition to
-Appendix 1. In any other case, this appendix replaces Appendix 1.
+ Licensee may install copies of the Licensed Software on an
+ unlimited number of computers provided that only Designated Users
+ may use the Licensed Software.
-1a. Licensed Software - Qt Toolkit
+ Licensee may demonstrate the Demo Units, provided that such
+ demonstrations must be conducted by Licensee, and the Demo Units
+ must remain in Licensee's possession and under Licensee's control
+ at all times.
-Module Description
-Qt Quick Controls 2 Provides lightweight QML types for creating
- performant user interfaces for desktop, embedded,
- and mobile devices.
+ For clarity, this Agreement does not (i) entitle Licensee to use
+ Licensed Software to create Applications or Devices (other than
+ prototypes thereof) or (ii) carry any distribution rights to
+ Licensee, but such rights are subject to and conditional upon
+ conclusion of a separate license agreement with The Qt Company."
+ III. Sections 3.2, 3.3, 8 and 10 shall be deleted.
-1b. Licensed software – Embedded software development libraries
+ IV. Section 3.4 shall be replaced in its entirety to read as follows:
-Module Description
-Qt Quick Ultralite Qt Quick Ultralite (QUL) rendering engine and sample
- source codes.
-Qt Quick Ultralite Platform adaptations including OS support that allow
-Platform Adaptations applications on QUL to run on microcontrollers
+ "Licensee shall not:
+ - remove or alter any copyright, trademark or other proprietary
+ rights notice contained in any portion of the Licensed
+ Software;
+ - transfer, publish, sublicense, disclose, display or otherwise
+ make the Licensed Software available to any third party
+ (except that Licensee may demonstrate the Demo Units pursuant
+ to Section 3.1);
-1c. Licensed Software - Qt Tools/Applications
+ - in any way combine, incorporate or integrate Licensed
+ Software with, or use Licensed Software for creation of, any
+ software created with or incorporating Open Source Qt;
-Tool Description
-Qt Creator The integrated development environment for Qt.
-Qt Designer Qt tool for designing and building graphical user
- interfaces.
-Qt Linguist Tool used to add translations to Qt applications.
-Qt Assistant Tool for viewing online documentation in Qt help-file
- format.
-lupdate Tool that finds the translatable strings in the
- specified source, header and Qt Designer interface
- files, and produces or updates translation files.
-lrelease Tool that produces translation files in the compact
- binary format used by localized Qt applications.
+ Licensee shall cause all Designated Users who make use of the
+ licenses granted under this Agreement, to be contractually bound to
+ comply with the relevant terms of this Agreement and not to use the
+ Licensed Software beyond the terms hereof. Licensee shall be
+ responsible for any and all actions and omissions of its Designated
+ Users relating to the Licensed Software and use thereof.
+ Any use of Licensed Software beyond the provisions of this
+ Agreement is strictly prohibited and requires an additional license
+ from The Qt Company."
-1d. Licensed software – Qt Tools/Applications specific to embedded software
-development
+ V. Section 12 shall be replaced in its entirety to read as follows:
-Tool Description
-Target toolchains Cross compilation toolchains for supported target
- devices and operating systems.
-qmlinterfaceextractor Tool to generate QML from header file.
-qml2cpp Tool to convert QML to C++ files.
-fontcompiler Tool to compile font meta data and True Type fonts.
+ "This Agreement shall enter into force upon due acceptance by both
+ Parties and remain in force for the Term, unless and until
+ terminated pursuant to the terms of Section 12.
+ Upon termination of the Agreement, Licensee shall cease using the
+ Licensed Software. All other copies of Licensed Software in the
+ possession or control of Licensee must be erased or destroyed. An
+ officer of Licensee must, upon request, promptly deliver to The Qt
+ Company a written confirmation that this has occurred."
-2. Parts of the Licensed Software that are permitted for distribution in
-object-code form only (“Redistributables”) under this Agreement:
+Except for the modifications specified above, this Appendix carries no change
+to the terms of the Agreement which shall remain in full force.
- - The Licensed Software’s Embedded software development libraries
- defined in 1b.
diff --git a/recipes-qt/qt5/nativesdk-qtbase_git.bb b/recipes-qt/qt5/nativesdk-qtbase_git.bb
index c4231585..bf5f5d81 100644
--- a/recipes-qt/qt5/nativesdk-qtbase_git.bb
+++ b/recipes-qt/qt5/nativesdk-qtbase_git.bb
@@ -196,4 +196,4 @@ fakeroot do_generate_qt_environment_file() {
do_generate_qt_environment_file[umask] = "022"
addtask generate_qt_environment_file after do_install before do_package
-SRCREV = "12fc3f575102a69fcfba36eeb9ae04bd3d54d820"
+SRCREV = "7ed097b31f7e15812144c360021872cf8f11821e"
diff --git a/recipes-qt/qt5/ogl-runtime_git.bb b/recipes-qt/qt5/ogl-runtime_git.bb
index 5e1f183f..1b5dc7c8 100644
--- a/recipes-qt/qt5/ogl-runtime_git.bb
+++ b/recipes-qt/qt5/ogl-runtime_git.bb
@@ -9,10 +9,10 @@ LIC_FILES_CHKSUM = " \
DEPENDS += "qtbase qtdeclarative qtquickcontrols2"
-QT_MODULE_BRANCH = "2.5"
+QT_MODULE_BRANCH = "2.6"
QT_MODULE_BRANCH_EASTL = "master"
QT_GIT_PROJECT = "qt3dstudio"
-PV = "2.5.0+git${SRCPV}"
+PV = "2.6.0+git${SRCPV}"
COMPATIBLE_HOST = "(i.86|x86_64|aarch64|arm|powerpc64).*-linux"
@@ -22,7 +22,7 @@ SRC_URI += " \
file://0001-Qt3DSSimpleTypes-make-QT3DSU64-as-unsigned-long-on-l.patch \
"
-SRCREV_ogl-runtime = "25236c672d81a73ee8754dbd764eb8a2a26d866e"
+SRCREV_ogl-runtime = "fe3ffda451732ebca0bdd7ecd19099f4cbfcfa75"
SRCREV_EASTL = "31697c758f2ed19bd7c6bbe61f1b91f9e12035b5"
SRCREV = "${SRCREV_ogl-runtime}"
diff --git a/recipes-qt/qt5/qt3d/0001-Allow-a-tools-only-build.patch b/recipes-qt/qt5/qt3d/0001-Allow-a-tools-only-build.patch
index f7b88cf3..5b3097cd 100644
--- a/recipes-qt/qt5/qt3d/0001-Allow-a-tools-only-build.patch
+++ b/recipes-qt/qt5/qt3d/0001-Allow-a-tools-only-build.patch
@@ -28,6 +28,7 @@ index c5232e116..cf5345352 100644
+ sub_tools.depends -= sub_src
+ SUBDIRS = sub_tools
+}
+\ No newline at end of file
diff --git a/src/3rdparty/assimp/assimp_dependency.pri b/src/3rdparty/assimp/assimp_dependency.pri
index 8ba2d9a41..e973d93dd 100644
--- a/src/3rdparty/assimp/assimp_dependency.pri
diff --git a/recipes-qt/qt5/qt3d_git.bb b/recipes-qt/qt5/qt3d_git.bb
index 4d9cf2d8..f6cde878 100644
--- a/recipes-qt/qt5/qt3d_git.bb
+++ b/recipes-qt/qt5/qt3d_git.bb
@@ -36,6 +36,6 @@ do_configure_prepend() {
${S}/src/quick3d/imports/input/importsinput.pro
}
-SRCREV = "622c757a93624c660de9a33fc833a10de6a2efe6"
+SRCREV = "dd84bf4a99bb181fc1176830b4504d6f023898d8"
BBCLASSEXTEND += "native nativesdk"
diff --git a/recipes-qt/qt5/qt5-creator/0002-Fix-QPainterPath-related-compilation-errors-in-Qt-5..patch b/recipes-qt/qt5/qt5-creator/0002-Fix-QPainterPath-related-compilation-errors-in-Qt-5..patch
new file mode 100644
index 00000000..aa21ef5e
--- /dev/null
+++ b/recipes-qt/qt5/qt5-creator/0002-Fix-QPainterPath-related-compilation-errors-in-Qt-5..patch
@@ -0,0 +1,115 @@
+From db11c16b977e204c7000ef689452045f85ba98b7 Mon Sep 17 00:00:00 2001
+From: Friedemann Kleint <Friedemann.Kleint@qt.io>
+Date: Thu, 12 Mar 2020 09:26:58 +0100
+Subject: [PATCH] Fix QPainterPath-related compilation errors in Qt 5.15
+
+Some include of QPainterPath was removed in Qt, causing errors like:
+
+easingpane\easinggraph.cpp(258): error C2079: 'path' uses undefined class 'QPainterPath'
+easingpane\easinggraph.cpp(275): error C2027: use of undefined type 'QPainterPath'
+easingpane\easinggraph.cpp(305): error C2664: 'void QPainter::drawPath(const QPainterPath &)': cannot convert argument 1 from 'int'
+to 'const QPainterPath &'
+easingpane\easinggraph.cpp(305): note: Reason: cannot convert from 'int' to 'const QPainterPath'
+easingpane\easinggraph.cpp(305): note: use of undefined type 'QPainterPath'
+...
+
+Add the missing include statements.
+
+Change-Id: I4f3383cbcec891a52480a683c9c76ed5deee2b2a
+Reviewed-by: Eike Ziller <eike.ziller@qt.io>
+(cherry picked from commit b8ad0fdae90679b18238f58522058ea9b5934646)
+---
+ src/libs/modelinglib/qmt/stereotype/shapepaintvisitor.cpp | 2 ++
+ src/libs/qmleditorwidgets/easingpane/easingcontextpane.cpp | 1 +
+ src/libs/qmleditorwidgets/easingpane/easinggraph.cpp | 1 +
+ src/plugins/coreplugin/fancyactionbar.cpp | 1 +
+ src/plugins/coreplugin/manhattanstyle.cpp | 1 +
+ src/plugins/texteditor/texteditor.cpp | 1 +
+ src/plugins/texteditor/texteditoroverlay.cpp | 1 +
+ 7 files changed, 8 insertions(+)
+
+diff --git a/src/libs/modelinglib/qmt/stereotype/shapepaintvisitor.cpp b/src/libs/modelinglib/qmt/stereotype/shapepaintvisitor.cpp
+index 880835287a..930f8450ad 100644
+--- a/src/libs/modelinglib/qmt/stereotype/shapepaintvisitor.cpp
++++ b/src/libs/modelinglib/qmt/stereotype/shapepaintvisitor.cpp
+@@ -27,6 +27,8 @@
+
+ #include "shapes.h"
+
++#include <QPainterPath>
++
+ namespace qmt {
+
+ ShapePaintVisitor::ShapePaintVisitor(QPainter *painter, const QPointF &scaledOrigin, const QSizeF &originalSize,
+diff --git a/src/libs/qmleditorwidgets/easingpane/easingcontextpane.cpp b/src/libs/qmleditorwidgets/easingpane/easingcontextpane.cpp
+index d43b458881..ded1b544af 100644
+--- a/src/libs/qmleditorwidgets/easingpane/easingcontextpane.cpp
++++ b/src/libs/qmleditorwidgets/easingpane/easingcontextpane.cpp
+@@ -30,6 +30,7 @@
+
+ #include <QGraphicsPixmapItem>
+ #include <QGraphicsScene>
++#include <QPainterPath>
+ #include <QPropertyAnimation>
+ #include <QSequentialAnimationGroup>
+
+diff --git a/src/libs/qmleditorwidgets/easingpane/easinggraph.cpp b/src/libs/qmleditorwidgets/easingpane/easinggraph.cpp
+index 4163569c04..e8360e0db6 100644
+--- a/src/libs/qmleditorwidgets/easingpane/easinggraph.cpp
++++ b/src/libs/qmleditorwidgets/easingpane/easinggraph.cpp
+@@ -26,6 +26,7 @@
+ #include "easinggraph.h"
+
+ #include <QPainter>
++#include <QPainterPath>
+ #include <QStyleOptionGraphicsItem>
+ #include <math.h>
+
+diff --git a/src/plugins/coreplugin/fancyactionbar.cpp b/src/plugins/coreplugin/fancyactionbar.cpp
+index 8d496ea3d2..72875823a2 100644
+--- a/src/plugins/coreplugin/fancyactionbar.cpp
++++ b/src/plugins/coreplugin/fancyactionbar.cpp
+@@ -38,6 +38,7 @@
+ #include <QEvent>
+ #include <QMouseEvent>
+ #include <QPainter>
++#include <QPainterPath>
+ #include <QPixmapCache>
+ #include <QPropertyAnimation>
+ #include <QStyle>
+diff --git a/src/plugins/coreplugin/manhattanstyle.cpp b/src/plugins/coreplugin/manhattanstyle.cpp
+index 709dcf62aa..156cac322e 100644
+--- a/src/plugins/coreplugin/manhattanstyle.cpp
++++ b/src/plugins/coreplugin/manhattanstyle.cpp
+@@ -43,6 +43,7 @@
+ #include <QLineEdit>
+ #include <QMenuBar>
+ #include <QPainter>
++#include <QPainterPath>
+ #include <QPixmap>
+ #include <QStatusBar>
+ #include <QStyleFactory>
+diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp
+index 59926e31ea..576dea22d8 100644
+--- a/src/plugins/texteditor/texteditor.cpp
++++ b/src/plugins/texteditor/texteditor.cpp
+@@ -98,6 +98,7 @@
+ #include <QMessageBox>
+ #include <QMimeData>
+ #include <QPainter>
++#include <QPainterPath>
+ #include <QPrintDialog>
+ #include <QPrinter>
+ #include <QPropertyAnimation>
+diff --git a/src/plugins/texteditor/texteditoroverlay.cpp b/src/plugins/texteditor/texteditoroverlay.cpp
+index a33ca13810..431045f1db 100644
+--- a/src/plugins/texteditor/texteditoroverlay.cpp
++++ b/src/plugins/texteditor/texteditoroverlay.cpp
+@@ -30,6 +30,7 @@
+ #include <QDebug>
+ #include <QMap>
+ #include <QPainter>
++#include <QPainterPath>
+ #include <QTextBlock>
+
+ #include <algorithm>
diff --git a/recipes-qt/qt5/qt5-creator_git.bb b/recipes-qt/qt5/qt5-creator_git.bb
index 3c3420ca..e7cbfef8 100644
--- a/recipes-qt/qt5/qt5-creator_git.bb
+++ b/recipes-qt/qt5/qt5-creator_git.bb
@@ -26,6 +26,7 @@ PV = "4.9.2+git${SRCPV}"
SRC_URI = " \
git://code.qt.io/qt-creator/qt-creator.git;branch=4.9 \
file://0001-clangformat-AllowShortIfStatementsOnASingleLine-is-n.patch \
+ file://0002-Fix-QPainterPath-related-compilation-errors-in-Qt-5..patch \
"
SRC_URI_append_libc-musl = " file://0001-Link-with-libexecinfo-on-musl.patch"
diff --git a/recipes-qt/qt5/qt5-git.inc b/recipes-qt/qt5/qt5-git.inc
index a3c16a18..b0389949 100644
--- a/recipes-qt/qt5/qt5-git.inc
+++ b/recipes-qt/qt5/qt5-git.inc
@@ -3,7 +3,7 @@
QT_MODULE ?= "${BPN}"
QT_MODULE_BRANCH ?= "5.15"
-QT_MODULE_BRANCH_PARAM ?= "branch=${QT_MODULE_BRANCH}"
+QT_MODULE_BRANCH_PARAM ?= "branch=${QT_MODULE_BRANCH};nobranch=1"
# each module needs to define valid SRCREV
SRC_URI = " \
@@ -14,4 +14,4 @@ CVE_PRODUCT = "qt"
S = "${WORKDIR}/git"
-PV = "5.14.99+5.15-beta3+git${SRCPV}"
+PV = "5.15.0+git${SRCPV}"
diff --git a/recipes-qt/qt5/qtbase-native_git.bb b/recipes-qt/qt5/qtbase-native_git.bb
index f424f0c0..02456b58 100644
--- a/recipes-qt/qt5/qtbase-native_git.bb
+++ b/recipes-qt/qt5/qtbase-native_git.bb
@@ -143,4 +143,4 @@ do_install() {
echo 'set(_qt5_corelib_extra_includes "${_qt5Core_install_prefix}/lib${QT_DIR_NAME}/mkspecs/linux-oe-g++")' > ${D}${libdir}/cmake/Qt5Core/Qt5CoreConfigExtrasMkspecDir.cmake
}
-SRCREV = "12fc3f575102a69fcfba36eeb9ae04bd3d54d820"
+SRCREV = "7ed097b31f7e15812144c360021872cf8f11821e"
diff --git a/recipes-qt/qt5/qtbase_git.bb b/recipes-qt/qt5/qtbase_git.bb
index ea28c27a..67c1ef19 100644
--- a/recipes-qt/qt5/qtbase_git.bb
+++ b/recipes-qt/qt5/qtbase_git.bb
@@ -54,6 +54,7 @@ PACKAGECONFIG_RELEASE ?= "release"
PACKAGECONFIG_DEFAULT ?= "accessibility dbus udev evdev widgets tools libs freetype tests pcre \
${@bb.utils.contains('SELECTED_OPTIMIZATION', '-Os', 'optimize-size ltcg', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'qt5-static', 'static', '', d)} \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'vulkan', d)} \
"
PACKAGECONFIG ?= " \
@@ -101,6 +102,7 @@ PACKAGECONFIG[pcre] = "-system-pcre,-qt-pcre,pcre2"
PACKAGECONFIG[eglfs] = "-eglfs,-no-eglfs,drm"
PACKAGECONFIG[gl] = "-opengl desktop,,virtual/libgl"
PACKAGECONFIG[gles2] = "-opengl es2,,virtual/libgles2 virtual/egl"
+PACKAGECONFIG[vulkan] = "-vulkan,-no-vulkan,vulkan-headers"
PACKAGECONFIG[no-opengl] = "-no-opengl"
PACKAGECONFIG[tslib] = "-tslib,-no-tslib,tslib"
PACKAGECONFIG[cups] = "-cups,-no-cups,cups"
@@ -172,7 +174,6 @@ LDFLAGS_append = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', ' -fuse-
QT_CONFIG_FLAGS += " \
${QT_CONFIG_FLAGS_GOLD} \
- -shared \
-silent \
-no-pch \
-no-rpath \
@@ -294,4 +295,4 @@ sed -i \
$D${OE_QMAKE_PATH_ARCHDATA}/mkspecs/qmodule.pri
}
-SRCREV = "12fc3f575102a69fcfba36eeb9ae04bd3d54d820"
+SRCREV = "7ed097b31f7e15812144c360021872cf8f11821e"
diff --git a/recipes-qt/qt5/qtdeclarative_git.bb b/recipes-qt/qt5/qtdeclarative_git.bb
index 28a79ce3..ffed74b9 100644
--- a/recipes-qt/qt5/qtdeclarative_git.bb
+++ b/recipes-qt/qt5/qtdeclarative_git.bb
@@ -31,6 +31,6 @@ do_install_append_class-nativesdk() {
rm -rf ${D}${OE_QMAKE_PATH_QML}
}
-SRCREV = "d552cd3f50efb9b67c7be88009392d601d3c6682"
+SRCREV = "8dfcc71953cd36370bcf19f537445e3766f39635"
BBCLASSEXTEND =+ "native nativesdk"
diff --git a/recipes-qt/qt5/qtlocation_git.bb b/recipes-qt/qt5/qtlocation_git.bb
index fdc8fc0d..f7f1f35b 100644
--- a/recipes-qt/qt5/qtlocation_git.bb
+++ b/recipes-qt/qt5/qtlocation_git.bb
@@ -35,7 +35,7 @@ SRC_URI += " \
${QT_GIT}/qtlocation-mapboxgl.git;name=qtlocation-mapboxgl;branch=${QT_MODULE_BRANCH_MAPBOXGL};protocol=${QT_GIT_PROTOCOL};destsuffix=git/src/3rdparty/mapbox-gl-native \
"
-SRCREV_qtlocation = "eda2a7c286058176e1906d0ddc88d4e2cfbec55e"
+SRCREV_qtlocation = "05659943df25a4ab6edcbfc8ebaa6bc23a2eb72f"
SRCREV_qtlocation-mapboxgl = "d9577fdebe019b19e184b4cac82749ae9ec87afb"
SRCREV_FORMAT = "qtlocation_qtlocation-mapboxgl"
diff --git a/recipes-qt/qt5/qtmultimedia_git.bb b/recipes-qt/qt5/qtmultimedia_git.bb
index 93e87994..1a4c57af 100644
--- a/recipes-qt/qt5/qtmultimedia_git.bb
+++ b/recipes-qt/qt5/qtmultimedia_git.bb
@@ -38,7 +38,7 @@ SRC_URI += "\
# http://errors.yoctoproject.org/Errors/Build/44914/
LDFLAGS_append_x86 = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', ' -fuse-ld=bfd ', '', d)}"
-SRCREV = "7f0503acb042d047682b432e68ed97b1644c3f59"
+SRCREV = "d0e0119251288c9c7224c5c6797a1377032aac2f"
# Temporary work around for Qt5MultimediaConfig.cmake referencing non-existent videoeglvideonode directory
do_install_append() {
diff --git a/recipes-qt/qt5/qtquick3d_git.bb b/recipes-qt/qt5/qtquick3d_git.bb
index 28cfd024..67c7bef8 100644
--- a/recipes-qt/qt5/qtquick3d_git.bb
+++ b/recipes-qt/qt5/qtquick3d_git.bb
@@ -21,7 +21,7 @@ FILES_${PN}-qmlplugins += " \
${OE_QMAKE_PATH_QML}/QtQuick3D/Helpers/meshes/*.mesh \
"
-SRCREV_qtquick3d = "ba49d22e9dce12f2a85b91d4876d8e1aee0792df"
+SRCREV_qtquick3d = "91704d001196be41d9cc59b22692b73cf8d409d9"
SRCREV_assimp = "8f0c6b04b2257a520aaab38421b2e090204b69df"
SRCREV_FORMAT = "qtquick3d_assimp"
diff --git a/recipes-qt/qt5/qtquicktimeline_git.bb b/recipes-qt/qt5/qtquicktimeline_git.bb
new file mode 100644
index 00000000..14817e72
--- /dev/null
+++ b/recipes-qt/qt5/qtquicktimeline_git.bb
@@ -0,0 +1,13 @@
+require qt5.inc
+require qt5-git.inc
+
+DESCRIPTION = "Qt Quick Timeline"
+LICENSE = "GPL-2.0+ | The-Qt-Company-Commercial"
+LIC_FILES_CHKSUM = " \
+ file://LICENSE.GPL2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://LICENSE.GPL3;md5=d32239bcb673463ab874e80d47fae504 \
+ "
+
+DEPENDS = "qtbase qtdeclarative"
+
+SRCREV = "973e5e6da27cee94d95ed05cc4251c70381e9ad9"
diff --git a/recipes-qt/qt5/qtremoteobjects_git.bb b/recipes-qt/qt5/qtremoteobjects_git.bb
index 8dc9d068..3b14a48a 100644
--- a/recipes-qt/qt5/qtremoteobjects_git.bb
+++ b/recipes-qt/qt5/qtremoteobjects_git.bb
@@ -25,6 +25,6 @@ PACKAGECONFIG[tools-only] = "CONFIG+=tools-only"
EXTRA_QMAKEVARS_PRE += "${PACKAGECONFIG_CONFARGS}"
-SRCREV = "9ec14db5a9f735eb4286984f934568f089627bd7"
+SRCREV = "5ac51056f9b99ca6741e008bdd77cce10107bd91"
BBCLASSEXTEND += "native nativesdk"
diff --git a/recipes-qt/qt5/qtserialport_git.bb b/recipes-qt/qt5/qtserialport_git.bb
index 4ab0eecd..c181b8dc 100644
--- a/recipes-qt/qt5/qtserialport_git.bb
+++ b/recipes-qt/qt5/qtserialport_git.bb
@@ -12,4 +12,4 @@ LIC_FILES_CHKSUM = " \
DEPENDS += "qtbase"
-SRCREV = "ff3fd7b0330cb76772066ce7162320f4dc1a5c28"
+SRCREV = "b30052fa41f6332f20ec440dcdbcd06b41a954f5"
diff --git a/recipes-qt/qt5/qttools_git.bb b/recipes-qt/qt5/qttools_git.bb
index 7ebd5f3e..bfe98a07 100644
--- a/recipes-qt/qt5/qttools_git.bb
+++ b/recipes-qt/qt5/qttools_git.bb
@@ -49,6 +49,7 @@ EXTRA_QMAKEVARS_PRE_append_class-target = "\
${@bb.utils.contains('PACKAGECONFIG', 'clang', 'CONFIG+=config_clang', 'CONFIG+=config_clang_done CONFIG-=config_clang', d)} \
"
-SRCREV = "78e8a23e171569d231c3b8cd14fddef1e9b10a34"
+SRCREV = "8685a264d6961a759257bb3c8ece0beffca2bd14"
BBCLASSEXTEND = "native nativesdk"
+
diff --git a/recipes-qt/qt5/qtvirtualkeyboard_git.bb b/recipes-qt/qt5/qtvirtualkeyboard_git.bb
index 937de4b8..5038f084 100644
--- a/recipes-qt/qt5/qtvirtualkeyboard_git.bb
+++ b/recipes-qt/qt5/qtvirtualkeyboard_git.bb
@@ -71,4 +71,4 @@ FILES_${PN} += "${OE_QMAKE_PATH_DATA}/qtvirtualkeyboard/lipi_toolkit"
DEPENDS += "qtbase qtdeclarative qtmultimedia qtquickcontrols qtsvg qtxmlpatterns qtdeclarative-native"
-SRCREV = "b3556c25ffdc64595e41d005b091776035134846"
+SRCREV = "d2648237c7e3bfc03077b7b1e63c72dc24ff519c"
diff --git a/recipes-qt/qt5/qtwayland_git.bb b/recipes-qt/qt5/qtwayland_git.bb
index 9ac04bf8..71ce03be 100644
--- a/recipes-qt/qt5/qtwayland_git.bb
+++ b/recipes-qt/qt5/qtwayland_git.bb
@@ -22,6 +22,7 @@ PACKAGECONFIG ?= " \
wayland-server \
wayland-egl \
${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'xcomposite-egl xcomposite-glx', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'vulkan', 'wayland-vulkan-server-buffer', '', d)} \
"
PACKAGECONFIG_class-native ?= ""
PACKAGECONFIG_class-nativesdk ?= ""
@@ -38,6 +39,7 @@ PACKAGECONFIG[wayland-egl] = "-feature-wayland-egl,-no-feature-wayland-egl,virtu
PACKAGECONFIG[wayland-brcm] = "-feature-wayland-brcm,-no-feature-wayland-brcm,virtual/egl"
PACKAGECONFIG[wayland-drm-egl-server-buffer] = "-feature-wayland-drm-egl-server-buffer,-no-feature-wayland-drm-egl-server-buffer,libdrm virtual/egl"
PACKAGECONFIG[wayland-libhybris-egl-server-buffer] = "-feature-wayland-libhybris-egl-server-buffer,-no-feature-wayland-libhybris-egl-server-buffer,libhybris"
+PACKAGECONFIG[wayland-vulkan-server-buffer] = "-feature-wayland-vulkan-server-buffer,-no-feature-wayland-vulkan-server-buffer,vulkan-headers"
EXTRA_QMAKEVARS_CONFIGURE += "${PACKAGECONFIG_CONFARGS}"
diff --git a/recipes-qt/qt5/qtwebengine/chromium/0008-chromium-Fix-build-on-32bit-arches-with-64bit-time_t.patch b/recipes-qt/qt5/qtwebengine/chromium/0008-chromium-Fix-build-on-32bit-arches-with-64bit-time_t.patch
index 81b0f026..7485a896 100644
--- a/recipes-qt/qt5/qtwebengine/chromium/0008-chromium-Fix-build-on-32bit-arches-with-64bit-time_t.patch
+++ b/recipes-qt/qt5/qtwebengine/chromium/0008-chromium-Fix-build-on-32bit-arches-with-64bit-time_t.patch
@@ -12,9 +12,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
chromium/ui/events/ozone/evdev/event_converter_evdev.cc | 4 ++--
+ chromium/ui/events/ozone/evdev/event_converter_evdev.h | 5 +++++
chromium/ui/events/ozone/evdev/touch_evdev_debug_buffer.cc | 6 +++---
chromium/ui/events/ozone/evdev/touch_evdev_debug_buffer.h | 5 +++++
- 3 files changed, 10 insertions(+), 5 deletions(-)
+ 4 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/chromium/ui/events/ozone/evdev/event_converter_evdev.cc b/chromium/ui/events/ozone/evdev/event_converter_evdev.cc
index 9f27d39e209..f565dd2ce5c 100644
@@ -31,6 +32,22 @@ index 9f27d39e209..f565dd2ce5c 100644
ValidateEventTimeClock(&timestamp);
return timestamp;
}
+diff --git a/chromium/ui/events/ozone/evdev/event_converter_evdev.h b/chromium/ui/events/ozone/evdev/event_converter_evdev.h
+index a91807b60e8..74d46cb8608 100644
+--- a/chromium/ui/events/ozone/evdev/event_converter_evdev.h
++++ b/chromium/ui/events/ozone/evdev/event_converter_evdev.h
+@@ -20,6 +20,11 @@
+ #include "ui/events/ozone/evdev/events_ozone_evdev_export.h"
+ #include "ui/gfx/geometry/size.h"
+
++#ifndef input_event_sec
++#define input_event_sec time.tv_sec
++#define input_event_usec time.tv_usec
++#endif
++
+ struct input_event;
+
+ namespace ui {
diff --git a/chromium/ui/events/ozone/evdev/touch_evdev_debug_buffer.cc b/chromium/ui/events/ozone/evdev/touch_evdev_debug_buffer.cc
index 363c3183e05..4fccfd62f84 100644
--- a/chromium/ui/events/ozone/evdev/touch_evdev_debug_buffer.cc
diff --git a/recipes-qt/qt5/qtwebengine_git.bb b/recipes-qt/qt5/qtwebengine_git.bb
index 3b8bd469..9dad8adc 100644
--- a/recipes-qt/qt5/qtwebengine_git.bb
+++ b/recipes-qt/qt5/qtwebengine_git.bb
@@ -189,7 +189,7 @@ SRC_URI_append_libc-musl = "\
file://chromium/0025-chromium-musl-pread-pwrite.patch;patchdir=src/3rdparty \
"
-SRCREV_qtwebengine = "6b62dfe7242ce0d3067aa98620664a4dc7a656d8"
+SRCREV_qtwebengine = "3394cde4e89463ba49af379b89863c7731c4b4ac"
SRCREV_chromium = "9424dc7ceeccf6e6d5edc7757edb39a7ae4983ab"
SRCREV = "${SRCREV_qtwebengine}"
diff --git a/recipes-qt/qt5/qtwebkit/0002-Do-not-skip-build-for-cross-compile.patch b/recipes-qt/qt5/qtwebkit/0001-Do-not-skip-build-for-cross-compile.patch
index a237d03d..a237d03d 100644
--- a/recipes-qt/qt5/qtwebkit/0002-Do-not-skip-build-for-cross-compile.patch
+++ b/recipes-qt/qt5/qtwebkit/0001-Do-not-skip-build-for-cross-compile.patch
diff --git a/recipes-qt/qt5/qtwebkit/0001-Port-build-to-python3.patch b/recipes-qt/qt5/qtwebkit/0001-Port-build-to-python3.patch
deleted file mode 100644
index 5c925cd5..00000000
--- a/recipes-qt/qt5/qtwebkit/0001-Port-build-to-python3.patch
+++ /dev/null
@@ -1,3845 +0,0 @@
-From a8bbd89d7a1d3e8ca381c025bc8dd1275c59356a Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
-Date: Tue, 4 Feb 2020 22:41:00 +0100
-Subject: [PATCH] Port build to python3
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Procdure:
-
-* send all py-files through 2to3
-* find inspiration at / steel from (jsmin.py) webkitgtk
-* manual fixes e.g rename builtins to mybuiltins - 'import builtins' does
- not load what's defined here
-
-Upstream-Status: Pending
-
-Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
----
- Source/JavaScriptCore/CMakeLists.txt | 18 +--
- Source/JavaScriptCore/DerivedSources.make | 18 +--
- .../JavaScriptCore/KeywordLookupGenerator.py | 28 ++--
- .../Scripts/builtins/builtins.py | 11 --
- .../generate-combined-inspector-json.py | 4 +-
- .../Scripts/generate-js-builtins.py | 12 +-
- ...line-and-minify-stylesheets-and-scripts.py | 2 +-
- Source/JavaScriptCore/Scripts/jsmin.py | 23 +--
- .../Scripts/make-js-file-arrays.py | 59 +++++---
- .../{builtins => mybuiltins}/__init__.py | 2 +-
- .../Scripts/mybuiltins/mybuiltins.py | 11 ++
- .../mybuiltins_generate_combined_header.py} | 4 +-
- ...ltins_generate_combined_implementation.py} | 6 +-
- .../mybuiltins_generate_separate_header.py} | 6 +-
- ...ltins_generate_separate_implementation.py} | 6 +-
- .../mybuiltins_generator.py} | 4 +-
- .../mybuiltins_model.py} | 7 +-
- .../mybuiltins_templates.py} | 0
- .../disassembler/udis86/ud_itab.py | 10 +-
- .../disassembler/udis86/ud_opcode.py | 12 +-
- Source/JavaScriptCore/generate-bytecode-files | 16 +--
- .../inspector/scripts/codegen/__init__.py | 42 +++---
- .../scripts/codegen/cpp_generator.py | 20 +--
- ...cpp_alternate_backend_dispatcher_header.py | 8 +-
- .../generate_cpp_backend_dispatcher_header.py | 16 +--
- ...e_cpp_backend_dispatcher_implementation.py | 12 +-
- ...generate_cpp_frontend_dispatcher_header.py | 12 +-
- ..._cpp_frontend_dispatcher_implementation.py | 12 +-
- .../generate_cpp_protocol_types_header.py | 38 ++---
- ...erate_cpp_protocol_types_implementation.py | 20 +--
- .../codegen/generate_js_backend_commands.py | 14 +-
- ...generate_objc_backend_dispatcher_header.py | 14 +-
- ..._objc_backend_dispatcher_implementation.py | 18 +--
- .../generate_objc_configuration_header.py | 6 +-
- ...erate_objc_configuration_implementation.py | 6 +-
- .../generate_objc_conversion_helpers.py | 12 +-
- ...objc_frontend_dispatcher_implementation.py | 16 +--
- .../scripts/codegen/generate_objc_header.py | 28 ++--
- .../codegen/generate_objc_internal_header.py | 10 +-
- ...rate_objc_protocol_types_implementation.py | 16 +--
- .../inspector/scripts/codegen/generator.py | 12 +-
- .../inspector/scripts/codegen/models.py | 2 +-
- .../scripts/codegen/objc_generator.py | 74 +++++-----
- .../generate-inspector-protocol-bindings.py | 2 +-
- .../scripts/CodeGeneratorReplayInputs.py | 26 ++--
- .../ANGLE/generate_winrt_projects.py | 4 +-
- .../ANGLE/src/libANGLE/Float16ToFloat32.py | 26 ++--
- .../renderer/generate_new_renderer.py | 2 +-
- .../gtest/scripts/fuse_gtest_files.py | 12 +-
- .../gtest/scripts/gen_gtest_pred_impl.py | 12 +-
- Source/ThirdParty/gtest/scripts/pump.py | 30 ++--
- Source/ThirdParty/gtest/scripts/upload.py | 134 +++++++++---------
- .../test/gtest_break_on_failure_unittest.py | 2 +-
- .../ThirdParty/gtest/test/gtest_color_test.py | 66 ++++-----
- .../gtest/test/gtest_env_var_test.py | 4 +-
- .../gtest/test/gtest_filter_unittest.py | 14 +-
- .../ThirdParty/gtest/test/gtest_help_test.py | 16 +--
- .../gtest/test/gtest_list_tests_unittest.py | 4 +-
- .../gtest/test/gtest_shuffle_test.py | 40 +++---
- .../ThirdParty/gtest/test/gtest_test_utils.py | 2 +-
- .../gtest/test/gtest_throw_on_failure_test.py | 4 +-
- .../gtest/test/gtest_uninitialized_test.py | 4 +-
- .../gtest/test/gtest_xml_outfiles_test.py | 6 +-
- .../gtest/test/gtest_xml_output_unittest.py | 22 +--
- .../gtest/test/gtest_xml_test_utils.py | 26 ++--
- .../ThirdParty/gtest/test/run_tests_util.py | 26 ++--
- .../gtest/test/run_tests_util_test.py | 16 +--
- .../gtest/xcode/Scripts/versiongenerate.py | 2 +-
- Source/WebCore/AVFoundationSupport.py | 14 +-
- Source/WebCore/CMakeLists.txt | 16 +--
- Source/WebCore/DerivedSources.make | 16 +--
- .../network/create-http-header-name-table | 2 +-
- Source/WebInspectorUI/Scripts/jsmin.py | 23 +--
- .../Scripts/generate-message-receiver.py | 2 +-
- .../Scripts/generate-messages-header.py | 2 +-
- .../Scripts/webkit/messages_unittest.py | 46 +++---
- Source/cmake/WebKitCommon.cmake | 3 -
- Tools/jhbuild/jhbuildutils.py | 10 +-
- 78 files changed, 665 insertions(+), 638 deletions(-)
- delete mode 100644 Source/JavaScriptCore/Scripts/builtins/builtins.py
- rename Source/JavaScriptCore/Scripts/{builtins => mybuiltins}/__init__.py (72%)
- create mode 100644 Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins.py
- rename Source/JavaScriptCore/Scripts/{builtins/builtins_generate_combined_header.py => mybuiltins/mybuiltins_generate_combined_header.py} (98%)
- rename Source/JavaScriptCore/Scripts/{builtins/builtins_generate_combined_implementation.py => mybuiltins/mybuiltins_generate_combined_implementation.py} (95%)
- rename Source/JavaScriptCore/Scripts/{builtins/builtins_generate_separate_header.py => mybuiltins/mybuiltins_generate_separate_header.py} (97%)
- rename Source/JavaScriptCore/Scripts/{builtins/builtins_generate_separate_implementation.py => mybuiltins/mybuiltins_generate_separate_implementation.py} (95%)
- rename Source/JavaScriptCore/Scripts/{builtins/builtins_generator.py => mybuiltins/mybuiltins_generator.py} (97%)
- rename Source/JavaScriptCore/Scripts/{builtins/builtins_model.py => mybuiltins/mybuiltins_model.py} (97%)
- rename Source/JavaScriptCore/Scripts/{builtins/builtins_templates.py => mybuiltins/mybuiltins_templates.py} (100%)
-
-diff --git a/Source/JavaScriptCore/CMakeLists.txt b/Source/JavaScriptCore/CMakeLists.txt
-index 937b3ed00..a4b5fd432 100644
---- a/Source/JavaScriptCore/CMakeLists.txt
-+++ b/Source/JavaScriptCore/CMakeLists.txt
-@@ -883,7 +883,7 @@ set(JavaScriptCore_SCRIPTS_SOURCES_DIR "${JAVASCRIPTCORE_DIR}/Scripts")
- set(JavaScriptCore_SCRIPTS_SOURCES_PATHS
- ${JavaScriptCore_SCRIPTS_SOURCES_DIR}/*.pl
- ${JavaScriptCore_SCRIPTS_SOURCES_DIR}/*.py
-- ${JavaScriptCore_SCRIPTS_SOURCES_DIR}/builtins/builtins*.py
-+ ${JavaScriptCore_SCRIPTS_SOURCES_DIR}/mybuiltins/mybuiltins*.py
- )
-
- # Force JavaScriptCore to run scripts from the same staging path as WebCore.
-@@ -1174,14 +1174,14 @@ add_custom_command(
- # JSCBuiltins
-
- set(BUILTINS_GENERATOR_SCRIPTS
-- ${JavaScriptCore_SCRIPTS_DIR}/builtins.py
-- ${JavaScriptCore_SCRIPTS_DIR}/builtins_generator.py
-- ${JavaScriptCore_SCRIPTS_DIR}/builtins_model.py
-- ${JavaScriptCore_SCRIPTS_DIR}/builtins_templates.py
-- ${JavaScriptCore_SCRIPTS_DIR}/builtins_generate_combined_header.py
-- ${JavaScriptCore_SCRIPTS_DIR}/builtins_generate_combined_implementation.py
-- ${JavaScriptCore_SCRIPTS_DIR}/builtins_generate_separate_header.py
-- ${JavaScriptCore_SCRIPTS_DIR}/builtins_generate_separate_implementation.py
-+ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins.py
-+ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_generator.py
-+ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_model.py
-+ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_templates.py
-+ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_generate_combined_header.py
-+ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_generate_combined_implementation.py
-+ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_generate_separate_header.py
-+ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_generate_separate_implementation.py
- ${JavaScriptCore_SCRIPTS_DIR}/generate-js-builtins.py
- ${JavaScriptCore_SCRIPTS_DIR}/lazywriter.py
- )
-diff --git a/Source/JavaScriptCore/DerivedSources.make b/Source/JavaScriptCore/DerivedSources.make
-index d5a3fc159..7ef28eff3 100644
---- a/Source/JavaScriptCore/DerivedSources.make
-+++ b/Source/JavaScriptCore/DerivedSources.make
-@@ -66,15 +66,15 @@ all : \
- # JavaScript builtins.
-
- BUILTINS_GENERATOR_SCRIPTS = \
-- $(JavaScriptCore_SCRIPTS_DIR)/builtins/__init__.py \
-- $(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins.py \
-- $(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_generator.py \
-- $(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_model.py \
-- $(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_templates.py \
-- $(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_generate_combined_header.py \
-- $(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_generate_combined_implementation.py \
-- $(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_generate_separate_header.py \
-- $(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_generate_separate_implementation.py \
-+ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins/__init__.py \
-+ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins/mybuiltins.py \
-+ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins/mybuiltins_generator.py \
-+ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins/mybuiltins_model.py \
-+ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins/mybuiltins_templates.py \
-+ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins/mybuiltins_generate_combined_header.py \
-+ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins/mybuiltins_generate_combined_implementation.py \
-+ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins/mybuiltins_generate_separate_header.py \
-+ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins/mybuiltins_generate_separate_implementation.py \
- $(JavaScriptCore_SCRIPTS_DIR)/generate-js-builtins.py \
- $(JavaScriptCore_SCRIPTS_DIR)/lazywriter.py \
- #
-diff --git a/Source/JavaScriptCore/KeywordLookupGenerator.py b/Source/JavaScriptCore/KeywordLookupGenerator.py
-index d13daba61..938d5d6e7 100644
---- a/Source/JavaScriptCore/KeywordLookupGenerator.py
-+++ b/Source/JavaScriptCore/KeywordLookupGenerator.py
-@@ -110,7 +110,7 @@ class Trie:
-
- def coalesce(self):
- keys = {}
-- for k, v in self.keys.items():
-+ for k, v in list(self.keys.items()):
- t = v.coalesce()
- keys[t.prefix] = t
- self.keys = keys
-@@ -119,7 +119,7 @@ class Trie:
- if len(self.keys) != 1:
- return self
- # Python 3: for() loop for compatibility. Use next() when Python 2.6 is the baseline.
-- for (prefix, suffix) in self.keys.items():
-+ for (prefix, suffix) in list(self.keys.items()):
- res = Trie(self.prefix + prefix)
- res.value = suffix.value
- res.keys = suffix.keys
-@@ -131,22 +131,22 @@ class Trie:
- if self.fullPrefix in keyWordWeights:
- weight = weight + keyWordWeights[self.fullPrefix]
- self.selfWeight = weight
-- for trie in self.keys.values():
-+ for trie in list(self.keys.values()):
- trie.fillOut(self.fullPrefix)
- weight = weight + trie.weight
-- self.keys = [(trie.prefix, trie) for trie in sorted(self.keys.values(), key=operator.attrgetter('weight'), reverse=True)]
-+ self.keys = [(trie.prefix, trie) for trie in sorted(list(self.keys.values()), key=operator.attrgetter('weight'), reverse=True)]
- self.weight = weight
-
- def printSubTreeAsC(self, typeName, indent):
- str = makePadding(indent)
-
- if self.value != None:
-- print(str + "if (!isIdentPartIncludingEscape(code+%d, m_codeEnd)) {" % (len(self.fullPrefix)))
-- print(str + " internalShift<%d>();" % len(self.fullPrefix))
-- print(str + " if (shouldCreateIdentifier)")
-- print(str + (" data->ident = &m_vm->propertyNames->%sKeyword;" % self.fullPrefix))
-- print(str + " return " + self.value + ";")
-- print(str + "}")
-+ print((str + "if (!isIdentPartIncludingEscape(code+%d, m_codeEnd)) {" % (len(self.fullPrefix))))
-+ print((str + " internalShift<%d>();" % len(self.fullPrefix)))
-+ print((str + " if (shouldCreateIdentifier)"))
-+ print((str + (" data->ident = &m_vm->propertyNames->%sKeyword;" % self.fullPrefix)))
-+ print((str + " return " + self.value + ";"))
-+ print((str + "}"))
- rootIndex = len(self.fullPrefix)
- itemCount = 0
- for k, trie in self.keys:
-@@ -163,15 +163,15 @@ class Trie:
- base = "code + %d" % baseIndex
- comparison = ("COMPARE_%d%sS(%s, " % (len(test), typeName, base)) + ", ".join(test) + ")"
- if itemCount == 0:
-- print(str + "if (" + comparison + ") {")
-+ print((str + "if (" + comparison + ") {"))
- else:
-- print(str + "} else if (" + comparison + ") {")
-+ print((str + "} else if (" + comparison + ") {"))
-
- trie.printSubTreeAsC(typeName, indent + 4)
- itemCount = itemCount + 1
-
- if itemCount == len(self.keys):
-- print(str + "}")
-+ print((str + "}"))
-
- def maxLength(self):
- max = len(self.fullPrefix)
-@@ -187,7 +187,7 @@ class Trie:
- print("static ALWAYS_INLINE bool isIdentPartIncludingEscape(const LChar* code, const LChar* codeEnd);")
- print("static ALWAYS_INLINE bool isIdentPartIncludingEscape(const UChar* code, const UChar* codeEnd);")
- # max length + 1 so we don't need to do any bounds checking at all
-- print("static const int maxTokenLength = %d;" % (self.maxLength() + 1))
-+ print(("static const int maxTokenLength = %d;" % (self.maxLength() + 1)))
- print("")
- print("template <>")
- print("template <bool shouldCreateIdentifier> ALWAYS_INLINE JSTokenType Lexer<UChar>::parseKeyword(JSTokenData* data)")
-diff --git a/Source/JavaScriptCore/Scripts/builtins/builtins.py b/Source/JavaScriptCore/Scripts/builtins/builtins.py
-deleted file mode 100644
-index 9349eeef6..000000000
---- a/Source/JavaScriptCore/Scripts/builtins/builtins.py
-+++ /dev/null
-@@ -1,11 +0,0 @@
--# This file is used to simulate the builtins/ directory when generate-js-builtins.py
--# is run from JavaScriptCore framework's private headers directory, which is flattened.
--
--from builtins_model import *
--from builtins_templates import *
--
--from builtins_generator import *
--from builtins_generate_combined_header import *
--from builtins_generate_combined_implementation import *
--from builtins_generate_separate_header import *
--from builtins_generate_separate_implementation import *
-diff --git a/Source/JavaScriptCore/Scripts/generate-combined-inspector-json.py b/Source/JavaScriptCore/Scripts/generate-combined-inspector-json.py
-index 53660318d..6b0e95dc9 100755
---- a/Source/JavaScriptCore/Scripts/generate-combined-inspector-json.py
-+++ b/Source/JavaScriptCore/Scripts/generate-combined-inspector-json.py
-@@ -29,7 +29,7 @@ import os
- import sys
-
- if len(sys.argv) < 2:
-- print("usage: %s [json files or directory of json files ...]" % os.path.basename(sys.argv[0]))
-+ print(("usage: %s [json files or directory of json files ...]" % os.path.basename(sys.argv[0])))
- sys.exit(1)
-
- files = []
-@@ -64,6 +64,6 @@ for file in files:
- sys.stderr.write("File \"%s\" does not contain valid JSON:\n" % file)
- raise
-
-- print(string.rstrip())
-+ print((string.rstrip()))
- print("]}")
-
-diff --git a/Source/JavaScriptCore/Scripts/generate-js-builtins.py b/Source/JavaScriptCore/Scripts/generate-js-builtins.py
-index 554a72ccc..3dce94c5c 100644
---- a/Source/JavaScriptCore/Scripts/generate-js-builtins.py
-+++ b/Source/JavaScriptCore/Scripts/generate-js-builtins.py
-@@ -25,7 +25,7 @@
- # THE POSSIBILITY OF SUCH DAMAGE.
-
- # This script generates C++ bindings for JavaScript builtins.
--# Generators for individual files are located in the builtins/ directory.
-+# Generators for individual files are located in the mybuiltins/ directory.
-
- import fnmatch
- import logging
-@@ -37,8 +37,8 @@ log = logging.getLogger('global')
-
- from lazywriter import LazyFileWriter
-
--import builtins
--from builtins import *
-+#import mybuiltins
-+from mybuiltins import *
-
-
- def generate_bindings_for_builtins_files(builtins_files=[],
-@@ -118,7 +118,7 @@ if __name__ == '__main__':
- cli_parser.add_option("-t", "--test", action="store_true", help="Enable test mode.")
-
- arg_options, arg_values = cli_parser.parse_args()
-- if len(arg_values) is 0 and not arg_options.input_directory:
-+ if len(arg_values) == 0 and not arg_options.input_directory:
- raise ParseException("At least one input file or directory expected.")
-
- if not arg_options.output_directory:
-@@ -132,7 +132,7 @@ if __name__ == '__main__':
- for filepath in os.listdir(arg_options.input_directory):
- input_filepaths.append(os.path.join(arg_options.input_directory, filepath))
-
-- input_filepaths = filter(lambda name: fnmatch.fnmatch(name, '*.js'), input_filepaths)
-+ input_filepaths = [name for name in input_filepaths if fnmatch.fnmatch(name, '*.js')]
-
- options = {
- 'output_path': arg_options.output_directory,
-@@ -144,7 +144,7 @@ if __name__ == '__main__':
-
- log.debug("Generating code for builtins.")
- log.debug("Parsed options:")
-- for option, value in options.items():
-+ for option, value in list(options.items()):
- log.debug(" %s: %s" % (option, value))
- log.debug("")
- log.debug("Input files:")
-diff --git a/Source/JavaScriptCore/Scripts/inline-and-minify-stylesheets-and-scripts.py b/Source/JavaScriptCore/Scripts/inline-and-minify-stylesheets-and-scripts.py
-index 89200c84e..a4a26c2b4 100755
---- a/Source/JavaScriptCore/Scripts/inline-and-minify-stylesheets-and-scripts.py
-+++ b/Source/JavaScriptCore/Scripts/inline-and-minify-stylesheets-and-scripts.py
-@@ -37,7 +37,7 @@ import sys
- def main(argv):
-
- if len(argv) < 2:
-- print('usage: %s inputFile outputFile' % argv[0])
-+ print(('usage: %s inputFile outputFile' % argv[0]))
- return 1
-
- inputFileName = argv[1]
-diff --git a/Source/JavaScriptCore/Scripts/jsmin.py b/Source/JavaScriptCore/Scripts/jsmin.py
-index 372418b4d..2f9fddfce 100644
---- a/Source/JavaScriptCore/Scripts/jsmin.py
-+++ b/Source/JavaScriptCore/Scripts/jsmin.py
-@@ -23,17 +23,20 @@
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- # THE SOFTWARE.
-
-+# stolen from webkitgtk 2.26.2
-
- import sys
- is_3 = sys.version_info >= (3, 0)
- if is_3:
- import io
-+ python_text_type = str
- else:
- import StringIO
- try:
- import cStringIO
- except ImportError:
- cStringIO = None
-+ python_text_type = basestring
-
-
- __all__ = ['jsmin', 'JavascriptMinify']
-@@ -79,14 +82,18 @@ class JavascriptMinify(object):
- def write(char):
- # all of this is to support literal regular expressions.
- # sigh
-- if char in 'return':
-+ if str(char) in 'return':
- self.return_buf += char
- self.is_return = self.return_buf == 'return'
- self.outs.write(char)
- if self.is_return:
- self.return_buf = ''
-
-- read = self.ins.read
-+ def read(n):
-+ char = self.ins.read(n)
-+ if not isinstance(char, python_text_type):
-+ raise ValueError("ERROR: The script jsmin.py can only handle text input, but it received input of type %s" % type(char))
-+ return char
-
- space_strings = "abcdefghijklmnopqrstuvwxyz"\
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$\\"
-@@ -118,8 +125,8 @@ class JavascriptMinify(object):
- write(previous)
- elif not previous:
- return
-- elif previous >= '!':
-- if previous in "'\"":
-+ elif str(previous) >= "!":
-+ if str(previous) in "'\"":
- in_quote = previous
- write(previous)
- previous_non_space = previous
-@@ -166,7 +173,7 @@ class JavascriptMinify(object):
- if numslashes % 2 == 0:
- in_quote = ''
- write(''.join(quote_buf))
-- elif next1 in '\r\n':
-+ elif str(next1) in '\r\n':
- if previous_non_space in newlineend_strings \
- or previous_non_space > '~':
- while 1:
-@@ -179,7 +186,7 @@ class JavascriptMinify(object):
- or next2 > '~' or next2 == '/':
- do_newline = True
- break
-- elif next1 < '!' and not in_re:
-+ elif str(next1) < '!' and not in_re:
- if (previous_non_space in space_strings \
- or previous_non_space > '~') \
- and (next2 in space_strings or next2 > '~'):
-@@ -217,14 +224,14 @@ class JavascriptMinify(object):
- do_newline = False
-
- write(next1)
-- if not in_re and next1 in "'\"`":
-+ if not in_re and str(next1) in "'\"`":
- in_quote = next1
- quote_buf = []
-
- previous = next1
- next1 = next2
-
-- if previous >= '!':
-+ if str(previous) >= '!':
- previous_non_space = previous
-
- if previous == '\\':
-diff --git a/Source/JavaScriptCore/Scripts/make-js-file-arrays.py b/Source/JavaScriptCore/Scripts/make-js-file-arrays.py
-index 65056646a..4bb2bfe66 100755
---- a/Source/JavaScriptCore/Scripts/make-js-file-arrays.py
-+++ b/Source/JavaScriptCore/Scripts/make-js-file-arrays.py
-@@ -21,11 +21,15 @@
- # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-+# stolen from webkitgtk 2.26.2
-+
-+from __future__ import print_function
- import io
- import os
- from optparse import OptionParser
--from StringIO import StringIO
--from jsmin import JavascriptMinify
-+import sys
-+from jsmin import jsmin
-+is_3 = sys.version_info >= (3, 0)
-
-
- def stringifyCodepoint(code):
-@@ -36,7 +40,7 @@ def stringifyCodepoint(code):
-
-
- def chunk(list, chunkSize):
-- for i in xrange(0, len(list), chunkSize):
-+ for i in range(0, len(list), chunkSize):
- yield list[i:i + chunkSize]
-
-
-@@ -46,11 +50,11 @@ def main():
- parser.add_option('-n', '--namespace', help='Namespace to use')
- (options, arguments) = parser.parse_args()
- if not options.namespace:
-- print 'Error: must provide a namespace'
-+ print('Error: must provide a namespace')
- parser.print_usage()
- exit(-1)
- if len(arguments) < 3:
-- print 'Error: must provide at least 3 arguments'
-+ print('Error: must provide at least 3 arguments')
- parser.print_usage()
- exit(-1)
-
-@@ -60,38 +64,47 @@ def main():
- inputPaths = arguments[2:]
-
- headerFile = open(headerPath, 'w')
-- print >> headerFile, 'namespace {0:s} {{'.format(namespace)
-+ print('namespace {0:s} {{'.format(namespace), file=headerFile)
-
- sourceFile = open(sourcePath, 'w')
-- print >> sourceFile, '#include "{0:s}"'.format(os.path.basename(headerPath))
-- print >> sourceFile, 'namespace {0:s} {{'.format(namespace)
--
-- jsm = JavascriptMinify()
-+ print('#include "{0:s}"'.format(os.path.basename(headerPath)), file=sourceFile)
-+ print('namespace {0:s} {{'.format(namespace), file=sourceFile)
-
- for inputFileName in inputPaths:
-- inputStream = io.FileIO(inputFileName)
-- outputStream = StringIO()
-+
-+ if is_3:
-+ inputStream = io.open(inputFileName, encoding='utf-8')
-+ else:
-+ inputStream = io.FileIO(inputFileName)
-+
-+ data = inputStream.read()
-
- if not options.no_minify:
-- jsm.minify(inputStream, outputStream)
-- characters = outputStream.getvalue()
-+ characters = jsmin(data)
-+ else:
-+ characters = data
-+
-+ if is_3:
-+ codepoints = bytearray(characters, encoding='utf-8')
- else:
-- characters = inputStream.read()
-+ codepoints = list(map(ord, characters))
-+
-+ # Use the size of codepoints instead of the characters
-+ # because UTF-8 characters may need more than one byte.
-+ size = len(codepoints)
-
-- size = len(characters)
- variableName = os.path.splitext(os.path.basename(inputFileName))[0]
-
-- print >> headerFile, 'extern const char {0:s}JavaScript[{1:d}];'.format(variableName, size)
-- print >> sourceFile, 'const char {0:s}JavaScript[{1:d}] = {{'.format(variableName, size)
-+ print('extern const char {0:s}JavaScript[{1:d}];'.format(variableName, size), file=headerFile)
-+ print('const char {0:s}JavaScript[{1:d}] = {{'.format(variableName, size), file=sourceFile)
-
-- codepoints = map(ord, characters)
- for codepointChunk in chunk(codepoints, 16):
-- print >> sourceFile, ' {0:s},'.format(','.join(map(stringifyCodepoint, codepointChunk)))
-+ print(' {0:s},'.format(','.join(map(stringifyCodepoint, codepointChunk))), file=sourceFile)
-
-- print >> sourceFile, '};'
-+ print('};', file=sourceFile)
-
-- print >> headerFile, '}} // namespace {0:s}'.format(namespace)
-- print >> sourceFile, '}} // namespace {0:s}'.format(namespace)
-+ print('}} // namespace {0:s}'.format(namespace), file=headerFile)
-+ print('}} // namespace {0:s}'.format(namespace), file=sourceFile)
-
- if __name__ == '__main__':
- main()
-diff --git a/Source/JavaScriptCore/Scripts/builtins/__init__.py b/Source/JavaScriptCore/Scripts/mybuiltins/__init__.py
-similarity index 72%
-rename from Source/JavaScriptCore/Scripts/builtins/__init__.py
-rename to Source/JavaScriptCore/Scripts/mybuiltins/__init__.py
-index fdfcba981..1b9668023 100644
---- a/Source/JavaScriptCore/Scripts/builtins/__init__.py
-+++ b/Source/JavaScriptCore/Scripts/mybuiltins/__init__.py
-@@ -1,3 +1,3 @@
- # Required for Python to search this directory for module files
-
--from builtins import *
-+from mybuiltins import *
-diff --git a/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins.py b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins.py
-new file mode 100644
-index 000000000..1bea3da5c
---- /dev/null
-+++ b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins.py
-@@ -0,0 +1,11 @@
-+# This file is used to simulate the builtins/ directory when generate-js-builtins.py
-+# is run from JavaScriptCore framework's private headers directory, which is flattened.
-+
-+from mybuiltins_model import *
-+from mybuiltins_templates import *
-+
-+from mybuiltins_generator import *
-+from mybuiltins_generate_combined_header import *
-+from mybuiltins_generate_combined_implementation import *
-+from mybuiltins_generate_separate_header import *
-+from mybuiltins_generate_separate_implementation import *
-diff --git a/Source/JavaScriptCore/Scripts/builtins/builtins_generate_combined_header.py b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_combined_header.py
-similarity index 98%
-rename from Source/JavaScriptCore/Scripts/builtins/builtins_generate_combined_header.py
-rename to Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_combined_header.py
-index 891bd3cb4..6520a5f16 100644
---- a/Source/JavaScriptCore/Scripts/builtins/builtins_generate_combined_header.py
-+++ b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_combined_header.py
-@@ -30,8 +30,8 @@ import re
- import string
- from string import Template
-
--from builtins_generator import BuiltinsGenerator
--from builtins_templates import BuiltinsGeneratorTemplates as Templates
-+from mybuiltins_generator import BuiltinsGenerator
-+from mybuiltins_templates import BuiltinsGeneratorTemplates as Templates
-
- log = logging.getLogger('global')
-
-diff --git a/Source/JavaScriptCore/Scripts/builtins/builtins_generate_combined_implementation.py b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_combined_implementation.py
-similarity index 95%
-rename from Source/JavaScriptCore/Scripts/builtins/builtins_generate_combined_implementation.py
-rename to Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_combined_implementation.py
-index 094434b64..76eed7665 100644
---- a/Source/JavaScriptCore/Scripts/builtins/builtins_generate_combined_implementation.py
-+++ b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_combined_implementation.py
-@@ -30,9 +30,9 @@ import re
- import string
- from string import Template
-
--from builtins_generator import BuiltinsGenerator
--from builtins_model import Framework, Frameworks
--from builtins_templates import BuiltinsGeneratorTemplates as Templates
-+from mybuiltins_generator import BuiltinsGenerator
-+from mybuiltins_model import Framework, Frameworks
-+from mybuiltins_templates import BuiltinsGeneratorTemplates as Templates
-
- log = logging.getLogger('global')
-
-diff --git a/Source/JavaScriptCore/Scripts/builtins/builtins_generate_separate_header.py b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_separate_header.py
-similarity index 97%
-rename from Source/JavaScriptCore/Scripts/builtins/builtins_generate_separate_header.py
-rename to Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_separate_header.py
-index b72a94bfe..6cbfbdca1 100644
---- a/Source/JavaScriptCore/Scripts/builtins/builtins_generate_separate_header.py
-+++ b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_separate_header.py
-@@ -30,9 +30,9 @@ import re
- import string
- from string import Template
-
--from builtins_generator import BuiltinsGenerator
--from builtins_model import Frameworks
--from builtins_templates import BuiltinsGeneratorTemplates as Templates
-+from mybuiltins_generator import BuiltinsGenerator
-+from mybuiltins_model import Frameworks
-+from mybuiltins_templates import BuiltinsGeneratorTemplates as Templates
-
- log = logging.getLogger('global')
-
-diff --git a/Source/JavaScriptCore/Scripts/builtins/builtins_generate_separate_implementation.py b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_separate_implementation.py
-similarity index 95%
-rename from Source/JavaScriptCore/Scripts/builtins/builtins_generate_separate_implementation.py
-rename to Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_separate_implementation.py
-index 0443975da..9f811df6a 100644
---- a/Source/JavaScriptCore/Scripts/builtins/builtins_generate_separate_implementation.py
-+++ b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_separate_implementation.py
-@@ -30,9 +30,9 @@ import re
- import string
- from string import Template
-
--from builtins_generator import BuiltinsGenerator, WK_lcfirst
--from builtins_model import Framework, Frameworks
--from builtins_templates import BuiltinsGeneratorTemplates as Templates
-+from mybuiltins_generator import BuiltinsGenerator, WK_lcfirst
-+from mybuiltins_model import Framework, Frameworks
-+from mybuiltins_templates import BuiltinsGeneratorTemplates as Templates
-
- log = logging.getLogger('global')
-
-diff --git a/Source/JavaScriptCore/Scripts/builtins/builtins_generator.py b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generator.py
-similarity index 97%
-rename from Source/JavaScriptCore/Scripts/builtins/builtins_generator.py
-rename to Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generator.py
-index 21ac4c1d9..546eb2e07 100644
---- a/Source/JavaScriptCore/Scripts/builtins/builtins_generator.py
-+++ b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generator.py
-@@ -30,8 +30,8 @@ import re
- from string import Template
- import json
-
--from builtins_model import BuiltinFunction, BuiltinObject
--from builtins_templates import BuiltinsGeneratorTemplates as Templates
-+from mybuiltins_model import BuiltinFunction, BuiltinObject
-+from mybuiltins_templates import BuiltinsGeneratorTemplates as Templates
-
- log = logging.getLogger('global')
-
-diff --git a/Source/JavaScriptCore/Scripts/builtins/builtins_model.py b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_model.py
-similarity index 97%
-rename from Source/JavaScriptCore/Scripts/builtins/builtins_model.py
-rename to Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_model.py
-index cdd5f9003..68d7aed06 100755
---- a/Source/JavaScriptCore/Scripts/builtins/builtins_model.py
-+++ b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_model.py
-@@ -122,7 +122,8 @@ class BuiltinFunction:
- interface = interface + " [Constructor]"
-
- return interface
--
-+ def __lt__(self, other):
-+ return self.function_name < other.function_name
-
- class BuiltinsCollection:
- def __init__(self, framework_name):
-@@ -178,7 +179,7 @@ class BuiltinsCollection:
-
- result = []
-
-- for owner, years in owner_to_years.items():
-+ for owner, years in list(owner_to_years.items()):
- sorted_years = list(years)
- sorted_years.sort()
- result.append("%s %s" % (', '.join(sorted_years), owner))
-@@ -271,4 +272,4 @@ class BuiltinsCollection:
- functionBounds.append((start, end))
-
- functionStrings = [text[start:end].strip() for (start, end) in functionBounds]
-- return map(BuiltinFunction.fromString, functionStrings)
-+ return list(map(BuiltinFunction.fromString, functionStrings))
-diff --git a/Source/JavaScriptCore/Scripts/builtins/builtins_templates.py b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_templates.py
-similarity index 100%
-rename from Source/JavaScriptCore/Scripts/builtins/builtins_templates.py
-rename to Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_templates.py
-diff --git a/Source/JavaScriptCore/disassembler/udis86/ud_itab.py b/Source/JavaScriptCore/disassembler/udis86/ud_itab.py
-index ef011d2ec..205dcb1ae 100644
---- a/Source/JavaScriptCore/disassembler/udis86/ud_itab.py
-+++ b/Source/JavaScriptCore/disassembler/udis86/ud_itab.py
-@@ -266,15 +266,15 @@ class UdItabGenerator:
- pfx_c = []
- opr = insn.operands
- for i in range(len(opr)):
-- if not (opr[i] in self.OperandDict.keys()):
-- print("error: invalid operand declaration: %s\n" % opr[i])
-+ if not (opr[i] in list(self.OperandDict.keys())):
-+ print(("error: invalid operand declaration: %s\n" % opr[i]))
- opr_c[i] = "O_" + opr[i]
- opr = "%s %s %s %s" % (opr_c[0] + ",", opr_c[1] + ",",
- opr_c[2] + ",", opr_c[3])
-
- for p in insn.prefixes:
-- if not ( p in self.PrefixDict.keys() ):
-- print("error: invalid prefix specification: %s \n" % pfx)
-+ if not ( p in list(self.PrefixDict.keys()) ):
-+ print(("error: invalid prefix specification: %s \n" % pfx))
- pfx_c.append( self.PrefixDict[p] )
- if len(insn.prefixes) == 0:
- pfx_c.append( "P_none" )
-@@ -346,7 +346,7 @@ class UdItabGenerator:
- # Macros defining short-names for operands
- #
- self.ItabC.write("\n\n/* itab entry operand definitions (for readability) */\n");
-- operands = self.OperandDict.keys()
-+ operands = list(self.OperandDict.keys())
- operands = sorted(operands)
- for o in operands:
- self.ItabC.write("#define O_%-7s { %-12s %-8s }\n" %
-diff --git a/Source/JavaScriptCore/disassembler/udis86/ud_opcode.py b/Source/JavaScriptCore/disassembler/udis86/ud_opcode.py
-index fe1833dc7..00961071c 100644
---- a/Source/JavaScriptCore/disassembler/udis86/ud_opcode.py
-+++ b/Source/JavaScriptCore/disassembler/udis86/ud_opcode.py
-@@ -28,7 +28,7 @@ import os
- # Some compatibility stuff for supporting python 2.x as well as python 3.x
- def itemslist(dict):
- try:
-- return dict.iteritems() # python 2.x
-+ return iter(dict.items()) # python 2.x
- except AttributeError:
- return list(dict.items()) # python 3.x
-
-@@ -180,7 +180,7 @@ class UdOpcodeTable:
- return itemslist(self._entries)
-
- def numEntries(self):
-- return len(self._entries.keys())
-+ return len(list(self._entries.keys()))
-
- def label(self):
- return self._TableInfo[self._typ]['label']
-@@ -248,7 +248,7 @@ class UdOpcodeTable:
- @classmethod
- def getLabels(cls):
- """Returns a list of all labels"""
-- return [cls._TableInfo[k]['label'] for k in cls._TableInfo.keys()]
-+ return [cls._TableInfo[k]['label'] for k in list(cls._TableInfo.keys())]
-
-
- class UdOpcodeTables(object):
-@@ -401,7 +401,7 @@ class UdOpcodeTables(object):
- self.map(self.root, opcodes, insn)
- except self.CollisionError as e:
- self.pprint()
-- print(opcodes, insn, str(e.obj1), str(e.obj2))
-+ print((opcodes, insn, str(e.obj1), str(e.obj2)))
- raise
- except Exception as e:
- self.pprint()
-@@ -550,10 +550,10 @@ class UdOpcodeTables(object):
- entries = tbl.entries()
- for k, e in entries:
- if isinstance(e, UdOpcodeTable):
-- self.log("%s |-<%02x> %s" % (indent, k, e))
-+ self.log("%s |-<%02x> %s" % (indent, int(k), e))
- printWalk(e, indent + " |")
- elif isinstance(e, UdInsnDef):
-- self.log("%s |-<%02x> %s" % (indent, k, e))
-+ self.log("%s |-<%02x> %s" % (indent, int(k), e))
- printWalk(self.root)
-
-
-diff --git a/Source/JavaScriptCore/generate-bytecode-files b/Source/JavaScriptCore/generate-bytecode-files
-index 5666a3f92..371ac5e4e 100644
---- a/Source/JavaScriptCore/generate-bytecode-files
-+++ b/Source/JavaScriptCore/generate-bytecode-files
-@@ -91,14 +91,14 @@ def openOrExit(path, mode):
- try:
- return open(path, mode)
- except IOError as e:
-- print "I/O error opening {0}, ({1}): {2}".format(path, e.errno, e.strerror)
-+ print("I/O error opening {0}, ({1}): {2}".format(path, e.errno, e.strerror))
- exit(1)
-
- def hashFile(file):
- sha1 = hashlib.sha1()
- file.seek(0)
- for line in file:
-- sha1.update(line)
-+ sha1.update(line.encode('utf-8'))
-
- file.seek(0)
-
-@@ -114,7 +114,7 @@ if __name__ == "__main__":
- parser.error("missing <bytecode-json-file>")
-
- bytecodeJSONFile = args[0]
-- bytecodeFile = openOrExit(bytecodeJSONFile, "rb")
-+ bytecodeFile = openOrExit(bytecodeJSONFile, "r")
- sha1Hash = hashFile(bytecodeFile)
-
- hFileHashString = "// SHA1Hash: {0}\n".format(sha1Hash)
-@@ -131,7 +131,7 @@ if __name__ == "__main__":
-
- if bytecodeHFilename:
- try:
-- bytecodeHReadFile = open(bytecodeHFilename, "rb")
-+ bytecodeHReadFile = open(bytecodeHFilename, "r")
-
- hashLine = bytecodeHReadFile.readline()
- if hashLine != hFileHashString:
-@@ -143,7 +143,7 @@ if __name__ == "__main__":
-
- if initASMFileName:
- try:
-- initBytecodesReadFile = open(initASMFileName, "rb")
-+ initBytecodesReadFile = open(initASMFileName, "r")
-
- hashLine = initBytecodesReadFile.readline()
- if hashLine != asmFileHashString:
-@@ -157,15 +157,15 @@ if __name__ == "__main__":
- exit(0)
-
- if bytecodeHFilename:
-- bytecodeHFile = openOrExit(bytecodeHFilename, "wb")
-+ bytecodeHFile = openOrExit(bytecodeHFilename, "w")
-
- if initASMFileName:
-- initBytecodesFile = openOrExit(initASMFileName, "wb")
-+ initBytecodesFile = openOrExit(initASMFileName, "w")
-
- try:
- bytecodeSections = json.load(bytecodeFile, encoding = "utf-8")
- except:
-- print "Unexpected error parsing {0}: {1}".format(bytecodeJSONFile, sys.exc_info())
-+ print("Unexpected error parsing {0}: {1}".format(bytecodeJSONFile, sys.exc_info()))
-
- if bytecodeHFilename:
- bytecodeHFile.write(hFileHashString)
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/__init__.py b/Source/JavaScriptCore/inspector/scripts/codegen/__init__.py
-index 6077fa97a..bd30c817c 100644
---- a/Source/JavaScriptCore/inspector/scripts/codegen/__init__.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/__init__.py
-@@ -1,24 +1,24 @@
- # Required for Python to search this directory for module files
-
--from models import *
--from generator import *
--from cpp_generator import *
--from objc_generator import *
-+from .models import *
-+from .generator import *
-+from .cpp_generator import *
-+from .objc_generator import *
-
--from generate_cpp_alternate_backend_dispatcher_header import *
--from generate_cpp_backend_dispatcher_header import *
--from generate_cpp_backend_dispatcher_implementation import *
--from generate_cpp_frontend_dispatcher_header import *
--from generate_cpp_frontend_dispatcher_implementation import *
--from generate_cpp_protocol_types_header import *
--from generate_cpp_protocol_types_implementation import *
--from generate_js_backend_commands import *
--from generate_objc_backend_dispatcher_header import *
--from generate_objc_backend_dispatcher_implementation import *
--from generate_objc_configuration_header import *
--from generate_objc_configuration_implementation import *
--from generate_objc_conversion_helpers import *
--from generate_objc_frontend_dispatcher_implementation import *
--from generate_objc_header import *
--from generate_objc_internal_header import *
--from generate_objc_protocol_types_implementation import *
-+from .generate_cpp_alternate_backend_dispatcher_header import *
-+from .generate_cpp_backend_dispatcher_header import *
-+from .generate_cpp_backend_dispatcher_implementation import *
-+from .generate_cpp_frontend_dispatcher_header import *
-+from .generate_cpp_frontend_dispatcher_implementation import *
-+from .generate_cpp_protocol_types_header import *
-+from .generate_cpp_protocol_types_implementation import *
-+from .generate_js_backend_commands import *
-+from .generate_objc_backend_dispatcher_header import *
-+from .generate_objc_backend_dispatcher_implementation import *
-+from .generate_objc_configuration_header import *
-+from .generate_objc_configuration_implementation import *
-+from .generate_objc_conversion_helpers import *
-+from .generate_objc_frontend_dispatcher_implementation import *
-+from .generate_objc_header import *
-+from .generate_objc_internal_header import *
-+from .generate_objc_protocol_types_implementation import *
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py b/Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py
-index edd330da4..43c655b05 100644
---- a/Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py
-@@ -28,8 +28,8 @@ import logging
- import os.path
- import re
-
--from generator import ucfirst
--from models import PrimitiveType, ObjectType, ArrayType, EnumType, AliasedType, Frameworks
-+from .generator import ucfirst
-+from .models import PrimitiveType, ObjectType, ArrayType, EnumType, AliasedType, Frameworks
-
- log = logging.getLogger('global')
-
-@@ -56,11 +56,11 @@ class CppGenerator:
- if isinstance(_type, ArrayType):
- return 'getArray'
- if isinstance(_type, PrimitiveType):
-- if _type.raw_name() is 'integer':
-+ if _type.raw_name() == 'integer':
- return 'getInteger'
-- elif _type.raw_name() is 'number':
-+ elif _type.raw_name() == 'number':
- return 'getDouble'
-- elif _type.raw_name() is 'any':
-+ elif _type.raw_name() == 'any':
- return 'getValue'
- else:
- return 'get' + ucfirst(_type.raw_name())
-@@ -76,11 +76,11 @@ class CppGenerator:
- if isinstance(_type, ArrayType):
- return 'setArray'
- if isinstance(_type, PrimitiveType):
-- if _type.raw_name() is 'integer':
-+ if _type.raw_name() == 'integer':
- return 'setInteger'
-- elif _type.raw_name() is 'number':
-+ elif _type.raw_name() == 'number':
- return 'setDouble'
-- elif _type.raw_name() is 'any':
-+ elif _type.raw_name() == 'any':
- return 'setValue'
- else:
- return 'set' + ucfirst(_type.raw_name())
-@@ -95,7 +95,7 @@ class CppGenerator:
- if isinstance(_type, ObjectType) and len(_type.members) == 0:
- return 'Inspector::InspectorObject'
- if isinstance(_type, ArrayType):
-- if _type.raw_name() is None: # Otherwise, fall through and use typedef'd name.
-+ if _type.raw_name() == None: # Otherwise, fall through and use typedef'd name.
- return 'Inspector::Protocol::Array<%s>' % CppGenerator.cpp_protocol_type_for_type(_type.element_type)
- if isinstance(_type, (ObjectType, AliasedType, EnumType, ArrayType)):
- return 'Inspector::Protocol::%s::%s' % (_type.type_domain().domain_name, _type.raw_name())
-@@ -119,7 +119,7 @@ class CppGenerator:
- _type = _type.primitive_type # Fall through to primitive.
-
- # This handles the 'any' type and objects with defined properties.
-- if isinstance(_type, ObjectType) or _type.qualified_name() is 'object':
-+ if isinstance(_type, ObjectType) or _type.qualified_name() == 'object':
- cpp_name = 'Inspector::InspectorObject'
- if parameter.is_optional:
- return 'const %s*' % cpp_name
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py
-index 375ce05ca..916277d31 100755
---- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py
-@@ -30,9 +30,9 @@ import string
- import re
- from string import Template
-
--from cpp_generator import CppGenerator
--from cpp_generator_templates import CppGeneratorTemplates as CppTemplates
--from generator import Generator
-+from .cpp_generator import CppGenerator
-+from .cpp_generator_templates import CppGeneratorTemplates as CppTemplates
-+from .generator import Generator
-
- log = logging.getLogger('global')
-
-@@ -60,7 +60,7 @@ class CppAlternateBackendDispatcherHeaderGenerator(Generator):
- sections = []
- sections.append(self.generate_license())
- sections.append(Template(CppTemplates.AlternateDispatchersHeaderPrelude).substitute(None, **header_args))
-- sections.append('\n'.join(filter(None, map(self._generate_handler_declarations_for_domain, domains))))
-+ sections.append('\n'.join([_f for _f in map(self._generate_handler_declarations_for_domain, domains) if _f]))
- sections.append(Template(CppTemplates.AlternateDispatchersHeaderPostlude).substitute(None, **header_args))
- return '\n\n'.join(sections)
-
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py
-index 2e5ff7a6a..25bec9a22 100755
---- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py
-@@ -30,10 +30,10 @@ import re
- import string
- from string import Template
-
--from cpp_generator import CppGenerator
--from cpp_generator_templates import CppGeneratorTemplates as CppTemplates
--from generator import Generator, ucfirst
--from models import EnumType
-+from .cpp_generator import CppGenerator
-+from .cpp_generator_templates import CppGeneratorTemplates as CppTemplates
-+from .generator import Generator, ucfirst
-+from .models import EnumType
-
- log = logging.getLogger('global')
-
-@@ -46,7 +46,7 @@ class CppBackendDispatcherHeaderGenerator(Generator):
- return "InspectorBackendDispatchers.h"
-
- def domains_to_generate(self):
-- return filter(lambda domain: len(domain.commands) > 0, Generator.domains_to_generate(self))
-+ return [domain for domain in Generator.domains_to_generate(self) if len(domain.commands) > 0]
-
- def generate_output(self):
- headers = [
-@@ -68,8 +68,8 @@ class CppBackendDispatcherHeaderGenerator(Generator):
- sections.append(self.generate_license())
- sections.append(Template(CppTemplates.HeaderPrelude).substitute(None, **header_args))
- sections.append(self._generate_alternate_handler_forward_declarations_for_domains(domains))
-- sections.extend(map(self._generate_handler_declarations_for_domain, domains))
-- sections.extend(map(self._generate_dispatcher_declarations_for_domain, domains))
-+ sections.extend(list(map(self._generate_handler_declarations_for_domain, domains)))
-+ sections.extend(list(map(self._generate_dispatcher_declarations_for_domain, domains)))
- sections.append(Template(CppTemplates.HeaderPostlude).substitute(None, **header_args))
- return "\n\n".join(sections)
-
-@@ -194,7 +194,7 @@ class CppBackendDispatcherHeaderGenerator(Generator):
- declarations = []
- if len(domain.commands) > 0:
- declarations.append('private:')
-- declarations.extend(map(self._generate_dispatcher_declaration_for_command, domain.commands))
-+ declarations.extend(list(map(self._generate_dispatcher_declaration_for_command, domain.commands)))
-
- handler_args = {
- 'classAndExportMacro': " ".join(classComponents),
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py
-index 8f3df80ee..0c9b30e47 100755
---- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py
-@@ -29,10 +29,10 @@ import logging
- import string
- from string import Template
-
--from cpp_generator import CppGenerator
--from cpp_generator_templates import CppGeneratorTemplates as CppTemplates
--from generator import Generator, ucfirst
--from models import ObjectType, ArrayType
-+from .cpp_generator import CppGenerator
-+from .cpp_generator_templates import CppGeneratorTemplates as CppTemplates
-+from .generator import Generator, ucfirst
-+from .models import ObjectType, ArrayType
-
- log = logging.getLogger('global')
-
-@@ -45,7 +45,7 @@ class CppBackendDispatcherImplementationGenerator(Generator):
- return "InspectorBackendDispatchers.cpp"
-
- def domains_to_generate(self):
-- return filter(lambda domain: len(domain.commands) > 0, Generator.domains_to_generate(self))
-+ return [domain for domain in Generator.domains_to_generate(self) if len(domain.commands) > 0]
-
- def generate_output(self):
- secondary_headers = [
-@@ -69,7 +69,7 @@ class CppBackendDispatcherImplementationGenerator(Generator):
- sections.append(self.generate_license())
- sections.append(Template(CppTemplates.ImplementationPrelude).substitute(None, **header_args))
- sections.append("\n".join(map(self._generate_handler_class_destructor_for_domain, self.domains_to_generate())))
-- sections.extend(map(self._generate_dispatcher_implementations_for_domain, self.domains_to_generate()))
-+ sections.extend(list(map(self._generate_dispatcher_implementations_for_domain, self.domains_to_generate())))
- sections.append(Template(CppTemplates.ImplementationPostlude).substitute(None, **header_args))
- return "\n\n".join(sections)
-
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py
-index 58a3cb925..40905d676 100755
---- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py
-@@ -30,10 +30,10 @@ import re
- import string
- from string import Template
-
--from cpp_generator import CppGenerator
--from cpp_generator_templates import CppGeneratorTemplates as CppTemplates
--from generator import Generator, ucfirst
--from models import EnumType
-+from .cpp_generator import CppGenerator
-+from .cpp_generator_templates import CppGeneratorTemplates as CppTemplates
-+from .generator import Generator, ucfirst
-+from .models import EnumType
-
- log = logging.getLogger('global')
-
-@@ -46,7 +46,7 @@ class CppFrontendDispatcherHeaderGenerator(Generator):
- return "InspectorFrontendDispatchers.h"
-
- def domains_to_generate(self):
-- return filter(lambda domain: len(domain.events) > 0, Generator.domains_to_generate(self))
-+ return [domain for domain in Generator.domains_to_generate(self) if len(domain.events) > 0]
-
- def generate_output(self):
- headers = [
-@@ -63,7 +63,7 @@ class CppFrontendDispatcherHeaderGenerator(Generator):
- sections = []
- sections.append(self.generate_license())
- sections.append(Template(CppTemplates.HeaderPrelude).substitute(None, **header_args))
-- sections.extend(map(self._generate_dispatcher_declarations_for_domain, self.domains_to_generate()))
-+ sections.extend(list(map(self._generate_dispatcher_declarations_for_domain, self.domains_to_generate())))
- sections.append(Template(CppTemplates.HeaderPostlude).substitute(None, **header_args))
- return "\n\n".join(sections)
-
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py
-index ea46aaf26..132b1c67c 100755
---- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py
-@@ -29,10 +29,10 @@ import logging
- import string
- from string import Template
-
--from cpp_generator import CppGenerator
--from cpp_generator_templates import CppGeneratorTemplates as CppTemplates
--from generator import Generator, ucfirst
--from models import ObjectType, ArrayType
-+from .cpp_generator import CppGenerator
-+from .cpp_generator_templates import CppGeneratorTemplates as CppTemplates
-+from .generator import Generator, ucfirst
-+from .models import ObjectType, ArrayType
-
- log = logging.getLogger('global')
-
-@@ -45,7 +45,7 @@ class CppFrontendDispatcherImplementationGenerator(Generator):
- return "InspectorFrontendDispatchers.cpp"
-
- def domains_to_generate(self):
-- return filter(lambda domain: len(domain.events) > 0, Generator.domains_to_generate(self))
-+ return [domain for domain in Generator.domains_to_generate(self) if len(domain.events) > 0]
-
- def generate_output(self):
- secondary_headers = [
-@@ -61,7 +61,7 @@ class CppFrontendDispatcherImplementationGenerator(Generator):
- sections = []
- sections.append(self.generate_license())
- sections.append(Template(CppTemplates.ImplementationPrelude).substitute(None, **header_args))
-- sections.extend(map(self._generate_dispatcher_implementations_for_domain, self.domains_to_generate()))
-+ sections.extend(list(map(self._generate_dispatcher_implementations_for_domain, self.domains_to_generate())))
- sections.append(Template(CppTemplates.ImplementationPostlude).substitute(None, **header_args))
- return "\n\n".join(sections)
-
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py
-index 6753e2dcf..7bd4375df 100755
---- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py
-@@ -30,10 +30,10 @@ import re
- import string
- from string import Template
-
--from cpp_generator import CppGenerator
--from cpp_generator_templates import CppGeneratorTemplates as CppTemplates
--from generator import Generator, ucfirst
--from models import EnumType, ObjectType, PrimitiveType, AliasedType, ArrayType, Frameworks
-+from .cpp_generator import CppGenerator
-+from .cpp_generator_templates import CppGeneratorTemplates as CppTemplates
-+from .generator import Generator, ucfirst
-+from .models import EnumType, ObjectType, PrimitiveType, AliasedType, ArrayType, Frameworks
-
- log = logging.getLogger('global')
-
-@@ -80,8 +80,8 @@ class CppProtocolTypesHeaderGenerator(Generator):
- ' return getEnumConstantValue(static_cast<int>(enumValue));',
- '}']))
-
-- builder_sections = map(self._generate_builders_for_domain, domains)
-- sections.extend(filter(lambda section: len(section) > 0, builder_sections))
-+ builder_sections = list(map(self._generate_builders_for_domain, domains))
-+ sections.extend([section for section in builder_sections if len(section) > 0])
- sections.append(self._generate_forward_declarations_for_binding_traits())
- sections.append('} // namespace Protocol')
- sections.append(Template(CppTemplates.HeaderPostlude).substitute(None, **header_args))
-@@ -96,8 +96,8 @@ class CppProtocolTypesHeaderGenerator(Generator):
-
- for domain in domains:
- declaration_types = [decl.type for decl in domain.type_declarations]
-- object_types = filter(lambda _type: isinstance(_type, ObjectType), declaration_types)
-- enum_types = filter(lambda _type: isinstance(_type, EnumType), declaration_types)
-+ object_types = [_type for _type in declaration_types if isinstance(_type, ObjectType)]
-+ enum_types = [_type for _type in declaration_types if isinstance(_type, EnumType)]
- if len(object_types) + len(enum_types) == 0:
- continue
-
-@@ -122,8 +122,8 @@ class CppProtocolTypesHeaderGenerator(Generator):
- """ % '\n\n'.join(sections)
-
- def _generate_typedefs(self, domains):
-- sections = map(self._generate_typedefs_for_domain, domains)
-- sections = filter(lambda text: len(text) > 0, sections)
-+ sections = list(map(self._generate_typedefs_for_domain, domains))
-+ sections = [text for text in sections if len(text) > 0]
-
- if len(sections) == 0:
- return ''
-@@ -133,8 +133,8 @@ class CppProtocolTypesHeaderGenerator(Generator):
- // End of typedefs.""" % '\n\n'.join(sections)
-
- def _generate_typedefs_for_domain(self, domain):
-- primitive_declarations = filter(lambda decl: isinstance(decl.type, AliasedType), domain.type_declarations)
-- array_declarations = filter(lambda decl: isinstance(decl.type, ArrayType), domain.type_declarations)
-+ primitive_declarations = [decl for decl in domain.type_declarations if isinstance(decl.type, AliasedType)]
-+ array_declarations = [decl for decl in domain.type_declarations if isinstance(decl.type, ArrayType)]
- if len(primitive_declarations) == 0 and len(array_declarations) == 0:
- return ''
-
-@@ -170,7 +170,7 @@ class CppProtocolTypesHeaderGenerator(Generator):
- elif isinstance(type_declaration.type, ObjectType):
- sections.append(self._generate_class_for_object_declaration(type_declaration, domain))
-
-- sections = filter(lambda section: len(section) > 0, sections)
-+ sections = [section for section in sections if len(section) > 0]
- if len(sections) == 0:
- return ''
-
-@@ -184,9 +184,9 @@ class CppProtocolTypesHeaderGenerator(Generator):
- if len(type_declaration.type_members) == 0:
- return ''
-
-- enum_members = filter(lambda member: isinstance(member.type, EnumType) and member.type.is_anonymous, type_declaration.type_members)
-- required_members = filter(lambda member: not member.is_optional, type_declaration.type_members)
-- optional_members = filter(lambda member: member.is_optional, type_declaration.type_members)
-+ enum_members = [member for member in type_declaration.type_members if isinstance(member.type, EnumType) and member.type.is_anonymous]
-+ required_members = [member for member in type_declaration.type_members if not member.is_optional]
-+ optional_members = [member for member in type_declaration.type_members if member.is_optional]
- object_name = type_declaration.type_name
-
- lines = []
-@@ -244,7 +244,7 @@ class CppProtocolTypesHeaderGenerator(Generator):
- else:
- return ' ' + line
-
-- indented_lines = map(apply_indentation, self._generate_struct_for_enum_type(enum_member.member_name, enum_member.type))
-+ indented_lines = list(map(apply_indentation, self._generate_struct_for_enum_type(enum_member.member_name, enum_member.type)))
- return '\n'.join(indented_lines)
-
- def _generate_struct_for_enum_type(self, enum_name, enum_type):
-@@ -258,7 +258,7 @@ class CppProtocolTypesHeaderGenerator(Generator):
-
- def _generate_builder_state_enum(self, type_declaration):
- lines = []
-- required_members = filter(lambda member: not member.is_optional, type_declaration.type_members)
-+ required_members = [member for member in type_declaration.type_members if not member.is_optional]
- enum_values = []
-
- lines.append(' enum {')
-@@ -323,7 +323,7 @@ class CppProtocolTypesHeaderGenerator(Generator):
- type_arguments = []
-
- for domain in self.domains_to_generate():
-- declarations_to_generate = filter(lambda decl: self.type_needs_shape_assertions(decl.type), domain.type_declarations)
-+ declarations_to_generate = [decl for decl in domain.type_declarations if self.type_needs_shape_assertions(decl.type)]
-
- for type_declaration in declarations_to_generate:
- for type_member in type_declaration.type_members:
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py
-index 2c263b504..903278bfb 100755
---- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py
-@@ -29,10 +29,10 @@ import logging
- import string
- from string import Template
-
--from cpp_generator import CppGenerator
--from cpp_generator_templates import CppGeneratorTemplates as CppTemplates
--from generator import Generator, ucfirst
--from models import AliasedType, ArrayType, EnumType, ObjectType
-+from .cpp_generator import CppGenerator
-+from .cpp_generator_templates import CppGeneratorTemplates as CppTemplates
-+from .generator import Generator, ucfirst
-+from .models import AliasedType, ArrayType, EnumType, ObjectType
-
- log = logging.getLogger('global')
-
-@@ -61,8 +61,8 @@ class CppProtocolTypesImplementationGenerator(Generator):
- sections.append('namespace Protocol {')
- sections.append(self._generate_enum_mapping())
- sections.append(self._generate_open_field_names())
-- builder_sections = map(self._generate_builders_for_domain, domains)
-- sections.extend(filter(lambda section: len(section) > 0, builder_sections))
-+ builder_sections = list(map(self._generate_builders_for_domain, domains))
-+ sections.extend([section for section in builder_sections if len(section) > 0])
- sections.append('} // namespace Protocol')
- sections.append(Template(CppTemplates.ImplementationPostlude).substitute(None, **header_args))
-
-@@ -84,7 +84,7 @@ class CppProtocolTypesImplementationGenerator(Generator):
- def _generate_open_field_names(self):
- lines = []
- for domain in self.domains_to_generate():
-- for type_declaration in filter(lambda decl: Generator.type_has_open_fields(decl.type), domain.type_declarations):
-+ for type_declaration in [decl for decl in domain.type_declarations if Generator.type_has_open_fields(decl.type)]:
- for type_member in sorted(type_declaration.type_members, key=lambda member: member.member_name):
- field_name = '::'.join(['Inspector', 'Protocol', domain.domain_name, ucfirst(type_declaration.type_name), ucfirst(type_member.member_name)])
- lines.append('const char* %s = "%s";' % (field_name, type_member.member_name))
-@@ -93,7 +93,7 @@ class CppProtocolTypesImplementationGenerator(Generator):
-
- def _generate_builders_for_domain(self, domain):
- sections = []
-- declarations_to_generate = filter(lambda decl: self.type_needs_shape_assertions(decl.type), domain.type_declarations)
-+ declarations_to_generate = [decl for decl in domain.type_declarations if self.type_needs_shape_assertions(decl.type)]
-
- for type_declaration in declarations_to_generate:
- for type_member in type_declaration.type_members:
-@@ -114,8 +114,8 @@ class CppProtocolTypesImplementationGenerator(Generator):
- return Template(CppTemplates.ProtocolObjectRuntimeCast).substitute(None, **args)
-
- def _generate_assertion_for_object_declaration(self, object_declaration):
-- required_members = filter(lambda member: not member.is_optional, object_declaration.type_members)
-- optional_members = filter(lambda member: member.is_optional, object_declaration.type_members)
-+ required_members = [member for member in object_declaration.type_members if not member.is_optional]
-+ optional_members = [member for member in object_declaration.type_members if member.is_optional]
- should_count_properties = not Generator.type_has_open_fields(object_declaration.type)
- lines = []
-
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py
-index 3392c7845..bd8f33164 100755
---- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py
-@@ -29,9 +29,9 @@ import logging
- import string
- from string import Template
-
--from generator import Generator, ucfirst
--from generator_templates import GeneratorTemplates as Templates
--from models import EnumType
-+from .generator import Generator, ucfirst
-+from .generator_templates import GeneratorTemplates as Templates
-+from .models import EnumType
-
- log = logging.getLogger('global')
-
-@@ -45,15 +45,15 @@ class JSBackendCommandsGenerator(Generator):
-
- def domains_to_generate(self):
- def should_generate_domain(domain):
-- domain_enum_types = filter(lambda declaration: isinstance(declaration.type, EnumType), domain.type_declarations)
-+ domain_enum_types = [declaration for declaration in domain.type_declarations if isinstance(declaration.type, EnumType)]
- return len(domain.commands) > 0 or len(domain.events) > 0 or len(domain_enum_types) > 0
-
-- return filter(should_generate_domain, Generator.domains_to_generate(self))
-+ return list(filter(should_generate_domain, Generator.domains_to_generate(self)))
-
- def generate_output(self):
- sections = []
- sections.append(self.generate_license())
-- sections.extend(map(self.generate_domain, self.domains_to_generate()))
-+ sections.extend(list(map(self.generate_domain, self.domains_to_generate())))
- return "\n\n".join(sections)
-
- def generate_domain(self, domain):
-@@ -64,7 +64,7 @@ class JSBackendCommandsGenerator(Generator):
-
- lines.append('// %(domain)s.' % args)
-
-- has_async_commands = any(map(lambda command: command.is_async, domain.commands))
-+ has_async_commands = any([command.is_async for command in domain.commands])
- if len(domain.events) > 0 or has_async_commands:
- lines.append('InspectorBackend.register%(domain)sDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "%(domain)s");' % args)
-
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py
-index d56a0b178..809641d38 100755
---- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py
-@@ -30,11 +30,11 @@ import string
- import re
- from string import Template
-
--from cpp_generator import CppGenerator
--from generator import Generator
--from models import Frameworks
--from objc_generator import ObjCGenerator
--from objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates
-+from .cpp_generator import CppGenerator
-+from .generator import Generator
-+from .models import Frameworks
-+from .objc_generator import ObjCGenerator
-+from .objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates
-
- log = logging.getLogger('global')
-
-@@ -47,7 +47,7 @@ class ObjCBackendDispatcherHeaderGenerator(Generator):
- return '%sBackendDispatchers.h' % ObjCGenerator.OBJC_PREFIX
-
- def domains_to_generate(self):
-- return filter(ObjCGenerator.should_generate_domain_command_handler_filter(self.model()), Generator.domains_to_generate(self))
-+ return list(filter(ObjCGenerator.should_generate_domain_command_handler_filter(self.model()), Generator.domains_to_generate(self)))
-
- def generate_output(self):
- headers = [
-@@ -65,7 +65,7 @@ class ObjCBackendDispatcherHeaderGenerator(Generator):
- sections = []
- sections.append(self.generate_license())
- sections.append(Template(ObjCTemplates.BackendDispatcherHeaderPrelude).substitute(None, **header_args))
-- sections.extend(map(self._generate_objc_handler_declarations_for_domain, domains))
-+ sections.extend(list(map(self._generate_objc_handler_declarations_for_domain, domains)))
- sections.append(Template(ObjCTemplates.BackendDispatcherHeaderPostlude).substitute(None, **header_args))
- return '\n\n'.join(sections)
-
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py
-index 42afd99cf..d35d3f14a 100755
---- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py
-@@ -30,11 +30,11 @@ import string
- import re
- from string import Template
-
--from cpp_generator import CppGenerator
--from generator import Generator
--from models import PrimitiveType, EnumType, AliasedType, Frameworks
--from objc_generator import ObjCTypeCategory, ObjCGenerator, join_type_and_name
--from objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates
-+from .cpp_generator import CppGenerator
-+from .generator import Generator
-+from .models import PrimitiveType, EnumType, AliasedType, Frameworks
-+from .objc_generator import ObjCTypeCategory, ObjCGenerator, join_type_and_name
-+from .objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates
-
- log = logging.getLogger('global')
-
-@@ -47,7 +47,7 @@ class ObjCConfigurationImplementationGenerator(Generator):
- return '%sBackendDispatchers.mm' % ObjCGenerator.OBJC_PREFIX
-
- def domains_to_generate(self):
-- return filter(ObjCGenerator.should_generate_domain_command_handler_filter(self.model()), Generator.domains_to_generate(self))
-+ return list(filter(ObjCGenerator.should_generate_domain_command_handler_filter(self.model()), Generator.domains_to_generate(self)))
-
- def generate_output(self):
- secondary_headers = [
-@@ -65,7 +65,7 @@ class ObjCConfigurationImplementationGenerator(Generator):
- sections = []
- sections.append(self.generate_license())
- sections.append(Template(ObjCTemplates.BackendDispatcherImplementationPrelude).substitute(None, **header_args))
-- sections.extend(map(self._generate_handler_implementation_for_domain, domains))
-+ sections.extend(list(map(self._generate_handler_implementation_for_domain, domains)))
- sections.append(Template(ObjCTemplates.BackendDispatcherImplementationPostlude).substitute(None, **header_args))
- return '\n\n'.join(sections)
-
-@@ -112,7 +112,7 @@ class ObjCConfigurationImplementationGenerator(Generator):
- if command.return_parameters:
- lines.append(' Ref<InspectorObject> resultObject = InspectorObject::create();')
-
-- required_pointer_parameters = filter(lambda parameter: not parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type), command.return_parameters)
-+ required_pointer_parameters = [parameter for parameter in command.return_parameters if not parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type)]
- for parameter in required_pointer_parameters:
- var_name = ObjCGenerator.identifier_to_objc_identifier(parameter.parameter_name)
- lines.append(' THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(%s, @"%s");' % (var_name, var_name))
-@@ -120,7 +120,7 @@ class ObjCConfigurationImplementationGenerator(Generator):
- if objc_array_class and objc_array_class.startswith(ObjCGenerator.OBJC_PREFIX):
- lines.append(' THROW_EXCEPTION_FOR_BAD_TYPE_IN_ARRAY(%s, [%s class]);' % (var_name, objc_array_class))
-
-- optional_pointer_parameters = filter(lambda parameter: parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type), command.return_parameters)
-+ optional_pointer_parameters = [parameter for parameter in command.return_parameters if parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type)]
- for parameter in optional_pointer_parameters:
- var_name = ObjCGenerator.identifier_to_objc_identifier(parameter.parameter_name)
- lines.append(' THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(%s, @"%s");' % (var_name, var_name))
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_header.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_header.py
-index 9b93f37f6..00f3860c7 100755
---- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_header.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_header.py
-@@ -29,9 +29,9 @@ import logging
- import string
- from string import Template
-
--from generator import Generator
--from objc_generator import ObjCGenerator
--from objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates
-+from .generator import Generator
-+from .objc_generator import ObjCGenerator
-+from .objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates
-
- log = logging.getLogger('global')
-
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_implementation.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_implementation.py
-index 735abbca3..2db503c0b 100755
---- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_implementation.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_implementation.py
-@@ -29,9 +29,9 @@ import logging
- import string
- from string import Template
-
--from generator import Generator
--from objc_generator import ObjCGenerator
--from objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates
-+from .generator import Generator
-+from .objc_generator import ObjCGenerator
-+from .objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates
-
- log = logging.getLogger('global')
-
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_conversion_helpers.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_conversion_helpers.py
-index c31e991e3..7a23251b1 100755
---- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_conversion_helpers.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_conversion_helpers.py
-@@ -29,10 +29,10 @@ import logging
- import string
- from string import Template
-
--from generator import Generator
--from models import EnumType
--from objc_generator import ObjCGenerator
--from objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates
-+from .generator import Generator
-+from .models import EnumType
-+from .objc_generator import ObjCGenerator
-+from .objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates
-
- log = logging.getLogger('global')
-
-@@ -51,7 +51,7 @@ class ObjCConversionHelpersGenerator(Generator):
- return '%sEnumConversionHelpers.h' % ObjCGenerator.OBJC_PREFIX
-
- def domains_to_generate(self):
-- return filter(ObjCGenerator.should_generate_domain_types_filter(self.model()), Generator.domains_to_generate(self))
-+ return list(filter(ObjCGenerator.should_generate_domain_types_filter(self.model()), Generator.domains_to_generate(self)))
-
- def generate_output(self):
- headers = [
-@@ -67,7 +67,7 @@ class ObjCConversionHelpersGenerator(Generator):
- sections.append(self.generate_license())
- sections.append(Template(ObjCTemplates.ConversionHelpersPrelude).substitute(None, **header_args))
- sections.append(Template(ObjCTemplates.ConversionHelpersStandard).substitute(None))
-- sections.extend(map(self._generate_enum_conversion_functions, domains))
-+ sections.extend(list(map(self._generate_enum_conversion_functions, domains)))
- sections.append(Template(ObjCTemplates.ConversionHelpersPostlude).substitute(None, **header_args))
- return '\n\n'.join(sections)
-
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py
-index 0030ed5ee..101c09e9f 100755
---- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py
-@@ -29,10 +29,10 @@ import logging
- import string
- from string import Template
-
--from cpp_generator import CppGenerator
--from generator import Generator, ucfirst
--from objc_generator import ObjCGenerator
--from objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates
-+from .cpp_generator import CppGenerator
-+from .generator import Generator, ucfirst
-+from .objc_generator import ObjCGenerator
-+from .objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates
-
- log = logging.getLogger('global')
-
-@@ -45,7 +45,7 @@ class ObjCFrontendDispatcherImplementationGenerator(Generator):
- return '%sEventDispatchers.mm' % ObjCGenerator.OBJC_PREFIX
-
- def domains_to_generate(self):
-- return filter(ObjCGenerator.should_generate_domain_event_dispatcher_filter(self.model()), Generator.domains_to_generate(self))
-+ return list(filter(ObjCGenerator.should_generate_domain_event_dispatcher_filter(self.model()), Generator.domains_to_generate(self)))
-
- def generate_output(self):
- secondary_headers = [
-@@ -62,7 +62,7 @@ class ObjCFrontendDispatcherImplementationGenerator(Generator):
- sections = []
- sections.append(self.generate_license())
- sections.append(Template(ObjCTemplates.ImplementationPrelude).substitute(None, **header_args))
-- sections.extend(map(self._generate_event_dispatcher_implementations, domains))
-+ sections.extend(list(map(self._generate_event_dispatcher_implementations, domains)))
- sections.append(Template(ObjCTemplates.ImplementationPostlude).substitute(None, **header_args))
- return '\n\n'.join(sections)
-
-@@ -100,7 +100,7 @@ class ObjCFrontendDispatcherImplementationGenerator(Generator):
- lines.append(' const FrontendRouter& router = _controller->frontendRouter();')
- lines.append('')
-
-- required_pointer_parameters = filter(lambda parameter: not parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type), event.event_parameters)
-+ required_pointer_parameters = [parameter for parameter in event.event_parameters if not parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type)]
- for parameter in required_pointer_parameters:
- var_name = ObjCGenerator.identifier_to_objc_identifier(parameter.parameter_name)
- lines.append(' THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(%s, @"%s");' % (var_name, var_name))
-@@ -108,7 +108,7 @@ class ObjCFrontendDispatcherImplementationGenerator(Generator):
- if objc_array_class and objc_array_class.startswith(ObjCGenerator.OBJC_PREFIX):
- lines.append(' THROW_EXCEPTION_FOR_BAD_TYPE_IN_ARRAY(%s, [%s class]);' % (var_name, objc_array_class))
-
-- optional_pointer_parameters = filter(lambda parameter: parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type), event.event_parameters)
-+ optional_pointer_parameters = [parameter for parameter in event.event_parameters if parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type)]
- for parameter in optional_pointer_parameters:
- var_name = ObjCGenerator.identifier_to_objc_identifier(parameter.parameter_name)
- lines.append(' THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(%s, @"%s");' % (var_name, var_name))
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_header.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_header.py
-index 7e8e61030..1b0059a7a 100755
---- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_header.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_header.py
-@@ -29,10 +29,10 @@ import logging
- import string
- from string import Template
-
--from generator import Generator, ucfirst
--from models import ObjectType, EnumType
--from objc_generator import ObjCGenerator, join_type_and_name
--from objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates
-+from .generator import Generator, ucfirst
-+from .models import ObjectType, EnumType
-+from .objc_generator import ObjCGenerator, join_type_and_name
-+from .objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates
-
- log = logging.getLogger('global')
-
-@@ -60,9 +60,9 @@ class ObjCHeaderGenerator(Generator):
- }
-
- domains = self.domains_to_generate()
-- type_domains = filter(ObjCGenerator.should_generate_domain_types_filter(self.model()), domains)
-- command_domains = filter(ObjCGenerator.should_generate_domain_command_handler_filter(self.model()), domains)
-- event_domains = filter(ObjCGenerator.should_generate_domain_event_dispatcher_filter(self.model()), domains)
-+ type_domains = list(filter(ObjCGenerator.should_generate_domain_types_filter(self.model()), domains))
-+ command_domains = list(filter(ObjCGenerator.should_generate_domain_command_handler_filter(self.model()), domains))
-+ event_domains = list(filter(ObjCGenerator.should_generate_domain_event_dispatcher_filter(self.model()), domains))
-
- # FIXME: <https://webkit.org/b/138222> Web Inspector: Reduce unnecessary enums/types generated in ObjC Protocol Interfaces
- # Currently we generate enums/types for all types in the type_domains. For the built-in
-@@ -72,11 +72,11 @@ class ObjCHeaderGenerator(Generator):
- sections = []
- sections.append(self.generate_license())
- sections.append(Template(ObjCTemplates.HeaderPrelude).substitute(None, **header_args))
-- sections.append('\n'.join(filter(None, map(self._generate_forward_declarations, type_domains))))
-- sections.append('\n'.join(filter(None, map(self._generate_enums, type_domains))))
-- sections.append('\n'.join(filter(None, map(self._generate_types, type_domains))))
-- sections.append('\n\n'.join(filter(None, map(self._generate_command_protocols, command_domains))))
-- sections.append('\n\n'.join(filter(None, map(self._generate_event_interfaces, event_domains))))
-+ sections.append('\n'.join([_f for _f in map(self._generate_forward_declarations, type_domains) if _f]))
-+ sections.append('\n'.join([_f for _f in map(self._generate_enums, type_domains) if _f]))
-+ sections.append('\n'.join([_f for _f in map(self._generate_types, type_domains) if _f]))
-+ sections.append('\n\n'.join([_f for _f in map(self._generate_command_protocols, command_domains) if _f]))
-+ sections.append('\n\n'.join([_f for _f in map(self._generate_event_interfaces, event_domains) if _f]))
- sections.append(Template(ObjCTemplates.HeaderPostlude).substitute(None))
- return '\n\n'.join(sections)
-
-@@ -156,8 +156,8 @@ class ObjCHeaderGenerator(Generator):
- objc_name = ObjCGenerator.objc_name_for_type(declaration.type)
- lines.append('__attribute__((visibility ("default")))')
- lines.append('@interface %s : %s' % (objc_name, ObjCGenerator.OBJC_JSON_OBJECT_BASE))
-- required_members = filter(lambda member: not member.is_optional, declaration.type_members)
-- optional_members = filter(lambda member: member.is_optional, declaration.type_members)
-+ required_members = [member for member in declaration.type_members if not member.is_optional]
-+ optional_members = [member for member in declaration.type_members if member.is_optional]
- if required_members:
- lines.append(self._generate_init_method_for_required_members(domain, declaration, required_members))
- for member in required_members:
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_internal_header.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_internal_header.py
-index 40802ff17..f21b16222 100755
---- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_internal_header.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_internal_header.py
-@@ -29,9 +29,9 @@ import logging
- import string
- from string import Template
-
--from generator import Generator, ucfirst
--from objc_generator import ObjCGenerator
--from objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates
-+from .generator import Generator, ucfirst
-+from .objc_generator import ObjCGenerator
-+from .objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates
-
- log = logging.getLogger('global')
-
-@@ -56,12 +56,12 @@ class ObjCInternalHeaderGenerator(Generator):
- }
-
- domains = self.domains_to_generate()
-- event_domains = filter(ObjCGenerator.should_generate_domain_event_dispatcher_filter(self.model()), domains)
-+ event_domains = list(filter(ObjCGenerator.should_generate_domain_event_dispatcher_filter(self.model()), domains))
-
- sections = []
- sections.append(self.generate_license())
- sections.append(Template(ObjCTemplates.GenericHeaderPrelude).substitute(None, **header_args))
-- sections.append('\n\n'.join(filter(None, map(self._generate_event_dispatcher_private_interfaces, event_domains))))
-+ sections.append('\n\n'.join([_f for _f in map(self._generate_event_dispatcher_private_interfaces, event_domains) if _f]))
- sections.append(Template(ObjCTemplates.GenericHeaderPostlude).substitute(None, **header_args))
- return '\n\n'.join(sections)
-
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_types_implementation.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_types_implementation.py
-index 95b57f671..8a6aac035 100755
---- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_types_implementation.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_types_implementation.py
-@@ -29,10 +29,10 @@ import logging
- import string
- from string import Template
-
--from generator import Generator, ucfirst
--from models import ObjectType
--from objc_generator import ObjCGenerator
--from objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates
-+from .generator import Generator, ucfirst
-+from .models import ObjectType
-+from .objc_generator import ObjCGenerator
-+from .objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates
-
- log = logging.getLogger('global')
-
-@@ -51,7 +51,7 @@ class ObjCProtocolTypesImplementationGenerator(Generator):
- return '%sTypes.mm' % ObjCGenerator.OBJC_PREFIX
-
- def domains_to_generate(self):
-- return filter(ObjCGenerator.should_generate_domain_types_filter(self.model()), Generator.domains_to_generate(self))
-+ return list(filter(ObjCGenerator.should_generate_domain_types_filter(self.model()), Generator.domains_to_generate(self)))
-
- def generate_output(self):
- secondary_headers = [
-@@ -69,7 +69,7 @@ class ObjCProtocolTypesImplementationGenerator(Generator):
- sections = []
- sections.append(self.generate_license())
- sections.append(Template(ObjCTemplates.ImplementationPrelude).substitute(None, **header_args))
-- sections.extend(map(self.generate_type_implementations, domains))
-+ sections.extend(list(map(self.generate_type_implementations, domains)))
- sections.append(Template(ObjCTemplates.ImplementationPostlude).substitute(None, **header_args))
- return '\n\n'.join(sections)
-
-@@ -84,7 +84,7 @@ class ObjCProtocolTypesImplementationGenerator(Generator):
- def generate_type_implementation(self, domain, declaration):
- lines = []
- lines.append('@implementation %s' % ObjCGenerator.objc_name_for_type(declaration.type))
-- required_members = filter(lambda member: not member.is_optional, declaration.type_members)
-+ required_members = [member for member in declaration.type_members if not member.is_optional]
- if required_members:
- lines.append('')
- lines.append(self._generate_init_method_for_required_members(domain, declaration, required_members))
-@@ -112,7 +112,7 @@ class ObjCProtocolTypesImplementationGenerator(Generator):
- lines.append(' return nil;')
- lines.append('')
-
-- required_pointer_members = filter(lambda member: ObjCGenerator.is_type_objc_pointer_type(member.type), required_members)
-+ required_pointer_members = [member for member in required_members if ObjCGenerator.is_type_objc_pointer_type(member.type)]
- if required_pointer_members:
- for member in required_pointer_members:
- var_name = ObjCGenerator.identifier_to_objc_identifier(member.member_name)
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generator.py b/Source/JavaScriptCore/inspector/scripts/codegen/generator.py
-index 4c8f1998e..0ed011136 100755
---- a/Source/JavaScriptCore/inspector/scripts/codegen/generator.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/generator.py
-@@ -29,8 +29,8 @@ import os.path
- import re
- from string import Template
-
--from generator_templates import GeneratorTemplates as Templates
--from models import PrimitiveType, ObjectType, ArrayType, EnumType, AliasedType, Frameworks
-+from .generator_templates import GeneratorTemplates as Templates
-+from .models import PrimitiveType, ObjectType, ArrayType, EnumType, AliasedType, Frameworks
-
- log = logging.getLogger('global')
-
-@@ -87,7 +87,7 @@ class Generator:
-
- # These methods are overridden by subclasses.
- def non_supplemental_domains(self):
-- return filter(lambda domain: not domain.is_supplemental, self.model().domains)
-+ return [domain for domain in self.model().domains if not domain.is_supplemental]
-
- def domains_to_generate(self):
- return self.non_supplemental_domains()
-@@ -129,7 +129,7 @@ class Generator:
- # set of types will not be automatically regenerated on subsequent calls to
- # Generator.types_needing_shape_assertions().
- def calculate_types_requiring_shape_assertions(self, domains):
-- domain_names = map(lambda domain: domain.domain_name, domains)
-+ domain_names = [domain.domain_name for domain in domains]
- log.debug("> Calculating types that need shape assertions (eligible domains: %s)" % ", ".join(domain_names))
-
- # Mutates the passed-in set; this simplifies checks to prevent infinite recursion.
-@@ -185,7 +185,7 @@ class Generator:
- for _type in all_types:
- if not isinstance(_type, EnumType):
- continue
-- map(self._assign_encoding_for_enum_value, _type.enum_values())
-+ list(map(self._assign_encoding_for_enum_value, _type.enum_values()))
-
- def _assign_encoding_for_enum_value(self, enum_value):
- if enum_value in self._enum_value_encodings:
-@@ -219,7 +219,7 @@ class Generator:
- return match.group(1).upper()
-
- # Split on hyphen, introduce camelcase, and force uppercasing of acronyms.
-- subwords = map(ucfirst, enum_value.split('-'))
-+ subwords = list(map(ucfirst, enum_value.split('-')))
- return re.sub(re.compile(regex, re.IGNORECASE), replaceCallback, "".join(subwords))
-
- @staticmethod
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/models.py b/Source/JavaScriptCore/inspector/scripts/codegen/models.py
-index ec16a1291..426ab4b2b 100755
---- a/Source/JavaScriptCore/inspector/scripts/codegen/models.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/models.py
-@@ -35,7 +35,7 @@ def ucfirst(str):
-
-
- def find_duplicates(l):
-- return [key for key, count in collections.Counter(l).items() if count > 1]
-+ return [key for key, count in list(collections.Counter(l).items()) if count > 1]
-
-
- _FRAMEWORK_CONFIG_MAP = {
-diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/objc_generator.py b/Source/JavaScriptCore/inspector/scripts/codegen/objc_generator.py
-index f6dd03cb5..00015dc2b 100755
---- a/Source/JavaScriptCore/inspector/scripts/codegen/objc_generator.py
-+++ b/Source/JavaScriptCore/inspector/scripts/codegen/objc_generator.py
-@@ -24,8 +24,8 @@
- # THE POSSIBILITY OF SUCH DAMAGE.
-
- import logging
--from generator import Generator, ucfirst
--from models import PrimitiveType, ObjectType, ArrayType, EnumType, AliasedType, Frameworks
-+from .generator import Generator, ucfirst
-+from .models import PrimitiveType, ObjectType, ArrayType, EnumType, AliasedType, Frameworks
-
- log = logging.getLogger('global')
-
-@@ -50,7 +50,7 @@ _OBJC_IDENTIFIER_RENAME_MAP = {
- 'id': 'identifier', # Page.Frame.id, Runtime.ExecutionContextDescription.id, Debugger.BreakpointAction.id
- }
-
--_OBJC_IDENTIFIER_REVERSE_RENAME_MAP = dict((v, k) for k, v in _OBJC_IDENTIFIER_RENAME_MAP.iteritems())
-+_OBJC_IDENTIFIER_REVERSE_RENAME_MAP = dict((v, k) for k, v in list(_OBJC_IDENTIFIER_RENAME_MAP.items()))
-
-
- class ObjCTypeCategory:
-@@ -62,11 +62,11 @@ class ObjCTypeCategory:
- @staticmethod
- def category_for_type(_type):
- if (isinstance(_type, PrimitiveType)):
-- if _type.raw_name() is 'string':
-+ if _type.raw_name() == 'string':
- return ObjCTypeCategory.String
- if _type.raw_name() in ['object', 'any']:
- return ObjCTypeCategory.Object
-- if _type.raw_name() is 'array':
-+ if _type.raw_name() == 'array':
- return ObjCTypeCategory.Array
- return ObjCTypeCategory.Simple
- if (isinstance(_type, ObjectType)):
-@@ -192,15 +192,15 @@ class ObjCGenerator:
-
- @staticmethod
- def objc_type_for_raw_name(raw_name):
-- if raw_name is 'string':
-+ if raw_name == 'string':
- return 'NSString *'
-- if raw_name is 'array':
-+ if raw_name == 'array':
- return 'NSArray *'
-- if raw_name is 'integer':
-+ if raw_name == 'integer':
- return 'int'
-- if raw_name is 'number':
-+ if raw_name == 'number':
- return 'double'
-- if raw_name is 'boolean':
-+ if raw_name == 'boolean':
- return 'BOOL'
- if raw_name in ['any', 'object']:
- return '%s *' % ObjCGenerator.OBJC_JSON_OBJECT_BASE
-@@ -208,9 +208,9 @@ class ObjCGenerator:
-
- @staticmethod
- def objc_class_for_raw_name(raw_name):
-- if raw_name is 'string':
-+ if raw_name == 'string':
- return 'NSString'
-- if raw_name is 'array':
-+ if raw_name == 'array':
- return 'NSArray'
- if raw_name in ['integer', 'number', 'boolean']:
- return 'NSNumber'
-@@ -222,13 +222,13 @@ class ObjCGenerator:
-
- @staticmethod
- def protocol_type_for_raw_name(raw_name):
-- if raw_name is 'string':
-+ if raw_name == 'string':
- return 'String'
-- if raw_name is 'integer':
-+ if raw_name == 'integer':
- return 'int'
-- if raw_name is 'number':
-+ if raw_name == 'number':
- return 'double'
-- if raw_name is 'boolean':
-+ if raw_name == 'boolean':
- return 'bool'
- if raw_name in ['any', 'object']:
- return 'InspectorObject'
-@@ -370,11 +370,11 @@ class ObjCGenerator:
- objc_class = ObjCGenerator.objc_class_for_type(var_type.element_type)
- if protocol_type == 'Inspector::Protocol::Array<String>':
- return 'inspectorStringArrayArray(%s)' % var_name
-- if protocol_type is 'String' and objc_class is 'NSString':
-+ if protocol_type == 'String' and objc_class == 'NSString':
- return 'inspectorStringArray(%s)' % var_name
-- if protocol_type is 'int' and objc_class is 'NSNumber':
-+ if protocol_type == 'int' and objc_class == 'NSNumber':
- return 'inspectorIntegerArray(%s)' % var_name
-- if protocol_type is 'double' and objc_class is 'NSNumber':
-+ if protocol_type == 'double' and objc_class == 'NSNumber':
- return 'inspectorDoubleArray(%s)' % var_name
- return 'inspectorObjectArray(%s)' % var_name
-
-@@ -404,9 +404,9 @@ class ObjCGenerator:
- return '[[[%s alloc] initWithInspectorObject:%s] autorelease]' % (objc_class, var_name)
- if category is ObjCTypeCategory.Array:
- objc_class = ObjCGenerator.objc_class_for_type(var_type.element_type)
-- if objc_class is 'NSString':
-+ if objc_class == 'NSString':
- return 'objcStringArray(%s)' % var_name
-- if objc_class is 'NSNumber': # FIXME: Integer or Double?
-+ if objc_class == 'NSNumber': # FIXME: Integer or Double?
- return 'objcIntegerArray(%s)' % var_name
- return 'objcArray<%s>(%s)' % (objc_class, var_name)
-
-@@ -425,11 +425,11 @@ class ObjCGenerator:
- return sub_expression
- if category is ObjCTypeCategory.Array:
- objc_class = ObjCGenerator.objc_class_for_type(member.type.element_type)
-- if objc_class is 'NSString':
-+ if objc_class == 'NSString':
- return 'inspectorStringArray(%s)' % sub_expression
-- if objc_class is 'NSNumber':
-+ if objc_class == 'NSNumber':
- protocol_type = ObjCGenerator.protocol_type_for_type(member.type.element_type)
-- if protocol_type is 'double':
-+ if protocol_type == 'double':
- return 'inspectorDoubleArray(%s)' % sub_expression
- return 'inspectorIntegerArray(%s)' % sub_expression
- return 'inspectorObjectArray(%s)' % sub_expression
-@@ -449,11 +449,11 @@ class ObjCGenerator:
- if category is ObjCTypeCategory.Array:
- protocol_type = ObjCGenerator.protocol_type_for_type(member.type.element_type)
- objc_class = ObjCGenerator.objc_class_for_type(member.type.element_type)
-- if objc_class is 'NSString':
-+ if objc_class == 'NSString':
- return 'objcStringArray(%s)' % sub_expression
-- if objc_class is 'NSNumber':
-+ if objc_class == 'NSNumber':
- protocol_type = ObjCGenerator.protocol_type_for_type(member.type.element_type)
-- if protocol_type is 'double':
-+ if protocol_type == 'double':
- return 'objcDoubleArray(%s)' % sub_expression
- return 'objcIntegerArray(%s)' % sub_expression
- return 'objcArray<%s>(%s)' % (objc_class, sub_expression)
-@@ -470,17 +470,17 @@ class ObjCGenerator:
- _type = _type.aliased_type
- if (isinstance(_type, PrimitiveType)):
- raw_name = _type.raw_name()
-- if raw_name is 'boolean':
-+ if raw_name == 'boolean':
- return 'setBool'
-- if raw_name is 'integer':
-+ if raw_name == 'integer':
- return 'setInteger'
-- if raw_name is 'number':
-+ if raw_name == 'number':
- return 'setDouble'
-- if raw_name is 'string':
-+ if raw_name == 'string':
- return 'setString'
- if raw_name in ['any', 'object']:
- return 'setObject'
-- if raw_name is 'array':
-+ if raw_name == 'array':
- return 'setInspectorArray'
- return None
- if (isinstance(_type, EnumType)):
-@@ -501,17 +501,17 @@ class ObjCGenerator:
- _type = _type.aliased_type
- if (isinstance(_type, PrimitiveType)):
- raw_name = _type.raw_name()
-- if raw_name is 'boolean':
-+ if raw_name == 'boolean':
- return 'boolForKey'
-- if raw_name is 'integer':
-+ if raw_name == 'integer':
- return 'integerForKey'
-- if raw_name is 'number':
-+ if raw_name == 'number':
- return 'doubleForKey'
-- if raw_name is 'string':
-+ if raw_name == 'string':
- return 'stringForKey'
- if raw_name in ['any', 'object']:
- return 'objectForKey'
-- if raw_name is 'array':
-+ if raw_name == 'array':
- return 'inspectorArrayForKey'
- return None
- if (isinstance(_type, EnumType)):
-diff --git a/Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py b/Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
-index a1987aa90..86cbd4934 100755
---- a/Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
-+++ b/Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py
-@@ -48,7 +48,7 @@ try:
-
- # When copying generator files to JavaScriptCore's private headers on Mac,
- # the codegen/ module directory is flattened. So, import directly.
--except ImportError, e:
-+except ImportError as e:
- # log.error(e) # Uncomment this to debug early import errors.
- import models
- from models import *
-diff --git a/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputs.py b/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputs.py
-index de32ef6c4..18fff7167 100644
---- a/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputs.py
-+++ b/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputs.py
-@@ -410,7 +410,7 @@ class InputsModel:
- self.inputs_by_name = {}
-
- def enum_types(self):
-- _enums = filter(lambda x: x.is_enum() or x.is_enum_class(), self.types)
-+ _enums = [x for x in self.types if x.is_enum() or x.is_enum_class()]
- return sorted(_enums, key=lambda _enum: _enum.type_name())
-
- def get_type_for_member(self, member):
-@@ -424,7 +424,7 @@ class InputsModel:
- if not isinstance(json['types'], dict):
- raise ParseException("Malformed specification: types is not a dict of framework->type list")
-
-- for framework_name, type_list in json['types'].iteritems():
-+ for framework_name, type_list in json['types'].items():
- if not isinstance(type_list, list):
- raise ParseException("Malformed specification: type list for framework %s is not a list" % framework_name)
-
-@@ -436,7 +436,7 @@ class InputsModel:
- if not isinstance(json['inputs'], dict):
- raise ParseException("Malformed specification: inputs is not a dict of framework->input list")
-
-- for framework_name, input_list in json['inputs'].iteritems():
-+ for framework_name, input_list in json['inputs'].items():
- if not isinstance(input_list, list):
- raise ParseException("Malformed specification: input list for framework %s is not a list" % framework_name)
-
-@@ -597,8 +597,8 @@ class Generator:
- implementation_file.close()
-
- def generate_header(self):
-- enums_to_generate = filter(self.should_generate_item, self._model.enum_types())
-- inputs_to_generate = filter(self.should_generate_item, self._model.inputs)
-+ enums_to_generate = list(filter(self.should_generate_item, self._model.enum_types()))
-+ inputs_to_generate = list(filter(self.should_generate_item, self._model.inputs))
-
- template_arguments = {
- 'licenseBlock': self.generate_license(),
-@@ -620,8 +620,8 @@ class Generator:
- return Template(Templates.HeaderSkeleton).substitute(template_arguments)
-
- def generate_implementation(self):
-- enums_to_generate = filter(self.should_generate_item, self._model.enum_types())
-- inputs_to_generate = filter(self.should_generate_item, self._model.inputs)
-+ enums_to_generate = list(filter(self.should_generate_item, self._model.enum_types()))
-+ inputs_to_generate = list(filter(self.should_generate_item, self._model.inputs))
-
- template_arguments = {
- 'licenseBlock': self.generate_license(),
-@@ -680,7 +680,7 @@ class Generator:
- lines = []
-
- decls_by_framework = {}
-- frameworks = [Framework.fromString(s) for s in FRAMEWORK_CONFIG_MAP.keys() if s != Frameworks.Global.name]
-+ frameworks = [Framework.fromString(s) for s in list(FRAMEWORK_CONFIG_MAP.keys()) if s != Frameworks.Global.name]
- for framework in frameworks:
- decls_by_framework[framework] = []
-
-@@ -808,7 +808,7 @@ class Generator:
- return Template(template).substitute(template_arguments)
-
- def generate_for_each_macro(self):
-- inputs_to_generate = filter(self.should_generate_item, self._model.inputs)
-+ inputs_to_generate = list(filter(self.should_generate_item, self._model.inputs))
-
- macro_name = "%s_REPLAY_INPUT_NAMES_FOR_EACH" % self.setting('prefix').upper()
- lines = []
-@@ -858,7 +858,7 @@ class Generator:
- }
- encodeLines.append(Template(encode_template).substitute(template_arguments))
-
-- for guard, guard_values in _type.guard_values_map.iteritems():
-+ for guard, guard_values in _type.guard_values_map.items():
- guardedLines = []
- for guard_value in guard_values:
- template_arguments = {
-@@ -880,7 +880,7 @@ class Generator:
- }
- decodeLines.append(Template(decode_template).substitute(template_arguments))
-
-- for guard, guard_values in _type.guard_values_map.iteritems():
-+ for guard, guard_values in _type.guard_values_map.items():
- guardedLines = []
- for i, guard_value in enumerate(guard_values):
- template_arguments = {
-@@ -999,7 +999,7 @@ def generate_from_specifications(input_filepaths=[], output_prefix="", output_di
- except ValueError as e:
- raise Exception("Error parsing valid JSON in file: " + input_filepath)
-
-- specifications = map(parse_json_from_file, input_filepaths)
-+ specifications = list(map(parse_json_from_file, input_filepaths))
-
- model = InputsModel()
- for spec in specifications:
-@@ -1012,7 +1012,7 @@ def generate_from_specifications(input_filepaths=[], output_prefix="", output_di
-
-
- if __name__ == '__main__':
-- allowed_framework_names = FRAMEWORK_CONFIG_MAP.keys()
-+ allowed_framework_names = list(FRAMEWORK_CONFIG_MAP.keys())
-
- cli_parser = optparse.OptionParser(usage="usage: %prog [options] <Inputs.json> [, <MoreInputs.json> ]")
- cli_parser.add_option("-o", "--outputDir", help="Directory where generated files should be written.")
-diff --git a/Source/ThirdParty/ANGLE/generate_winrt_projects.py b/Source/ThirdParty/ANGLE/generate_winrt_projects.py
-index e0e517772..5e18782c1 100644
---- a/Source/ThirdParty/ANGLE/generate_winrt_projects.py
-+++ b/Source/ThirdParty/ANGLE/generate_winrt_projects.py
-@@ -30,8 +30,8 @@ def generateProjects(generation_dir, build_winphone):
- gyp_cmd += ' -D angle_standalone=1'
- gyp_cmd += ' ' + os.path.join(script_dir, 'angle.gyp')
-
-- print 'Generating projects to ' + generation_dir + ' from gyp files...'
-- print gyp_cmd
-+ print('Generating projects to ' + generation_dir + ' from gyp files...')
-+ print(gyp_cmd)
- sys.stdout.flush()
- os.system(gyp_cmd)
-
-diff --git a/Source/ThirdParty/ANGLE/src/libANGLE/Float16ToFloat32.py b/Source/ThirdParty/ANGLE/src/libANGLE/Float16ToFloat32.py
-index cf039bfc2..951aa146e 100644
---- a/Source/ThirdParty/ANGLE/src/libANGLE/Float16ToFloat32.py
-+++ b/Source/ThirdParty/ANGLE/src/libANGLE/Float16ToFloat32.py
-@@ -42,7 +42,7 @@ def convertOffset(i):
- else:
- return 1024
-
--print """//
-+print("""//
- // Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
-@@ -52,27 +52,27 @@ print """//
-
- namespace gl
- {
--"""
-+""")
-
--print "const static unsigned g_mantissa[2048] = {"
-+print("const static unsigned g_mantissa[2048] = {")
- for i in range(0, 2048):
-- print " %#010x," % convertMantissa(i)
--print "};\n"
-+ print(" %#010x," % convertMantissa(i))
-+print("};\n")
-
--print "const static unsigned g_exponent[64] = {"
-+print("const static unsigned g_exponent[64] = {")
- for i in range(0, 64):
-- print " %#010x," % convertExponent(i)
--print "};\n"
-+ print(" %#010x," % convertExponent(i))
-+print("};\n")
-
--print "const static unsigned g_offset[64] = {"
-+print("const static unsigned g_offset[64] = {")
- for i in range(0, 64):
-- print " %#010x," % convertOffset(i)
--print "};\n"
-+ print(" %#010x," % convertOffset(i))
-+print("};\n")
-
--print """float float16ToFloat32(unsigned short h)
-+print("""float float16ToFloat32(unsigned short h)
- {
- unsigned i32 = g_mantissa[g_offset[h >> 10] + (h & 0x3ff)] + g_exponent[h >> 10];
- return *(float*) &i32;
- }
- }
--"""
-+""")
-diff --git a/Source/ThirdParty/ANGLE/src/libANGLE/renderer/generate_new_renderer.py b/Source/ThirdParty/ANGLE/src/libANGLE/renderer/generate_new_renderer.py
-index 5d64fbd23..e0be48b55 100644
---- a/Source/ThirdParty/ANGLE/src/libANGLE/renderer/generate_new_renderer.py
-+++ b/Source/ThirdParty/ANGLE/src/libANGLE/renderer/generate_new_renderer.py
-@@ -21,7 +21,7 @@ import re
- import string
-
- if len(sys.argv) < 3:
-- print('Usage: ' + sys.argv[0] + ' <renderer name> <renderer suffix>')
-+ print(('Usage: ' + sys.argv[0] + ' <renderer name> <renderer suffix>'))
-
- renderer_name = sys.argv[1]
- renderer_suffix = sys.argv[2]
-diff --git a/Source/ThirdParty/gtest/scripts/fuse_gtest_files.py b/Source/ThirdParty/gtest/scripts/fuse_gtest_files.py
-index 148444ca7..333d55590 100755
---- a/Source/ThirdParty/gtest/scripts/fuse_gtest_files.py
-+++ b/Source/ThirdParty/gtest/scripts/fuse_gtest_files.py
-@@ -90,8 +90,8 @@ def VerifyFileExists(directory, relative_path):
- """
-
- if not os.path.isfile(os.path.join(directory, relative_path)):
-- print 'ERROR: Cannot find %s in directory %s.' % (relative_path,
-- directory)
-+ print('ERROR: Cannot find %s in directory %s.' % (relative_path,
-+ directory))
- print ('Please either specify a valid project root directory '
- 'or omit it on the command line.')
- sys.exit(1)
-@@ -119,11 +119,11 @@ def VerifyOutputFile(output_dir, relative_path):
- # TODO(wan@google.com): The following user-interaction doesn't
- # work with automated processes. We should provide a way for the
- # Makefile to force overwriting the files.
-- print ('%s already exists in directory %s - overwrite it? (y/N) ' %
-- (relative_path, output_dir))
-+ print(('%s already exists in directory %s - overwrite it? (y/N) ' %
-+ (relative_path, output_dir)))
- answer = sys.stdin.readline().strip()
- if answer not in ['y', 'Y']:
-- print 'ABORTED.'
-+ print('ABORTED.')
- sys.exit(1)
-
- # Makes sure the directory holding the output file exists; creates
-@@ -242,7 +242,7 @@ def main():
- # fuse_gtest_files.py GTEST_ROOT_DIR OUTPUT_DIR
- FuseGTest(sys.argv[1], sys.argv[2])
- else:
-- print __doc__
-+ print(__doc__)
- sys.exit(1)
-
-
-diff --git a/Source/ThirdParty/gtest/scripts/gen_gtest_pred_impl.py b/Source/ThirdParty/gtest/scripts/gen_gtest_pred_impl.py
-index 8307134ad..748bcfeb4 100755
---- a/Source/ThirdParty/gtest/scripts/gen_gtest_pred_impl.py
-+++ b/Source/ThirdParty/gtest/scripts/gen_gtest_pred_impl.py
-@@ -183,7 +183,7 @@ def Title(word):
- def OneTo(n):
- """Returns the list [1, 2, 3, ..., n]."""
-
-- return range(1, n + 1)
-+ return list(range(1, n + 1))
-
-
- def Iter(n, format, sep=''):
-@@ -305,13 +305,13 @@ def GenerateFile(path, content):
- """Given a file path and a content string, overwrites it with the
- given content."""
-
-- print 'Updating file %s . . .' % path
-+ print('Updating file %s . . .' % path)
-
- f = file(path, 'w+')
-- print >>f, content,
-+ print(content, end=' ', file=f)
- f.close()
-
-- print 'File %s has been updated.' % path
-+ print('File %s has been updated.' % path)
-
-
- def GenerateHeader(n):
-@@ -720,8 +720,8 @@ def _Main():
- unit test."""
-
- if len(sys.argv) != 2:
-- print __doc__
-- print 'Author: ' + __author__
-+ print(__doc__)
-+ print('Author: ' + __author__)
- sys.exit(1)
-
- n = int(sys.argv[1])
-diff --git a/Source/ThirdParty/gtest/scripts/pump.py b/Source/ThirdParty/gtest/scripts/pump.py
-index f15c1b6ce..92b70ecec 100755
---- a/Source/ThirdParty/gtest/scripts/pump.py
-+++ b/Source/ThirdParty/gtest/scripts/pump.py
-@@ -236,7 +236,7 @@ def ParseToken(lines, pos, regex, token_type):
- if m and not m.start():
- return MakeToken(lines, pos, pos + m.end(), token_type)
- else:
-- print 'ERROR: %s expected at %s.' % (token_type, pos)
-+ print('ERROR: %s expected at %s.' % (token_type, pos))
- sys.exit(1)
-
-
-@@ -263,8 +263,8 @@ def SkipUntil(lines, pos, regex, token_type):
- if m:
- return pos + m.start()
- else:
-- print ('ERROR: %s expected on line %s after column %s.' %
-- (token_type, pos.line + 1, pos.column))
-+ print(('ERROR: %s expected on line %s after column %s.' %
-+ (token_type, pos.line + 1, pos.column)))
- sys.exit(1)
-
-
-@@ -444,8 +444,8 @@ def PushFront(a_list, elem):
- def PopToken(a_list, token_type=None):
- token = PopFront(a_list)
- if token_type is not None and token.token_type != token_type:
-- print 'ERROR: %s expected at %s' % (token_type, token.start)
-- print 'ERROR: %s found instead' % (token,)
-+ print('ERROR: %s expected at %s' % (token_type, token.start))
-+ print('ERROR: %s found instead' % (token,))
- sys.exit(1)
-
- return token
-@@ -609,16 +609,16 @@ class Env:
- if identifier == var:
- return value
-
-- print 'ERROR: meta variable %s is undefined.' % (identifier,)
-+ print('ERROR: meta variable %s is undefined.' % (identifier,))
- sys.exit(1)
-
- def EvalExp(self, exp):
- try:
- result = eval(exp.python_exp)
-- except Exception, e:
-- print 'ERROR: caught exception %s: %s' % (e.__class__.__name__, e)
-- print ('ERROR: failed to evaluate meta expression %s at %s' %
-- (exp.python_exp, exp.token.start))
-+ except Exception as e:
-+ print('ERROR: caught exception %s: %s' % (e.__class__.__name__, e))
-+ print(('ERROR: failed to evaluate meta expression %s at %s' %
-+ (exp.python_exp, exp.token.start)))
- sys.exit(1)
- return result
-
-@@ -627,7 +627,7 @@ class Env:
- if identifier == var:
- return (lower, upper)
-
-- print 'ERROR: range %s is undefined.' % (identifier,)
-+ print('ERROR: range %s is undefined.' % (identifier,))
- sys.exit(1)
-
-
-@@ -687,8 +687,8 @@ def RunAtomicCode(env, node, output):
- elif isinstance(node, CodeNode):
- RunCode(env.Clone(), node, output)
- else:
-- print 'BAD'
-- print node
-+ print('BAD')
-+ print(node)
- sys.exit(1)
-
-
-@@ -807,7 +807,7 @@ def BeautifyCode(string):
-
- def main(argv):
- if len(argv) == 1:
-- print __doc__
-+ print(__doc__)
- sys.exit(1)
-
- file_path = argv[-1]
-@@ -820,7 +820,7 @@ def main(argv):
- else:
- output_file_path = '-'
- if output_file_path == '-':
-- print output_str,
-+ print(output_str, end=' ')
- else:
- output_file = file(output_file_path, 'w')
- output_file.write('// This file was GENERATED by command:\n')
-diff --git a/Source/ThirdParty/gtest/scripts/upload.py b/Source/ThirdParty/gtest/scripts/upload.py
-index 6e6f9a147..4890ea16d 100755
---- a/Source/ThirdParty/gtest/scripts/upload.py
-+++ b/Source/ThirdParty/gtest/scripts/upload.py
-@@ -31,7 +31,7 @@ against by using the '--rev' option.
- # This code is derived from appcfg.py in the App Engine SDK (open source),
- # and from ASPN recipe #146306.
-
--import cookielib
-+import http.cookiejar
- import getpass
- import logging
- import md5
-@@ -42,9 +42,9 @@ import re
- import socket
- import subprocess
- import sys
--import urllib
--import urllib2
--import urlparse
-+import urllib.request, urllib.parse, urllib.error
-+import urllib.request, urllib.error, urllib.parse
-+import urllib.parse
-
- try:
- import readline
-@@ -79,15 +79,15 @@ def GetEmail(prompt):
- last_email = last_email_file.readline().strip("\n")
- last_email_file.close()
- prompt += " [%s]" % last_email
-- except IOError, e:
-+ except IOError as e:
- pass
-- email = raw_input(prompt + ": ").strip()
-+ email = input(prompt + ": ").strip()
- if email:
- try:
- last_email_file = open(last_email_file_name, "w")
- last_email_file.write(email)
- last_email_file.close()
-- except IOError, e:
-+ except IOError as e:
- pass
- else:
- email = last_email
-@@ -103,20 +103,20 @@ def StatusUpdate(msg):
- msg: The string to print.
- """
- if verbosity > 0:
-- print msg
-+ print(msg)
-
-
- def ErrorExit(msg):
- """Print an error message to stderr and exit."""
-- print >>sys.stderr, msg
-+ print(msg, file=sys.stderr)
- sys.exit(1)
-
-
--class ClientLoginError(urllib2.HTTPError):
-+class ClientLoginError(urllib.error.HTTPError):
- """Raised to indicate there was an error authenticating with ClientLogin."""
-
- def __init__(self, url, code, msg, headers, args):
-- urllib2.HTTPError.__init__(self, url, code, msg, headers, None)
-+ urllib.error.HTTPError.__init__(self, url, code, msg, headers, None)
- self.args = args
- self.reason = args["Error"]
-
-@@ -162,10 +162,10 @@ class AbstractRpcServer(object):
- def _CreateRequest(self, url, data=None):
- """Creates a new urllib request."""
- logging.debug("Creating request for: '%s' with payload:\n%s", url, data)
-- req = urllib2.Request(url, data=data)
-+ req = urllib.request.Request(url, data=data)
- if self.host_override:
- req.add_header("Host", self.host_override)
-- for key, value in self.extra_headers.iteritems():
-+ for key, value in self.extra_headers.items():
- req.add_header(key, value)
- return req
-
-@@ -189,7 +189,7 @@ class AbstractRpcServer(object):
- account_type = "HOSTED"
- req = self._CreateRequest(
- url="https://www.google.com/accounts/ClientLogin",
-- data=urllib.urlencode({
-+ data=urllib.parse.urlencode({
- "Email": email,
- "Passwd": password,
- "service": "ah",
-@@ -203,7 +203,7 @@ class AbstractRpcServer(object):
- response_dict = dict(x.split("=")
- for x in response_body.split("\n") if x)
- return response_dict["Auth"]
-- except urllib2.HTTPError, e:
-+ except urllib.error.HTTPError as e:
- if e.code == 403:
- body = e.read()
- response_dict = dict(x.split("=", 1) for x in body.split("\n") if x)
-@@ -225,14 +225,14 @@ class AbstractRpcServer(object):
- continue_location = "http://localhost/"
- args = {"continue": continue_location, "auth": auth_token}
- req = self._CreateRequest("http://%s/_ah/login?%s" %
-- (self.host, urllib.urlencode(args)))
-+ (self.host, urllib.parse.urlencode(args)))
- try:
- response = self.opener.open(req)
-- except urllib2.HTTPError, e:
-+ except urllib.error.HTTPError as e:
- response = e
- if (response.code != 302 or
- response.info()["location"] != continue_location):
-- raise urllib2.HTTPError(req.get_full_url(), response.code, response.msg,
-+ raise urllib.error.HTTPError(req.get_full_url(), response.code, response.msg,
- response.headers, response.fp)
- self.authenticated = True
-
-@@ -255,34 +255,34 @@ class AbstractRpcServer(object):
- credentials = self.auth_function()
- try:
- auth_token = self._GetAuthToken(credentials[0], credentials[1])
-- except ClientLoginError, e:
-+ except ClientLoginError as e:
- if e.reason == "BadAuthentication":
-- print >>sys.stderr, "Invalid username or password."
-+ print("Invalid username or password.", file=sys.stderr)
- continue
- if e.reason == "CaptchaRequired":
-- print >>sys.stderr, (
-+ print((
- "Please go to\n"
- "https://www.google.com/accounts/DisplayUnlockCaptcha\n"
-- "and verify you are a human. Then try again.")
-+ "and verify you are a human. Then try again."), file=sys.stderr)
- break
- if e.reason == "NotVerified":
-- print >>sys.stderr, "Account not verified."
-+ print("Account not verified.", file=sys.stderr)
- break
- if e.reason == "TermsNotAgreed":
-- print >>sys.stderr, "User has not agreed to TOS."
-+ print("User has not agreed to TOS.", file=sys.stderr)
- break
- if e.reason == "AccountDeleted":
-- print >>sys.stderr, "The user account has been deleted."
-+ print("The user account has been deleted.", file=sys.stderr)
- break
- if e.reason == "AccountDisabled":
-- print >>sys.stderr, "The user account has been disabled."
-+ print("The user account has been disabled.", file=sys.stderr)
- break
- if e.reason == "ServiceDisabled":
-- print >>sys.stderr, ("The user's access to the service has been "
-- "disabled.")
-+ print(("The user's access to the service has been "
-+ "disabled."), file=sys.stderr)
- break
- if e.reason == "ServiceUnavailable":
-- print >>sys.stderr, "The service is not available; try again later."
-+ print("The service is not available; try again later.", file=sys.stderr)
- break
- raise
- self._GetAuthCookie(auth_token)
-@@ -319,7 +319,7 @@ class AbstractRpcServer(object):
- args = dict(kwargs)
- url = "http://%s%s" % (self.host, request_path)
- if args:
-- url += "?" + urllib.urlencode(args)
-+ url += "?" + urllib.parse.urlencode(args)
- req = self._CreateRequest(url=url, data=payload)
- req.add_header("Content-Type", content_type)
- try:
-@@ -327,7 +327,7 @@ class AbstractRpcServer(object):
- response = f.read()
- f.close()
- return response
-- except urllib2.HTTPError, e:
-+ except urllib.error.HTTPError as e:
- if tries > 3:
- raise
- elif e.code == 401:
-@@ -357,35 +357,35 @@ class HttpRpcServer(AbstractRpcServer):
- Returns:
- A urllib2.OpenerDirector object.
- """
-- opener = urllib2.OpenerDirector()
-- opener.add_handler(urllib2.ProxyHandler())
-- opener.add_handler(urllib2.UnknownHandler())
-- opener.add_handler(urllib2.HTTPHandler())
-- opener.add_handler(urllib2.HTTPDefaultErrorHandler())
-- opener.add_handler(urllib2.HTTPSHandler())
-+ opener = urllib.request.OpenerDirector()
-+ opener.add_handler(urllib.request.ProxyHandler())
-+ opener.add_handler(urllib.request.UnknownHandler())
-+ opener.add_handler(urllib.request.HTTPHandler())
-+ opener.add_handler(urllib.request.HTTPDefaultErrorHandler())
-+ opener.add_handler(urllib.request.HTTPSHandler())
- opener.add_handler(urllib2.HTTPErrorProcessor())
- if self.save_cookies:
- self.cookie_file = os.path.expanduser("~/.codereview_upload_cookies")
-- self.cookie_jar = cookielib.MozillaCookieJar(self.cookie_file)
-+ self.cookie_jar = http.cookiejar.MozillaCookieJar(self.cookie_file)
- if os.path.exists(self.cookie_file):
- try:
- self.cookie_jar.load()
- self.authenticated = True
- StatusUpdate("Loaded authentication cookies from %s" %
- self.cookie_file)
-- except (cookielib.LoadError, IOError):
-+ except (http.cookiejar.LoadError, IOError):
- # Failed to load cookies - just ignore them.
- pass
- else:
- # Create an empty cookie file with mode 600
-- fd = os.open(self.cookie_file, os.O_CREAT, 0600)
-+ fd = os.open(self.cookie_file, os.O_CREAT, 0o600)
- os.close(fd)
- # Always chmod the cookie file
-- os.chmod(self.cookie_file, 0600)
-+ os.chmod(self.cookie_file, 0o600)
- else:
- # Don't save cookies across runs of update.py.
-- self.cookie_jar = cookielib.CookieJar()
-- opener.add_handler(urllib2.HTTPCookieProcessor(self.cookie_jar))
-+ self.cookie_jar = http.cookiejar.CookieJar()
-+ opener.add_handler(urllib.request.HTTPCookieProcessor(self.cookie_jar))
- return opener
-
-
-@@ -560,7 +560,7 @@ def RunShellWithReturnCode(command, print_output=False,
- line = p.stdout.readline()
- if not line:
- break
-- print line.strip("\n")
-+ print(line.strip("\n"))
- output_array.append(line)
- output = "".join(output_array)
- else:
-@@ -568,7 +568,7 @@ def RunShellWithReturnCode(command, print_output=False,
- p.wait()
- errout = p.stderr.read()
- if print_output and errout:
-- print >>sys.stderr, errout
-+ print(errout, file=sys.stderr)
- p.stdout.close()
- p.stderr.close()
- return output, p.returncode
-@@ -614,11 +614,11 @@ class VersionControlSystem(object):
- """Show an "are you sure?" prompt if there are unknown files."""
- unknown_files = self.GetUnknownFiles()
- if unknown_files:
-- print "The following files are not added to version control:"
-+ print("The following files are not added to version control:")
- for line in unknown_files:
-- print line
-+ print(line)
- prompt = "Are you sure to continue?(y/N) "
-- answer = raw_input(prompt).strip()
-+ answer = input(prompt).strip()
- if answer != "y":
- ErrorExit("User aborted")
-
-@@ -670,13 +670,13 @@ class VersionControlSystem(object):
- else:
- type = "current"
- if len(content) > MAX_UPLOAD_SIZE:
-- print ("Not uploading the %s file for %s because it's too large." %
-- (type, filename))
-+ print(("Not uploading the %s file for %s because it's too large." %
-+ (type, filename)))
- file_too_large = True
- content = ""
- checksum = md5.new(content).hexdigest()
- if options.verbose > 0 and not file_too_large:
-- print "Uploading %s file for %s" % (type, filename)
-+ print("Uploading %s file for %s" % (type, filename))
- url = "/%d/upload_content/%d/%d" % (int(issue), int(patchset), file_id)
- form_fields = [("filename", filename),
- ("status", status),
-@@ -698,7 +698,7 @@ class VersionControlSystem(object):
-
- patches = dict()
- [patches.setdefault(v, k) for k, v in patch_list]
-- for filename in patches.keys():
-+ for filename in list(patches.keys()):
- base_content, new_content, is_binary, status = files[filename]
- file_id_str = patches.get(filename)
- if file_id_str.find("nobase") != -1:
-@@ -755,8 +755,8 @@ class SubversionVCS(VersionControlSystem):
- words = line.split()
- if len(words) == 2 and words[0] == "URL:":
- url = words[1]
-- scheme, netloc, path, params, query, fragment = urlparse.urlparse(url)
-- username, netloc = urllib.splituser(netloc)
-+ scheme, netloc, path, params, query, fragment = urllib.parse.urlparse(url)
-+ username, netloc = urllib.parse.splituser(netloc)
- if username:
- logging.info("Removed username from base URL")
- if netloc.endswith("svn.python.org"):
-@@ -774,12 +774,12 @@ class SubversionVCS(VersionControlSystem):
- logging.info("Guessed CollabNet base = %s", base)
- elif netloc.endswith(".googlecode.com"):
- path = path + "/"
-- base = urlparse.urlunparse(("http", netloc, path, params,
-+ base = urllib.parse.urlunparse(("http", netloc, path, params,
- query, fragment))
- logging.info("Guessed Google Code base = %s", base)
- else:
- path = path + "/"
-- base = urlparse.urlunparse((scheme, netloc, path, params,
-+ base = urllib.parse.urlunparse((scheme, netloc, path, params,
- query, fragment))
- logging.info("Guessed base = %s", base)
- return base
-@@ -1187,8 +1187,8 @@ def UploadSeparatePatches(issue, rpc_server, patchset, data, options):
- rv = []
- for patch in patches:
- if len(patch[1]) > MAX_UPLOAD_SIZE:
-- print ("Not uploading the patch for " + patch[0] +
-- " because the file is too large.")
-+ print(("Not uploading the patch for " + patch[0] +
-+ " because the file is too large."))
- continue
- form_fields = [("filename", patch[0])]
- if not options.download_base:
-@@ -1196,7 +1196,7 @@ def UploadSeparatePatches(issue, rpc_server, patchset, data, options):
- files = [("data", "data.diff", patch[1])]
- ctype, body = EncodeMultipartFormData(form_fields, files)
- url = "/%d/upload_patch/%d" % (int(issue), int(patchset))
-- print "Uploading patch for " + patch[0]
-+ print("Uploading patch for " + patch[0])
- response_body = rpc_server.Send(url, body, content_type=ctype)
- lines = response_body.splitlines()
- if not lines or lines[0] != "OK":
-@@ -1223,7 +1223,8 @@ def GuessVCS(options):
- out, returncode = RunShellWithReturnCode(["hg", "root"])
- if returncode == 0:
- return MercurialVCS(options, out.strip())
-- except OSError, (errno, message):
-+ except OSError as xxx_todo_changeme:
-+ (errno, message) = xxx_todo_changeme.args
- if errno != 2: # ENOENT -- they don't have hg installed.
- raise
-
-@@ -1239,7 +1240,8 @@ def GuessVCS(options):
- "--is-inside-work-tree"])
- if returncode == 0:
- return GitVCS(options)
-- except OSError, (errno, message):
-+ except OSError as xxx_todo_changeme1:
-+ (errno, message) = xxx_todo_changeme1.args
- if errno != 2: # ENOENT -- they don't have git installed.
- raise
-
-@@ -1286,12 +1288,12 @@ def RealMain(argv, data=None):
- data = vcs.GenerateDiff(args)
- files = vcs.GetBaseFiles(data)
- if verbosity >= 1:
-- print "Upload server:", options.server, "(change with -s/--server)"
-+ print("Upload server:", options.server, "(change with -s/--server)")
- if options.issue:
- prompt = "Message describing this patch set: "
- else:
- prompt = "New issue subject: "
-- message = options.message or raw_input(prompt).strip()
-+ message = options.message or input(prompt).strip()
- if not message:
- ErrorExit("A non-empty message is required")
- rpc_server = GetRpcServer(options)
-@@ -1324,7 +1326,7 @@ def RealMain(argv, data=None):
- # Send a hash of all the base file so the server can determine if a copy
- # already exists in an earlier patchset.
- base_hashes = ""
-- for file, info in files.iteritems():
-+ for file, info in files.items():
- if not info[0] is None:
- checksum = md5.new(info[0]).hexdigest()
- if base_hashes:
-@@ -1338,7 +1340,7 @@ def RealMain(argv, data=None):
- if not options.download_base:
- form_fields.append(("content_upload", "1"))
- if len(data) > MAX_UPLOAD_SIZE:
-- print "Patch is large, so uploading file patches separately."
-+ print("Patch is large, so uploading file patches separately.")
- uploaded_diff_file = []
- form_fields.append(("separate_patches", "1"))
- else:
-@@ -1378,7 +1380,7 @@ def main():
- try:
- RealMain(sys.argv)
- except KeyboardInterrupt:
-- print
-+ print()
- StatusUpdate("Interrupted.")
- sys.exit(1)
-
-diff --git a/Source/ThirdParty/gtest/test/gtest_break_on_failure_unittest.py b/Source/ThirdParty/gtest/test/gtest_break_on_failure_unittest.py
-index c81918331..f36abe338 100755
---- a/Source/ThirdParty/gtest/test/gtest_break_on_failure_unittest.py
-+++ b/Source/ThirdParty/gtest/test/gtest_break_on_failure_unittest.py
-@@ -145,7 +145,7 @@ class GTestBreakOnFailureUnitTest(gtest_test_utils.TestCase):
- msg = ('when %s%s, an assertion failure in "%s" %s cause a seg-fault.' %
- (BREAK_ON_FAILURE_ENV_VAR, env_var_value_msg, ' '.join(command),
- should_or_not))
-- self.assert_(has_seg_fault == expect_seg_fault, msg)
-+ self.assertTrue(has_seg_fault == expect_seg_fault, msg)
-
- def testDefaultBehavior(self):
- """Tests the behavior of the default mode."""
-diff --git a/Source/ThirdParty/gtest/test/gtest_color_test.py b/Source/ThirdParty/gtest/test/gtest_color_test.py
-index d02a53ed8..b69ab0947 100755
---- a/Source/ThirdParty/gtest/test/gtest_color_test.py
-+++ b/Source/ThirdParty/gtest/test/gtest_color_test.py
-@@ -72,58 +72,58 @@ class GTestColorTest(gtest_test_utils.TestCase):
- """Tests the case when there's neither GTEST_COLOR nor --gtest_color."""
-
- if not IS_WINDOWS:
-- self.assert_(not UsesColor('dumb', None, None))
-- self.assert_(not UsesColor('emacs', None, None))
-- self.assert_(not UsesColor('xterm-mono', None, None))
-- self.assert_(not UsesColor('unknown', None, None))
-- self.assert_(not UsesColor(None, None, None))
-- self.assert_(UsesColor('linux', None, None))
-- self.assert_(UsesColor('cygwin', None, None))
-- self.assert_(UsesColor('xterm', None, None))
-- self.assert_(UsesColor('xterm-color', None, None))
-- self.assert_(UsesColor('xterm-256color', None, None))
-+ self.assertTrue(not UsesColor('dumb', None, None))
-+ self.assertTrue(not UsesColor('emacs', None, None))
-+ self.assertTrue(not UsesColor('xterm-mono', None, None))
-+ self.assertTrue(not UsesColor('unknown', None, None))
-+ self.assertTrue(not UsesColor(None, None, None))
-+ self.assertTrue(UsesColor('linux', None, None))
-+ self.assertTrue(UsesColor('cygwin', None, None))
-+ self.assertTrue(UsesColor('xterm', None, None))
-+ self.assertTrue(UsesColor('xterm-color', None, None))
-+ self.assertTrue(UsesColor('xterm-256color', None, None))
-
- def testFlagOnly(self):
- """Tests the case when there's --gtest_color but not GTEST_COLOR."""
-
-- self.assert_(not UsesColor('dumb', None, 'no'))
-- self.assert_(not UsesColor('xterm-color', None, 'no'))
-+ self.assertTrue(not UsesColor('dumb', None, 'no'))
-+ self.assertTrue(not UsesColor('xterm-color', None, 'no'))
- if not IS_WINDOWS:
-- self.assert_(not UsesColor('emacs', None, 'auto'))
-- self.assert_(UsesColor('xterm', None, 'auto'))
-- self.assert_(UsesColor('dumb', None, 'yes'))
-- self.assert_(UsesColor('xterm', None, 'yes'))
-+ self.assertTrue(not UsesColor('emacs', None, 'auto'))
-+ self.assertTrue(UsesColor('xterm', None, 'auto'))
-+ self.assertTrue(UsesColor('dumb', None, 'yes'))
-+ self.assertTrue(UsesColor('xterm', None, 'yes'))
-
- def testEnvVarOnly(self):
- """Tests the case when there's GTEST_COLOR but not --gtest_color."""
-
-- self.assert_(not UsesColor('dumb', 'no', None))
-- self.assert_(not UsesColor('xterm-color', 'no', None))
-+ self.assertTrue(not UsesColor('dumb', 'no', None))
-+ self.assertTrue(not UsesColor('xterm-color', 'no', None))
- if not IS_WINDOWS:
-- self.assert_(not UsesColor('dumb', 'auto', None))
-- self.assert_(UsesColor('xterm-color', 'auto', None))
-- self.assert_(UsesColor('dumb', 'yes', None))
-- self.assert_(UsesColor('xterm-color', 'yes', None))
-+ self.assertTrue(not UsesColor('dumb', 'auto', None))
-+ self.assertTrue(UsesColor('xterm-color', 'auto', None))
-+ self.assertTrue(UsesColor('dumb', 'yes', None))
-+ self.assertTrue(UsesColor('xterm-color', 'yes', None))
-
- def testEnvVarAndFlag(self):
- """Tests the case when there are both GTEST_COLOR and --gtest_color."""
-
-- self.assert_(not UsesColor('xterm-color', 'no', 'no'))
-- self.assert_(UsesColor('dumb', 'no', 'yes'))
-- self.assert_(UsesColor('xterm-color', 'no', 'auto'))
-+ self.assertTrue(not UsesColor('xterm-color', 'no', 'no'))
-+ self.assertTrue(UsesColor('dumb', 'no', 'yes'))
-+ self.assertTrue(UsesColor('xterm-color', 'no', 'auto'))
-
- def testAliasesOfYesAndNo(self):
- """Tests using aliases in specifying --gtest_color."""
-
-- self.assert_(UsesColor('dumb', None, 'true'))
-- self.assert_(UsesColor('dumb', None, 'YES'))
-- self.assert_(UsesColor('dumb', None, 'T'))
-- self.assert_(UsesColor('dumb', None, '1'))
-+ self.assertTrue(UsesColor('dumb', None, 'true'))
-+ self.assertTrue(UsesColor('dumb', None, 'YES'))
-+ self.assertTrue(UsesColor('dumb', None, 'T'))
-+ self.assertTrue(UsesColor('dumb', None, '1'))
-
-- self.assert_(not UsesColor('xterm', None, 'f'))
-- self.assert_(not UsesColor('xterm', None, 'false'))
-- self.assert_(not UsesColor('xterm', None, '0'))
-- self.assert_(not UsesColor('xterm', None, 'unknown'))
-+ self.assertTrue(not UsesColor('xterm', None, 'f'))
-+ self.assertTrue(not UsesColor('xterm', None, 'false'))
-+ self.assertTrue(not UsesColor('xterm', None, '0'))
-+ self.assertTrue(not UsesColor('xterm', None, 'unknown'))
-
-
- if __name__ == '__main__':
-diff --git a/Source/ThirdParty/gtest/test/gtest_env_var_test.py b/Source/ThirdParty/gtest/test/gtest_env_var_test.py
-index bcc0bfd55..868896831 100755
---- a/Source/ThirdParty/gtest/test/gtest_env_var_test.py
-+++ b/Source/ThirdParty/gtest/test/gtest_env_var_test.py
-@@ -47,8 +47,8 @@ environ = os.environ.copy()
-
- def AssertEq(expected, actual):
- if expected != actual:
-- print 'Expected: %s' % (expected,)
-- print ' Actual: %s' % (actual,)
-+ print('Expected: %s' % (expected,))
-+ print(' Actual: %s' % (actual,))
- raise AssertionError
-
-
-diff --git a/Source/ThirdParty/gtest/test/gtest_filter_unittest.py b/Source/ThirdParty/gtest/test/gtest_filter_unittest.py
-index 0d1a77005..595b2fa33 100755
---- a/Source/ThirdParty/gtest/test/gtest_filter_unittest.py
-+++ b/Source/ThirdParty/gtest/test/gtest_filter_unittest.py
-@@ -231,10 +231,10 @@ class GTestFilterUnitTest(gtest_test_utils.TestCase):
- """Asserts that two sets are equal."""
-
- for elem in lhs:
-- self.assert_(elem in rhs, '%s in %s' % (elem, rhs))
-+ self.assertTrue(elem in rhs, '%s in %s' % (elem, rhs))
-
- for elem in rhs:
-- self.assert_(elem in lhs, '%s in %s' % (elem, lhs))
-+ self.assertTrue(elem in lhs, '%s in %s' % (elem, lhs))
-
- def AssertPartitionIsValid(self, set_var, list_of_sets):
- """Asserts that list_of_sets is a valid partition of set_var."""
-@@ -575,13 +575,13 @@ class GTestFilterUnitTest(gtest_test_utils.TestCase):
-
- shard_status_file = os.path.join(gtest_test_utils.GetTempDir(),
- 'shard_status_file')
-- self.assert_(not os.path.exists(shard_status_file))
-+ self.assertTrue(not os.path.exists(shard_status_file))
-
- extra_env = {SHARD_STATUS_FILE_ENV_VAR: shard_status_file}
- try:
- InvokeWithModifiedEnv(extra_env, RunAndReturnOutput)
- finally:
-- self.assert_(os.path.exists(shard_status_file))
-+ self.assertTrue(os.path.exists(shard_status_file))
- os.remove(shard_status_file)
-
- def testShardStatusFileIsCreatedWithListTests(self):
-@@ -589,7 +589,7 @@ class GTestFilterUnitTest(gtest_test_utils.TestCase):
-
- shard_status_file = os.path.join(gtest_test_utils.GetTempDir(),
- 'shard_status_file2')
-- self.assert_(not os.path.exists(shard_status_file))
-+ self.assertTrue(not os.path.exists(shard_status_file))
-
- extra_env = {SHARD_STATUS_FILE_ENV_VAR: shard_status_file}
- try:
-@@ -599,12 +599,12 @@ class GTestFilterUnitTest(gtest_test_utils.TestCase):
- finally:
- # This assertion ensures that Google Test enumerated the tests as
- # opposed to running them.
-- self.assert_('[==========]' not in output,
-+ self.assertTrue('[==========]' not in output,
- 'Unexpected output during test enumeration.\n'
- 'Please ensure that LIST_TESTS_FLAG is assigned the\n'
- 'correct flag value for listing Google Test tests.')
-
-- self.assert_(os.path.exists(shard_status_file))
-+ self.assertTrue(os.path.exists(shard_status_file))
- os.remove(shard_status_file)
-
- if SUPPORTS_DEATH_TESTS:
-diff --git a/Source/ThirdParty/gtest/test/gtest_help_test.py b/Source/ThirdParty/gtest/test/gtest_help_test.py
-index 3cb4c48e0..8aae487b4 100755
---- a/Source/ThirdParty/gtest/test/gtest_help_test.py
-+++ b/Source/ThirdParty/gtest/test/gtest_help_test.py
-@@ -107,17 +107,17 @@ class GTestHelpTest(gtest_test_utils.TestCase):
- """
-
- exit_code, output = RunWithFlag(flag)
-- self.assertEquals(0, exit_code)
-- self.assert_(HELP_REGEX.search(output), output)
-+ self.assertEqual(0, exit_code)
-+ self.assertTrue(HELP_REGEX.search(output), output)
- if IS_WINDOWS:
-- self.assert_(CATCH_EXCEPTIONS_FLAG in output, output)
-+ self.assertTrue(CATCH_EXCEPTIONS_FLAG in output, output)
- else:
-- self.assert_(CATCH_EXCEPTIONS_FLAG not in output, output)
-+ self.assertTrue(CATCH_EXCEPTIONS_FLAG not in output, output)
-
- if SUPPORTS_DEATH_TESTS and not IS_WINDOWS:
-- self.assert_(DEATH_TEST_STYLE_FLAG in output, output)
-+ self.assertTrue(DEATH_TEST_STYLE_FLAG in output, output)
- else:
-- self.assert_(DEATH_TEST_STYLE_FLAG not in output, output)
-+ self.assertTrue(DEATH_TEST_STYLE_FLAG not in output, output)
-
- def TestNonHelpFlag(self, flag):
- """Verifies correct behavior when no help flag is specified.
-@@ -130,8 +130,8 @@ class GTestHelpTest(gtest_test_utils.TestCase):
- """
-
- exit_code, output = RunWithFlag(flag)
-- self.assert_(exit_code != 0)
-- self.assert_(not HELP_REGEX.search(output), output)
-+ self.assertTrue(exit_code != 0)
-+ self.assertTrue(not HELP_REGEX.search(output), output)
-
- def testPrintsHelpWithFullFlag(self):
- self.TestHelpFlag('--help')
-diff --git a/Source/ThirdParty/gtest/test/gtest_list_tests_unittest.py b/Source/ThirdParty/gtest/test/gtest_list_tests_unittest.py
-index ce8c3ef05..1d3ce746c 100755
---- a/Source/ThirdParty/gtest/test/gtest_list_tests_unittest.py
-+++ b/Source/ThirdParty/gtest/test/gtest_list_tests_unittest.py
-@@ -136,9 +136,9 @@ class GTestListTestsUnitTest(gtest_test_utils.TestCase):
- (LIST_TESTS_FLAG, flag_expression, ' '.join(args), output))
-
- if expected_output is not None:
-- self.assert_(output == expected_output, msg)
-+ self.assertTrue(output == expected_output, msg)
- else:
-- self.assert_(output != EXPECTED_OUTPUT_NO_FILTER, msg)
-+ self.assertTrue(output != EXPECTED_OUTPUT_NO_FILTER, msg)
-
- def testDefaultBehavior(self):
- """Tests the behavior of the default mode."""
-diff --git a/Source/ThirdParty/gtest/test/gtest_shuffle_test.py b/Source/ThirdParty/gtest/test/gtest_shuffle_test.py
-index 30d0303d1..e4902f09a 100755
---- a/Source/ThirdParty/gtest/test/gtest_shuffle_test.py
-+++ b/Source/ThirdParty/gtest/test/gtest_shuffle_test.py
-@@ -179,23 +179,23 @@ class GTestShuffleUnitTest(gtest_test_utils.TestCase):
- self.assertEqual(len(SHARDED_TESTS), len(SHUFFLED_SHARDED_TESTS))
-
- def testShuffleChangesTestOrder(self):
-- self.assert_(SHUFFLED_ALL_TESTS != ALL_TESTS, SHUFFLED_ALL_TESTS)
-- self.assert_(SHUFFLED_ACTIVE_TESTS != ACTIVE_TESTS, SHUFFLED_ACTIVE_TESTS)
-- self.assert_(SHUFFLED_FILTERED_TESTS != FILTERED_TESTS,
-+ self.assertTrue(SHUFFLED_ALL_TESTS != ALL_TESTS, SHUFFLED_ALL_TESTS)
-+ self.assertTrue(SHUFFLED_ACTIVE_TESTS != ACTIVE_TESTS, SHUFFLED_ACTIVE_TESTS)
-+ self.assertTrue(SHUFFLED_FILTERED_TESTS != FILTERED_TESTS,
- SHUFFLED_FILTERED_TESTS)
-- self.assert_(SHUFFLED_SHARDED_TESTS != SHARDED_TESTS,
-+ self.assertTrue(SHUFFLED_SHARDED_TESTS != SHARDED_TESTS,
- SHUFFLED_SHARDED_TESTS)
-
- def testShuffleChangesTestCaseOrder(self):
-- self.assert_(GetTestCases(SHUFFLED_ALL_TESTS) != GetTestCases(ALL_TESTS),
-+ self.assertTrue(GetTestCases(SHUFFLED_ALL_TESTS) != GetTestCases(ALL_TESTS),
- GetTestCases(SHUFFLED_ALL_TESTS))
-- self.assert_(
-+ self.assertTrue(
- GetTestCases(SHUFFLED_ACTIVE_TESTS) != GetTestCases(ACTIVE_TESTS),
- GetTestCases(SHUFFLED_ACTIVE_TESTS))
-- self.assert_(
-+ self.assertTrue(
- GetTestCases(SHUFFLED_FILTERED_TESTS) != GetTestCases(FILTERED_TESTS),
- GetTestCases(SHUFFLED_FILTERED_TESTS))
-- self.assert_(
-+ self.assertTrue(
- GetTestCases(SHUFFLED_SHARDED_TESTS) != GetTestCases(SHARDED_TESTS),
- GetTestCases(SHUFFLED_SHARDED_TESTS))
-
-@@ -215,29 +215,29 @@ class GTestShuffleUnitTest(gtest_test_utils.TestCase):
-
- def testShuffleDoesNotCreateNewTest(self):
- for test in SHUFFLED_ALL_TESTS:
-- self.assert_(test in ALL_TESTS, '%s is an invalid test' % (test,))
-+ self.assertTrue(test in ALL_TESTS, '%s is an invalid test' % (test,))
- for test in SHUFFLED_ACTIVE_TESTS:
-- self.assert_(test in ACTIVE_TESTS, '%s is an invalid test' % (test,))
-+ self.assertTrue(test in ACTIVE_TESTS, '%s is an invalid test' % (test,))
- for test in SHUFFLED_FILTERED_TESTS:
-- self.assert_(test in FILTERED_TESTS, '%s is an invalid test' % (test,))
-+ self.assertTrue(test in FILTERED_TESTS, '%s is an invalid test' % (test,))
- for test in SHUFFLED_SHARDED_TESTS:
-- self.assert_(test in SHARDED_TESTS, '%s is an invalid test' % (test,))
-+ self.assertTrue(test in SHARDED_TESTS, '%s is an invalid test' % (test,))
-
- def testShuffleIncludesAllTests(self):
- for test in ALL_TESTS:
-- self.assert_(test in SHUFFLED_ALL_TESTS, '%s is missing' % (test,))
-+ self.assertTrue(test in SHUFFLED_ALL_TESTS, '%s is missing' % (test,))
- for test in ACTIVE_TESTS:
-- self.assert_(test in SHUFFLED_ACTIVE_TESTS, '%s is missing' % (test,))
-+ self.assertTrue(test in SHUFFLED_ACTIVE_TESTS, '%s is missing' % (test,))
- for test in FILTERED_TESTS:
-- self.assert_(test in SHUFFLED_FILTERED_TESTS, '%s is missing' % (test,))
-+ self.assertTrue(test in SHUFFLED_FILTERED_TESTS, '%s is missing' % (test,))
- for test in SHARDED_TESTS:
-- self.assert_(test in SHUFFLED_SHARDED_TESTS, '%s is missing' % (test,))
-+ self.assertTrue(test in SHUFFLED_SHARDED_TESTS, '%s is missing' % (test,))
-
- def testShuffleLeavesDeathTestsAtFront(self):
- non_death_test_found = False
- for test in SHUFFLED_ACTIVE_TESTS:
- if 'DeathTest.' in test:
-- self.assert_(not non_death_test_found,
-+ self.assertTrue(not non_death_test_found,
- '%s appears after a non-death test' % (test,))
- else:
- non_death_test_found = True
-@@ -295,11 +295,11 @@ class GTestShuffleUnitTest(gtest_test_utils.TestCase):
- GetTestsForAllIterations(
- {}, [ShuffleFlag(), RandomSeedFlag(1), RepeatFlag(3)]))
-
-- self.assert_(tests_in_iteration1 != tests_in_iteration2,
-+ self.assertTrue(tests_in_iteration1 != tests_in_iteration2,
- tests_in_iteration1)
-- self.assert_(tests_in_iteration1 != tests_in_iteration3,
-+ self.assertTrue(tests_in_iteration1 != tests_in_iteration3,
- tests_in_iteration1)
-- self.assert_(tests_in_iteration2 != tests_in_iteration3,
-+ self.assertTrue(tests_in_iteration2 != tests_in_iteration3,
- tests_in_iteration2)
-
- def testShuffleShardedTestsPreservesPartition(self):
-diff --git a/Source/ThirdParty/gtest/test/gtest_test_utils.py b/Source/ThirdParty/gtest/test/gtest_test_utils.py
-index e0f5973e7..80a953ea1 100755
---- a/Source/ThirdParty/gtest/test/gtest_test_utils.py
-+++ b/Source/ThirdParty/gtest/test/gtest_test_utils.py
-@@ -167,7 +167,7 @@ def GetTestExecutablePath(executable_name, build_dir=None):
- # TODO(vladl@google.com): change mk_test.py to test.py after renaming
- # the file.
- 'Please run mk_test.py -h for help.')
-- print >> sys.stderr, message
-+ print(message, file=sys.stderr)
- sys.exit(1)
-
- return path
-diff --git a/Source/ThirdParty/gtest/test/gtest_throw_on_failure_test.py b/Source/ThirdParty/gtest/test/gtest_throw_on_failure_test.py
-index 5678ffeaf..318e6306c 100755
---- a/Source/ThirdParty/gtest/test/gtest_throw_on_failure_test.py
-+++ b/Source/ThirdParty/gtest/test/gtest_throw_on_failure_test.py
-@@ -70,7 +70,7 @@ def SetEnvVar(env_var, value):
- def Run(command):
- """Runs a command; returns True/False if its exit code is/isn't 0."""
-
-- print 'Running "%s". . .' % ' '.join(command)
-+ print('Running "%s". . .' % ' '.join(command))
- p = gtest_test_utils.Subprocess(command)
- return p.exited and p.exit_code == 0
-
-@@ -123,7 +123,7 @@ class ThrowOnFailureTest(gtest_test_utils.TestCase):
- 'exit code.' %
- (THROW_ON_FAILURE, env_var_value_msg, ' '.join(command),
- should_or_not))
-- self.assert_(failed == should_fail, msg)
-+ self.assertTrue(failed == should_fail, msg)
-
- def testDefaultBehavior(self):
- """Tests the behavior of the default mode."""
-diff --git a/Source/ThirdParty/gtest/test/gtest_uninitialized_test.py b/Source/ThirdParty/gtest/test/gtest_uninitialized_test.py
-index 6ae57eeed..435837009 100755
---- a/Source/ThirdParty/gtest/test/gtest_uninitialized_test.py
-+++ b/Source/ThirdParty/gtest/test/gtest_uninitialized_test.py
-@@ -46,8 +46,8 @@ def Assert(condition):
-
- def AssertEq(expected, actual):
- if expected != actual:
-- print 'Expected: %s' % (expected,)
-- print ' Actual: %s' % (actual,)
-+ print('Expected: %s' % (expected,))
-+ print(' Actual: %s' % (actual,))
- raise AssertionError
-
-
-diff --git a/Source/ThirdParty/gtest/test/gtest_xml_outfiles_test.py b/Source/ThirdParty/gtest/test/gtest_xml_outfiles_test.py
-index 0fe947f08..7281864c5 100755
---- a/Source/ThirdParty/gtest/test/gtest_xml_outfiles_test.py
-+++ b/Source/ThirdParty/gtest/test/gtest_xml_outfiles_test.py
-@@ -100,8 +100,8 @@ class GTestXMLOutFilesTest(gtest_xml_test_utils.GTestXMLTestCase):
- command = [gtest_prog_path, "--gtest_output=xml:%s" % self.output_dir_]
- p = gtest_test_utils.Subprocess(command,
- working_dir=gtest_test_utils.GetTempDir())
-- self.assert_(p.exited)
-- self.assertEquals(0, p.exit_code)
-+ self.assertTrue(p.exited)
-+ self.assertEqual(0, p.exit_code)
-
- # TODO(wan@google.com): libtool causes the built test binary to be
- # named lt-gtest_xml_outfiles_test_ instead of
-@@ -112,7 +112,7 @@ class GTestXMLOutFilesTest(gtest_xml_test_utils.GTestXMLTestCase):
- output_file1 = os.path.join(self.output_dir_, output_file_name1)
- output_file_name2 = 'lt-' + output_file_name1
- output_file2 = os.path.join(self.output_dir_, output_file_name2)
-- self.assert_(os.path.isfile(output_file1) or os.path.isfile(output_file2),
-+ self.assertTrue(os.path.isfile(output_file1) or os.path.isfile(output_file2),
- output_file1)
-
- expected = minidom.parseString(expected_xml)
-diff --git a/Source/ThirdParty/gtest/test/gtest_xml_output_unittest.py b/Source/ThirdParty/gtest/test/gtest_xml_output_unittest.py
-index 6d44929ca..93b67532e 100755
---- a/Source/ThirdParty/gtest/test/gtest_xml_output_unittest.py
-+++ b/Source/ThirdParty/gtest/test/gtest_xml_output_unittest.py
-@@ -145,16 +145,16 @@ class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase):
- "gtest_no_test_unittest")
- try:
- os.remove(output_file)
-- except OSError, e:
-+ except OSError as e:
- if e.errno != errno.ENOENT:
- raise
-
- p = gtest_test_utils.Subprocess(
- [gtest_prog_path, "%s=xml" % GTEST_OUTPUT_FLAG],
- working_dir=gtest_test_utils.GetTempDir())
-- self.assert_(p.exited)
-- self.assertEquals(0, p.exit_code)
-- self.assert_(os.path.isfile(output_file))
-+ self.assertTrue(p.exited)
-+ self.assertEqual(0, p.exit_code)
-+ self.assertTrue(os.path.isfile(output_file))
-
- def testSuppressedXmlOutput(self):
- """
-@@ -174,16 +174,16 @@ class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase):
- "--shut_down_xml"]
- p = gtest_test_utils.Subprocess(command)
- if p.terminated_by_signal:
-- self.assert_(False,
-+ self.assertTrue(False,
- "%s was killed by signal %d" % (gtest_prog_name, p.signal))
- else:
-- self.assert_(p.exited)
-- self.assertEquals(1, p.exit_code,
-+ self.assertTrue(p.exited)
-+ self.assertEqual(1, p.exit_code,
- "'%s' exited with code %s, which doesn't match "
- "the expected exit code %s."
- % (command, p.exit_code, 1))
-
-- self.assert_(not os.path.isfile(xml_path))
-+ self.assertTrue(not os.path.isfile(xml_path))
-
-
- def _TestXmlOutput(self, gtest_prog_name, expected_xml, expected_exit_code):
-@@ -200,11 +200,11 @@ class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase):
- command = [gtest_prog_path, "%s=xml:%s" % (GTEST_OUTPUT_FLAG, xml_path)]
- p = gtest_test_utils.Subprocess(command)
- if p.terminated_by_signal:
-- self.assert_(False,
-+ self.assertTrue(False,
- "%s was killed by signal %d" % (gtest_prog_name, p.signal))
- else:
-- self.assert_(p.exited)
-- self.assertEquals(expected_exit_code, p.exit_code,
-+ self.assertTrue(p.exited)
-+ self.assertEqual(expected_exit_code, p.exit_code,
- "'%s' exited with code %s, which doesn't match "
- "the expected exit code %s."
- % (command, p.exit_code, expected_exit_code))
-diff --git a/Source/ThirdParty/gtest/test/gtest_xml_test_utils.py b/Source/ThirdParty/gtest/test/gtest_xml_test_utils.py
-index c83c3b7ea..2d6afb359 100755
---- a/Source/ThirdParty/gtest/test/gtest_xml_test_utils.py
-+++ b/Source/ThirdParty/gtest/test/gtest_xml_test_utils.py
-@@ -67,37 +67,37 @@ class GTestXMLTestCase(gtest_test_utils.TestCase):
- """
-
- if expected_node.nodeType == Node.CDATA_SECTION_NODE:
-- self.assertEquals(Node.CDATA_SECTION_NODE, actual_node.nodeType)
-- self.assertEquals(expected_node.nodeValue, actual_node.nodeValue)
-+ self.assertEqual(Node.CDATA_SECTION_NODE, actual_node.nodeType)
-+ self.assertEqual(expected_node.nodeValue, actual_node.nodeValue)
- return
-
-- self.assertEquals(Node.ELEMENT_NODE, actual_node.nodeType)
-- self.assertEquals(Node.ELEMENT_NODE, expected_node.nodeType)
-- self.assertEquals(expected_node.tagName, actual_node.tagName)
-+ self.assertEqual(Node.ELEMENT_NODE, actual_node.nodeType)
-+ self.assertEqual(Node.ELEMENT_NODE, expected_node.nodeType)
-+ self.assertEqual(expected_node.tagName, actual_node.tagName)
-
- expected_attributes = expected_node.attributes
- actual_attributes = actual_node .attributes
-- self.assertEquals(
-+ self.assertEqual(
- expected_attributes.length, actual_attributes.length,
- "attribute numbers differ in element " + actual_node.tagName)
- for i in range(expected_attributes.length):
- expected_attr = expected_attributes.item(i)
- actual_attr = actual_attributes.get(expected_attr.name)
-- self.assert_(
-+ self.assertTrue(
- actual_attr is not None,
- "expected attribute %s not found in element %s" %
- (expected_attr.name, actual_node.tagName))
-- self.assertEquals(expected_attr.value, actual_attr.value,
-+ self.assertEqual(expected_attr.value, actual_attr.value,
- " values of attribute %s in element %s differ" %
- (expected_attr.name, actual_node.tagName))
-
- expected_children = self._GetChildren(expected_node)
- actual_children = self._GetChildren(actual_node)
-- self.assertEquals(
-+ self.assertEqual(
- len(expected_children), len(actual_children),
- "number of child elements differ in element " + actual_node.tagName)
-- for child_id, child in expected_children.iteritems():
-- self.assert_(child_id in actual_children,
-+ for child_id, child in expected_children.items():
-+ self.assertTrue(child_id in actual_children,
- '<%s> is not in <%s> (in element %s)' %
- (child_id, actual_children, actual_node.tagName))
- self.AssertEquivalentNodes(child, actual_children[child_id])
-@@ -125,10 +125,10 @@ class GTestXMLTestCase(gtest_test_utils.TestCase):
- children = {}
- for child in element.childNodes:
- if child.nodeType == Node.ELEMENT_NODE:
-- self.assert_(child.tagName in self.identifying_attribute,
-+ self.assertTrue(child.tagName in self.identifying_attribute,
- "Encountered unknown element <%s>" % child.tagName)
- childID = child.getAttribute(self.identifying_attribute[child.tagName])
-- self.assert_(childID not in children)
-+ self.assertTrue(childID not in children)
- children[childID] = child
- elif child.nodeType in [Node.TEXT_NODE, Node.CDATA_SECTION_NODE]:
- if "detail" not in children:
-diff --git a/Source/ThirdParty/gtest/test/run_tests_util.py b/Source/ThirdParty/gtest/test/run_tests_util.py
-index 9e57931eb..1f4d33af2 100755
---- a/Source/ThirdParty/gtest/test/run_tests_util.py
-+++ b/Source/ThirdParty/gtest/test/run_tests_util.py
-@@ -159,8 +159,8 @@ def _GetConfigFromBuildDir(build_dir):
- if m:
- return m.group(1)
- else:
-- print >>sys.stderr, ('%s is an invalid build directory that does not '
-- 'correspond to any configuration.' % (build_dir,))
-+ print(('%s is an invalid build directory that does not '
-+ 'correspond to any configuration.' % (build_dir,)), file=sys.stderr)
- return ''
-
-
-@@ -250,7 +250,7 @@ class TestRunner(object):
- # If this script is run on a Windows machine that has no association
- # between the .py extension and a python interpreter, simply passing
- # the script name into subprocess.Popen/os.spawn will not work.
-- print 'Running %s . . .' % (test,)
-+ print('Running %s . . .' % (test,))
- return self._Run([sys.executable, test])
-
- finally:
-@@ -308,7 +308,7 @@ class TestRunner(object):
- # A final list of build directories which will be searched for the test
- # binaries. First, add directories specified directly on the command
- # line.
-- build_dirs = filter(self.os.path.isdir, normalized_args)
-+ build_dirs = list(filter(self.os.path.isdir, normalized_args))
-
- # Adds build directories specified via their build configurations using
- # the -c or -a options.
-@@ -374,8 +374,8 @@ class TestRunner(object):
- config = _GetConfigFromBuildDir(directory)
- file_name = os.path.basename(test)
- if python_tests_to_skip and (config, file_name) in python_tests_to_skip:
-- print ('NOTE: %s is skipped for configuration %s, as it does not '
-- 'work there.' % (file_name, config))
-+ print(('NOTE: %s is skipped for configuration %s, as it does not '
-+ 'work there.' % (file_name, config)))
- else:
- python_test_pairs.append((directory, test))
-
-@@ -418,17 +418,17 @@ class TestRunner(object):
- failed = [(directory, test)
- for (directory, test, success) in results
- if not success]
-- print
-- print '%d tests run.' % len(results)
-+ print()
-+ print('%d tests run.' % len(results))
- if failed:
-- print 'The following %d tests failed:' % len(failed)
-+ print('The following %d tests failed:' % len(failed))
- for (directory, test) in failed:
-- print '%s in %s' % (test, directory)
-+ print('%s in %s' % (test, directory))
- return 1
- else:
-- print 'All tests passed!'
-+ print('All tests passed!')
- else: # No tests defined
-- print 'Nothing to test - no tests specified!'
-+ print('Nothing to test - no tests specified!')
-
- return 0
-
-@@ -440,7 +440,7 @@ def ParseArgs(project_name, argv=None, help_callback=None):
- # required by optparse, even though they are unused.
- # pylint: disable-msg=W0613
- def PrintHelp(option, opt, value, parser):
-- print HELP_MSG % {'proj': project_name}
-+ print(HELP_MSG % {'proj': project_name})
- sys.exit(1)
-
- parser = optparse.OptionParser()
-diff --git a/Source/ThirdParty/gtest/test/run_tests_util_test.py b/Source/ThirdParty/gtest/test/run_tests_util_test.py
-index 9c55726fd..dce27f3ae 100755
---- a/Source/ThirdParty/gtest/test/run_tests_util_test.py
-+++ b/Source/ThirdParty/gtest/test/run_tests_util_test.py
-@@ -144,7 +144,7 @@ class FakeOs(object):
- # pylint: disable-msg=C6409
- def listdir(self, path):
- assert self.path.isdir(path)
-- return self.path.PathElement(path).iterkeys()
-+ return iter(self.path.PathElement(path).keys())
-
- def spawnv(self, wait, executable, *kargs):
- assert wait == FakeOs.P_WAIT
-@@ -165,7 +165,7 @@ class GetTestsToRunTest(unittest.TestCase):
- def NormalizeBinaryTestPair(pair):
- """Normalizes path data in the (directory, binary_executable) pair."""
-
-- directory, executable = map(os.path.normpath, pair)
-+ directory, executable = list(map(os.path.normpath, pair))
-
- # On Windows and Cygwin, the test file names have the .exe extension, but
- # they can be invoked either by name or by name+extension. Our test must
-@@ -174,8 +174,8 @@ class GetTestsToRunTest(unittest.TestCase):
- executable = re.sub(r'\.exe$', '', executable)
- return (directory, executable)
-
-- python_tests = sets.Set(map(NormalizePythonTestPair, results[0]))
-- binary_tests = sets.Set(map(NormalizeBinaryTestPair, results[1]))
-+ python_tests = sets.Set(list(map(NormalizePythonTestPair, results[0])))
-+ binary_tests = sets.Set(list(map(NormalizeBinaryTestPair, results[1])))
- return (python_tests, binary_tests)
-
- def AssertResultsEqual(self, results, expected):
-@@ -472,7 +472,7 @@ class GetTestsToRunTest(unittest.TestCase):
- def testNonTestBinary(self):
- """Exercises GetTestsToRun with a non-test parameter."""
-
-- self.assert_(
-+ self.assertTrue(
- not self.test_runner.GetTestsToRun(
- ['gtest_unittest_not_really'],
- '',
-@@ -482,7 +482,7 @@ class GetTestsToRunTest(unittest.TestCase):
- def testNonExistingPythonTest(self):
- """Exercises GetTestsToRun with a non-existent Python test parameter."""
-
-- self.assert_(
-+ self.assertTrue(
- not self.test_runner.GetTestsToRun(
- ['nonexistent_test.py'],
- '',
-@@ -619,7 +619,7 @@ class ParseArgsTest(unittest.TestCase):
- def testNoOptions(self):
- options, args = run_tests_util.ParseArgs('gtest', argv=['script.py'])
- self.assertEqual(args, ['script.py'])
-- self.assert_(options.configurations is None)
-+ self.assertTrue(options.configurations is None)
- self.assertFalse(options.built_configurations)
-
- def testOptionC(self):
-@@ -638,7 +638,7 @@ class ParseArgsTest(unittest.TestCase):
- def testOptionB(self):
- options, args = run_tests_util.ParseArgs('gtest', argv=['script.py', '-b'])
- self.assertEqual(args, ['script.py'])
-- self.assert_(options.configurations is None)
-+ self.assertTrue(options.configurations is None)
- self.assertTrue(options.built_configurations)
-
- def testOptionCAndOptionB(self):
-diff --git a/Source/ThirdParty/gtest/xcode/Scripts/versiongenerate.py b/Source/ThirdParty/gtest/xcode/Scripts/versiongenerate.py
-index 81de8c96a..ea24f964c 100644
---- a/Source/ThirdParty/gtest/xcode/Scripts/versiongenerate.py
-+++ b/Source/ThirdParty/gtest/xcode/Scripts/versiongenerate.py
-@@ -54,7 +54,7 @@ import re
-
- # Read the command line argument (the output directory for Version.h)
- if (len(sys.argv) < 3):
-- print "Usage: versiongenerate.py input_dir output_dir"
-+ print("Usage: versiongenerate.py input_dir output_dir")
- sys.exit(1)
- else:
- input_dir = sys.argv[1]
-diff --git a/Source/WebCore/AVFoundationSupport.py b/Source/WebCore/AVFoundationSupport.py
-index 7f13a8742..a3ab479ad 100644
---- a/Source/WebCore/AVFoundationSupport.py
-+++ b/Source/WebCore/AVFoundationSupport.py
-@@ -42,22 +42,22 @@ def fileContains(relativePath, regexp):
- return False
-
-
--print "/* Identifying AVFoundation Support */"
-+print("/* Identifying AVFoundation Support */")
- if lookFor("/include/AVFoundationCF/AVCFBase.h"):
-- print "#define HAVE_AVCF 1"
-+ print("#define HAVE_AVCF 1")
- if lookFor("/include/AVFoundationCF/AVCFPlayerItemLegibleOutput.h"):
-- print "#define HAVE_AVCF_LEGIBLE_OUTPUT 1"
-+ print("#define HAVE_AVCF_LEGIBLE_OUTPUT 1")
- if lookFor("/include/AVFoundationCF/AVCFAssetResourceLoader.h"):
-- print "#define HAVE_AVFOUNDATION_LOADER_DELEGATE 1"
-+ print("#define HAVE_AVFOUNDATION_LOADER_DELEGATE 1")
- if lookFor("/include/AVFoundationCF/AVCFAsset.h"):
- regexp = re.compile("AVCFURLAssetIsPlayableExtendedMIMEType")
- if fileContains("/include/AVFoundationCF/AVCFAsset.h", regexp):
-- print "#define HAVE_AVCFURL_PLAYABLE_MIMETYPE 1"
-+ print("#define HAVE_AVCFURL_PLAYABLE_MIMETYPE 1")
- if lookFor("/include/QuartzCore/CACFLayer.h"):
- regexp = re.compile("CACFLayerSetContentsScale")
- if fileContains("/include/QuartzCore/CACFLayer.h", regexp):
-- print "#define HAVE_CACFLAYER_SETCONTENTSSCALE 1"
-+ print("#define HAVE_CACFLAYER_SETCONTENTSSCALE 1")
- if lookFor("/include/AVFoundationCF/AVCFPlayerItemLegibleOutput.h"):
- regexp = re.compile("kAVCFPlayerItemLegibleOutput_CallbacksVersion_2")
- if fileContains("/include/AVFoundationCF/AVCFPlayerItemLegibleOutput.h", regexp):
-- print "#define HAVE_AVCFPLAYERITEM_CALLBACK_VERSION_2 1"
-+ print("#define HAVE_AVCFPLAYERITEM_CALLBACK_VERSION_2 1")
-diff --git a/Source/WebCore/CMakeLists.txt b/Source/WebCore/CMakeLists.txt
-index 56b32563a..feac0dbbb 100644
---- a/Source/WebCore/CMakeLists.txt
-+++ b/Source/WebCore/CMakeLists.txt
-@@ -3671,14 +3671,14 @@ set(WebCore_BUILTINS_SOURCES
- )
-
- set(BUILTINS_GENERATOR_SCRIPTS
-- ${JavaScriptCore_SCRIPTS_DIR}/builtins.py
-- ${JavaScriptCore_SCRIPTS_DIR}/builtins_generator.py
-- ${JavaScriptCore_SCRIPTS_DIR}/builtins_model.py
-- ${JavaScriptCore_SCRIPTS_DIR}/builtins_templates.py
-- ${JavaScriptCore_SCRIPTS_DIR}/builtins_generate_combined_header.py
-- ${JavaScriptCore_SCRIPTS_DIR}/builtins_generate_combined_implementation.py
-- ${JavaScriptCore_SCRIPTS_DIR}/builtins_generate_separate_header.py
-- ${JavaScriptCore_SCRIPTS_DIR}/builtins_generate_separate_implementation.py
-+ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins.py
-+ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_generator.py
-+ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_model.py
-+ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_templates.py
-+ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_generate_combined_header.py
-+ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_generate_combined_implementation.py
-+ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_generate_separate_header.py
-+ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_generate_separate_implementation.py
- ${JavaScriptCore_SCRIPTS_DIR}/generate-js-builtins.py
- ${JavaScriptCore_SCRIPTS_DIR}/lazywriter.py
- )
-diff --git a/Source/WebCore/DerivedSources.make b/Source/WebCore/DerivedSources.make
-index 0f5a79fa4..83bf5f96a 100644
---- a/Source/WebCore/DerivedSources.make
-+++ b/Source/WebCore/DerivedSources.make
-@@ -1286,14 +1286,14 @@ WebCore_BUILTINS_SOURCES = \
- #
-
- BUILTINS_GENERATOR_SCRIPTS = \
-- $(JavaScriptCore_SCRIPTS_DIR)/builtins.py \
-- $(JavaScriptCore_SCRIPTS_DIR)/builtins_generator.py \
-- $(JavaScriptCore_SCRIPTS_DIR)/builtins_model.py \
-- $(JavaScriptCore_SCRIPTS_DIR)/builtins_templates.py \
-- $(JavaScriptCore_SCRIPTS_DIR)/builtins_generate_combined_header.py \
-- $(JavaScriptCore_SCRIPTS_DIR)/builtins_generate_combined_implementation.py \
-- $(JavaScriptCore_SCRIPTS_DIR)/builtins_generate_separate_header.py \
-- $(JavaScriptCore_SCRIPTS_DIR)/builtins_generate_separate_implementation.py \
-+ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins.py \
-+ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins_generator.py \
-+ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins_model.py \
-+ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins_templates.py \
-+ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins_generate_combined_header.py \
-+ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins_generate_combined_implementation.py \
-+ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins_generate_separate_header.py \
-+ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins_generate_separate_implementation.py \
- $(JavaScriptCore_SCRIPTS_DIR)/generate-js-builtins.py \
- $(JavaScriptCore_SCRIPTS_DIR)/lazywriter.py \
- #
-diff --git a/Source/WebCore/platform/network/create-http-header-name-table b/Source/WebCore/platform/network/create-http-header-name-table
-index 755d22e94..3dc57a568 100755
---- a/Source/WebCore/platform/network/create-http-header-name-table
-+++ b/Source/WebCore/platform/network/create-http-header-name-table
-@@ -41,7 +41,7 @@ input_file = open(input_path)
- http_header_name_to_id = { }
- http_header_names = []
-
--for line in input_file.xreadlines():
-+for line in input_file:
- http_header_name = line.strip()
- if not http_header_name or http_header_name[:2] == '//':
- continue
-diff --git a/Source/WebInspectorUI/Scripts/jsmin.py b/Source/WebInspectorUI/Scripts/jsmin.py
-index 372418b4d..2f9fddfce 100644
---- a/Source/WebInspectorUI/Scripts/jsmin.py
-+++ b/Source/WebInspectorUI/Scripts/jsmin.py
-@@ -23,17 +23,20 @@
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- # THE SOFTWARE.
-
-+# stolen from webkitgtk 2.26.2
-
- import sys
- is_3 = sys.version_info >= (3, 0)
- if is_3:
- import io
-+ python_text_type = str
- else:
- import StringIO
- try:
- import cStringIO
- except ImportError:
- cStringIO = None
-+ python_text_type = basestring
-
-
- __all__ = ['jsmin', 'JavascriptMinify']
-@@ -79,14 +82,18 @@ class JavascriptMinify(object):
- def write(char):
- # all of this is to support literal regular expressions.
- # sigh
-- if char in 'return':
-+ if str(char) in 'return':
- self.return_buf += char
- self.is_return = self.return_buf == 'return'
- self.outs.write(char)
- if self.is_return:
- self.return_buf = ''
-
-- read = self.ins.read
-+ def read(n):
-+ char = self.ins.read(n)
-+ if not isinstance(char, python_text_type):
-+ raise ValueError("ERROR: The script jsmin.py can only handle text input, but it received input of type %s" % type(char))
-+ return char
-
- space_strings = "abcdefghijklmnopqrstuvwxyz"\
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$\\"
-@@ -118,8 +125,8 @@ class JavascriptMinify(object):
- write(previous)
- elif not previous:
- return
-- elif previous >= '!':
-- if previous in "'\"":
-+ elif str(previous) >= "!":
-+ if str(previous) in "'\"":
- in_quote = previous
- write(previous)
- previous_non_space = previous
-@@ -166,7 +173,7 @@ class JavascriptMinify(object):
- if numslashes % 2 == 0:
- in_quote = ''
- write(''.join(quote_buf))
-- elif next1 in '\r\n':
-+ elif str(next1) in '\r\n':
- if previous_non_space in newlineend_strings \
- or previous_non_space > '~':
- while 1:
-@@ -179,7 +186,7 @@ class JavascriptMinify(object):
- or next2 > '~' or next2 == '/':
- do_newline = True
- break
-- elif next1 < '!' and not in_re:
-+ elif str(next1) < '!' and not in_re:
- if (previous_non_space in space_strings \
- or previous_non_space > '~') \
- and (next2 in space_strings or next2 > '~'):
-@@ -217,14 +224,14 @@ class JavascriptMinify(object):
- do_newline = False
-
- write(next1)
-- if not in_re and next1 in "'\"`":
-+ if not in_re and str(next1) in "'\"`":
- in_quote = next1
- quote_buf = []
-
- previous = next1
- next1 = next2
-
-- if previous >= '!':
-+ if str(previous) >= '!':
- previous_non_space = previous
-
- if previous == '\\':
-diff --git a/Source/WebKit2/Scripts/generate-message-receiver.py b/Source/WebKit2/Scripts/generate-message-receiver.py
-index 6413a8bf3..8702117f0 100644
---- a/Source/WebKit2/Scripts/generate-message-receiver.py
-+++ b/Source/WebKit2/Scripts/generate-message-receiver.py
-@@ -22,7 +22,7 @@
- # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
--from __future__ import with_statement
-+
- import sys
-
- import webkit.messages
-diff --git a/Source/WebKit2/Scripts/generate-messages-header.py b/Source/WebKit2/Scripts/generate-messages-header.py
-index ad73a5283..b35ee7d51 100644
---- a/Source/WebKit2/Scripts/generate-messages-header.py
-+++ b/Source/WebKit2/Scripts/generate-messages-header.py
-@@ -22,7 +22,7 @@
- # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
--from __future__ import with_statement
-+
- import sys
-
- import webkit.messages
-diff --git a/Source/WebKit2/Scripts/webkit/messages_unittest.py b/Source/WebKit2/Scripts/webkit/messages_unittest.py
-index 164199fc2..5f58e1919 100644
---- a/Source/WebKit2/Scripts/webkit/messages_unittest.py
-+++ b/Source/WebKit2/Scripts/webkit/messages_unittest.py
-@@ -24,7 +24,7 @@ import os
- import re
- import sys
- import unittest
--from StringIO import StringIO
-+from io import StringIO
-
- sys.path.append(os.path.dirname(os.path.dirname(__file__)))
- from webkit import messages
-@@ -255,43 +255,43 @@ class MessagesTest(unittest.TestCase):
-
- class ParsingTest(MessagesTest):
- def check_message(self, message, expected_message):
-- self.assertEquals(message.name, expected_message['name'])
-- self.assertEquals(len(message.parameters), len(expected_message['parameters']))
-+ self.assertEqual(message.name, expected_message['name'])
-+ self.assertEqual(len(message.parameters), len(expected_message['parameters']))
- for index, parameter in enumerate(message.parameters):
- expected_parameter = expected_message['parameters'][index]
-- self.assertEquals(parameter.type, expected_parameter[0])
-- self.assertEquals(parameter.name, expected_parameter[1])
-+ self.assertEqual(parameter.type, expected_parameter[0])
-+ self.assertEqual(parameter.name, expected_parameter[1])
- if len(expected_parameter) > 2:
-- self.assertEquals(parameter.attributes, frozenset(expected_parameter[2]))
-+ self.assertEqual(parameter.attributes, frozenset(expected_parameter[2]))
- for attribute in expected_parameter[2]:
- self.assertTrue(parameter.has_attribute(attribute))
- else:
-- self.assertEquals(parameter.attributes, frozenset())
-+ self.assertEqual(parameter.attributes, frozenset())
- if message.reply_parameters is not None:
- for index, parameter in enumerate(message.reply_parameters):
-- self.assertEquals(parameter.type, expected_message['reply_parameters'][index][0])
-- self.assertEquals(parameter.name, expected_message['reply_parameters'][index][1])
-+ self.assertEqual(parameter.type, expected_message['reply_parameters'][index][0])
-+ self.assertEqual(parameter.name, expected_message['reply_parameters'][index][1])
- else:
- self.assertFalse('reply_parameters' in expected_message)
-- self.assertEquals(message.condition, expected_message['conditions'])
-+ self.assertEqual(message.condition, expected_message['conditions'])
-
- def test_receiver(self):
- """Receiver should be parsed as expected"""
-- self.assertEquals(self.receiver.name, _expected_results['name'])
-- self.assertEquals(self.receiver.condition, _expected_results['conditions'])
-- self.assertEquals(len(self.receiver.messages), len(_expected_results['messages']))
-+ self.assertEqual(self.receiver.name, _expected_results['name'])
-+ self.assertEqual(self.receiver.condition, _expected_results['conditions'])
-+ self.assertEqual(len(self.receiver.messages), len(_expected_results['messages']))
- for index, message in enumerate(self.receiver.messages):
- self.check_message(message, _expected_results['messages'][index])
-
-- self.assertEquals(self.legacy_receiver.name, _expected_results['name'])
-- self.assertEquals(self.legacy_receiver.condition, _expected_results['conditions'])
-- self.assertEquals(len(self.legacy_receiver.messages), len(_expected_results['messages']))
-+ self.assertEqual(self.legacy_receiver.name, _expected_results['name'])
-+ self.assertEqual(self.legacy_receiver.condition, _expected_results['conditions'])
-+ self.assertEqual(len(self.legacy_receiver.messages), len(_expected_results['messages']))
- for index, message in enumerate(self.legacy_receiver.messages):
- self.check_message(message, _expected_results['messages'][index])
-
-- self.assertEquals(self.superclass_receiver.name, _expected_superclass_results['name'])
-- self.assertEquals(self.superclass_receiver.superclass, _expected_superclass_results['superclass'])
-- self.assertEquals(len(self.superclass_receiver.messages), len(_expected_superclass_results['messages']))
-+ self.assertEqual(self.superclass_receiver.name, _expected_superclass_results['name'])
-+ self.assertEqual(self.superclass_receiver.superclass, _expected_superclass_results['superclass'])
-+ self.assertEqual(len(self.superclass_receiver.messages), len(_expected_superclass_results['messages']))
- for index, message in enumerate(self.superclass_receiver.messages):
- self.check_message(message, _expected_superclass_results['messages'][index])
-
-@@ -309,9 +309,9 @@ class GeneratedFileContentsTest(unittest.TestCase):
- expected_line_list = expected_file_contents.splitlines(False)
-
- for index, actual_line in enumerate(actual_line_list):
-- self.assertEquals(actual_line, expected_line_list[index])
-+ self.assertEqual(actual_line, expected_line_list[index])
-
-- self.assertEquals(len(actual_line_list), len(expected_line_list))
-+ self.assertEqual(len(actual_line_list), len(expected_line_list))
-
- def assertHeaderEqual(self, input_messages_file_contents, expected_file_name):
- actual_file_contents = messages.generate_messages_header(StringIO(input_messages_file_contents))
-@@ -344,11 +344,11 @@ class ReceiverImplementationTest(GeneratedFileContentsTest):
-
- class UnsupportedPrecompilerDirectiveTest(unittest.TestCase):
- def test_error_at_else(self):
-- with self.assertRaisesRegexp(Exception, r"ERROR: '#else.*' is not supported in the \*\.in files"):
-+ with self.assertRaisesRegex(Exception, r"ERROR: '#else.*' is not supported in the \*\.in files"):
- messages.generate_message_handler(StringIO("asd\n#else bla\nfoo"))
-
- def test_error_at_elif(self):
-- with self.assertRaisesRegexp(Exception, r"ERROR: '#elif.*' is not supported in the \*\.in files"):
-+ with self.assertRaisesRegex(Exception, r"ERROR: '#elif.*' is not supported in the \*\.in files"):
- messages.generate_message_handler(StringIO("asd\n#elif bla\nfoo"))
-
-
-diff --git a/Source/cmake/WebKitCommon.cmake b/Source/cmake/WebKitCommon.cmake
-index de4ac8f65..1ba7b58ea 100644
---- a/Source/cmake/WebKitCommon.cmake
-+++ b/Source/cmake/WebKitCommon.cmake
-@@ -25,9 +25,6 @@ if (NOT HAS_RUN_WEBKIT_COMMON)
- find_package(Perl 5.10.0 REQUIRED)
-
- find_package(PythonInterp 2.7.0 REQUIRED)
-- if (PYTHON_VERSION_MAJOR GREATER 2)
-- message(FATAL_ERROR "Python 2 is required, but Python ${PYTHON_VERSION_MAJOR} was found.")
-- endif ()
-
- # We cannot check for RUBY_FOUND because it is set only when the full package is installed and
- # the only thing we need is the interpreter. Unlike Python, cmake does not provide a macro
-diff --git a/Tools/jhbuild/jhbuildutils.py b/Tools/jhbuild/jhbuildutils.py
-index c00160e7e..f4edc29a2 100644
---- a/Tools/jhbuild/jhbuildutils.py
-+++ b/Tools/jhbuild/jhbuildutils.py
-@@ -1,7 +1,7 @@
- import glob
- import os.path
- import sys
--import __builtin__
-+import builtins
-
- top_level_dir = None
-
-@@ -35,9 +35,9 @@ def enter_jhbuild_environment_if_available(platform):
- sys.path.insert(0, source_path)
-
- # When loading jhbuild from the source checkout it fails if the SRCDIR, PKGDATADIR or DATADIR aren't present.
-- __builtin__.__dict__['SRCDIR'] = source_path
-- __builtin__.__dict__['PKGDATADIR'] = None
-- __builtin__.__dict__['DATADIR'] = None
-+ builtins.__dict__['SRCDIR'] = source_path
-+ builtins.__dict__['PKGDATADIR'] = None
-+ builtins.__dict__['DATADIR'] = None
-
- # We don't know the Python version, so we just assume that we can safely take the first one in the list.
- site_packages_path = glob.glob(os.path.join(get_dependencies_path(platform), "Root", "lib", "*", "site-packages"))
-@@ -49,7 +49,7 @@ def enter_jhbuild_environment_if_available(platform):
- import jhbuild.config
- from jhbuild.errors import FatalError
- config = jhbuild.config.Config(get_config_file_for_platform(platform), [])
-- except FatalError, exception:
-+ except FatalError as exception:
- sys.stderr.write('Could not load jhbuild config file: %s\n' % exception.args[0])
- return False
-
---
-2.21.0
-
diff --git a/recipes-qt/qt5/qtwebkit/0003-Fix-build-with-non-glibc-libc-on-musl.patch b/recipes-qt/qt5/qtwebkit/0002-Fix-build-with-non-glibc-libc-on-musl.patch
index bf79b363..bf79b363 100644
--- a/recipes-qt/qt5/qtwebkit/0003-Fix-build-with-non-glibc-libc-on-musl.patch
+++ b/recipes-qt/qt5/qtwebkit/0002-Fix-build-with-non-glibc-libc-on-musl.patch
diff --git a/recipes-qt/qt5/qtwebkit/0004-Fix-build-bug-for-armv32-BE.patch b/recipes-qt/qt5/qtwebkit/0003-Fix-build-bug-for-armv32-BE.patch
index ffd8da0f..ffd8da0f 100644
--- a/recipes-qt/qt5/qtwebkit/0004-Fix-build-bug-for-armv32-BE.patch
+++ b/recipes-qt/qt5/qtwebkit/0003-Fix-build-bug-for-armv32-BE.patch
diff --git a/recipes-qt/qt5/qtwebkit/0005-PlatformQt.cmake-Do-not-generate-hardcoded-include-p.patch b/recipes-qt/qt5/qtwebkit/0004-PlatformQt.cmake-Do-not-generate-hardcoded-include-p.patch
index 14cb8aa4..14cb8aa4 100644
--- a/recipes-qt/qt5/qtwebkit/0005-PlatformQt.cmake-Do-not-generate-hardcoded-include-p.patch
+++ b/recipes-qt/qt5/qtwebkit/0004-PlatformQt.cmake-Do-not-generate-hardcoded-include-p.patch
diff --git a/recipes-qt/qt5/qtwebkit/0005-Riscv-Add-support-for-riscv.patch b/recipes-qt/qt5/qtwebkit/0005-Riscv-Add-support-for-riscv.patch
new file mode 100644
index 00000000..2bfb72fe
--- /dev/null
+++ b/recipes-qt/qt5/qtwebkit/0005-Riscv-Add-support-for-riscv.patch
@@ -0,0 +1,83 @@
+From b5a58d2c001689b07591fdce8820773d57a74002 Mon Sep 17 00:00:00 2001
+From: Chenxi Mao <chenxi.mao2013@gmail.com>
+Date: Fri, 3 Apr 2020 08:33:10 +0800
+Subject: [PATCH 1/1] Riscv: Add support for riscv
+
+---
+ CMakeLists.txt | 2 ++
+ Source/JavaScriptCore/CMakeLists.txt | 1 +
+ Source/WTF/wtf/Platform.h | 12 ++++++++++--
+ Source/WTF/wtf/dtoa/utils.h | 2 +-
+ 4 files changed, 14 insertions(+), 3 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 31a2ea1fd..516476729 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -83,6 +83,8 @@ elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "s390")
+ set(WTF_CPU_S390 1)
+ elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "s390x")
+ set(WTF_CPU_S390X 1)
++elseif (LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "riscv64")
++ set(WTF_CPU_RISCV64 1)
+ else ()
+ message(FATAL_ERROR "Unknown CPU '${LOWERCASE_CMAKE_SYSTEM_PROCESSOR}'")
+ endif ()
+diff --git a/Source/JavaScriptCore/CMakeLists.txt b/Source/JavaScriptCore/CMakeLists.txt
+index 937b3ed00..2fff29f9d 100644
+--- a/Source/JavaScriptCore/CMakeLists.txt
++++ b/Source/JavaScriptCore/CMakeLists.txt
+@@ -1286,6 +1286,7 @@ elseif (WTF_CPU_S390)
+ elseif (WTF_CPU_S390X)
+ elseif (WTF_CPU_MIPS)
+ elseif (WTF_CPU_SH4)
++elseif (WTF_CPU_RISCV64)
+ elseif (WTF_CPU_X86)
+ elseif (WTF_CPU_X86_64)
+ if (MSVC AND ENABLE_JIT)
+diff --git a/Source/WTF/wtf/Platform.h b/Source/WTF/wtf/Platform.h
+index 5717f3ea1..8fac85f72 100644
+--- a/Source/WTF/wtf/Platform.h
++++ b/Source/WTF/wtf/Platform.h
+@@ -349,7 +349,14 @@
+
+ #endif /* ARM */
+
+-#if CPU(ARM) || CPU(MIPS) || CPU(SH4) || CPU(ALPHA) || CPU(HPPA)
++#if defined(__riscv)
++#define WTF_CPU_RISCV 1
++#if __riscv_xlen == 64
++#define WTF_CPU_RISCV64 1
++#endif
++#endif
++
++#if CPU(ARM) || CPU(MIPS) || CPU(SH4) || CPU(ALPHA) || CPU(HPPA) || CPU(RISCV)
+ #define WTF_CPU_NEEDS_ALIGNED_ACCESS 1
+ #endif
+
+@@ -707,7 +714,8 @@
+ || CPU(S390X) \
+ || CPU(MIPS64) \
+ || CPU(PPC64) \
+- || CPU(PPC64LE)
++ || CPU(PPC64LE) \
++ || CPU(RISCV64)
+ #define USE_JSVALUE64 1
+ #else
+ #define USE_JSVALUE32_64 1
+diff --git a/Source/WTF/wtf/dtoa/utils.h b/Source/WTF/wtf/dtoa/utils.h
+index 05302e6e6..25dd352ee 100644
+--- a/Source/WTF/wtf/dtoa/utils.h
++++ b/Source/WTF/wtf/dtoa/utils.h
+@@ -49,7 +49,7 @@
+ defined(__ARMEL__) || \
+ defined(_MIPS_ARCH_MIPS32R2)
+ #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
+-#elif CPU(MIPS) || CPU(MIPS64) || CPU(PPC) || CPU(PPC64) || CPU(PPC64LE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(ALPHA) || CPU(ARM64) || CPU(HPPA) || CPU(ARM)
++#elif CPU(MIPS) || CPU(MIPS64) || CPU(PPC) || CPU(PPC64) || CPU(PPC64LE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(ALPHA) || CPU(ARM64) || CPU(HPPA) || CPU(ARM) || CPU(RISCV)
+ #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
+ #elif defined(_M_IX86) || defined(__i386__)
+ #if defined(_WIN32)
+--
+2.17.1
+
diff --git a/recipes-qt/qt5/qtwebkit_git.bb b/recipes-qt/qt5/qtwebkit_git.bb
index 4655d9fd..8fd2aee8 100644
--- a/recipes-qt/qt5/qtwebkit_git.bb
+++ b/recipes-qt/qt5/qtwebkit_git.bb
@@ -12,11 +12,11 @@ DEPENDS += "qtbase qtdeclarative icu ruby-native sqlite3 glib-2.0 libxslt gperf-
# Patches from https://github.com/meta-qt5/qtwebkit/commits/b5.13
# 5.13.meta-qt5.1
SRC_URI += "\
- file://0001-Port-build-to-python3.patch \
- file://0002-Do-not-skip-build-for-cross-compile.patch \
- file://0003-Fix-build-with-non-glibc-libc-on-musl.patch \
- file://0004-Fix-build-bug-for-armv32-BE.patch \
- file://0005-PlatformQt.cmake-Do-not-generate-hardcoded-include-p.patch \
+ file://0001-Do-not-skip-build-for-cross-compile.patch \
+ file://0002-Fix-build-with-non-glibc-libc-on-musl.patch \
+ file://0003-Fix-build-bug-for-armv32-BE.patch \
+ file://0004-PlatformQt.cmake-Do-not-generate-hardcoded-include-p.patch \
+ file://0005-Riscv-Add-support-for-riscv.patch \
"
inherit cmake_qt5 perlnative
@@ -53,9 +53,11 @@ EXTRA_OECMAKE += " \
EXTRA_OECMAKE_append_toolchain-clang = " -DCMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES:PATH='${STAGING_INCDIR}'"
-# JIT not supported on MIPS/PPC
+# JIT not supported on MIPS/PPC/RISCV
EXTRA_OECMAKE_append_mipsarch = " -DENABLE_JIT=OFF -DENABLE_C_LOOP=ON "
EXTRA_OECMAKE_append_powerpc = " -DENABLE_JIT=OFF -DENABLE_C_LOOP=ON "
+EXTRA_OECMAKE_append_riscv64 = " -DENABLE_JIT=OFF -DENABLE_C_LOOP=ON "
+
# Disable gold on mips64/clang
# mips64-yoe-linux-musl-ld.gold: internal error in get_got_page_offset, at ../../gold/mips.cc:6260
# mips-yoe-linux-musl-ld.gold: error: Can't find matching LO16 reloc
@@ -81,6 +83,6 @@ PACKAGECONFIG[hyphen] = "-DUSE_LIBHYPHEN=ON,-DUSE_LIBHYPHEN=OFF,hyphen"
# remove default ${PN}-examples* set in qt5.inc, because they conflicts with ${PN} from separate webkit-examples recipe
PACKAGES_remove = "${PN}-examples"
-QT_MODULE_BRANCH = "dev"
+QT_MODULE_BRANCH = "5.212"
-SRCREV = "ab1bd15209abaf7effc51dbc2f272c5681af7223"
+SRCREV = "444bd2bda5fa46c2b4b99adaf6e9b2074b03a0d1"
diff --git a/recipes-qt/qwt/qwt-qt5/0001-fix-qpainterpath-build-issues.patch b/recipes-qt/qwt/qwt-qt5/0001-fix-qpainterpath-build-issues.patch
new file mode 100644
index 00000000..71a5c7ba
--- /dev/null
+++ b/recipes-qt/qwt/qwt-qt5/0001-fix-qpainterpath-build-issues.patch
@@ -0,0 +1,228 @@
+From 4f432cfcb19f41e6a4ec8d3c7f871f66e461fb63 Mon Sep 17 00:00:00 2001
+From: Mikko Gronoff <mikko.gronoff@qt.io>
+Date: Thu, 12 Mar 2020 13:14:29 +0200
+Subject: [PATCH] fix qpainterpath build issues
+
+---
+ examples/dials/attitude_indicator.cpp | 1 +
+ examples/itemeditor/editor.cpp | 1 +
+ examples/sinusplot/sinusplot.cpp | 1 +
+ src/qwt_compass_rose.cpp | 1 +
+ src/qwt_dial_needle.cpp | 1 +
+ src/qwt_null_paintdevice.cpp | 1 +
+ src/qwt_painter.cpp | 1 +
+ src/qwt_painter_command.cpp | 1 +
+ src/qwt_painter_command.h | 1 +
+ src/qwt_picker.cpp | 1 +
+ src/qwt_plot_canvas.cpp | 1 +
+ src/qwt_plot_glcanvas.cpp | 1 +
+ src/qwt_plot_glcanvas.h | 1 +
+ src/qwt_plot_panner.cpp | 1 +
+ src/qwt_plot_renderer.cpp | 1 +
+ src/qwt_plot_shapeitem.cpp | 1 +
+ src/qwt_widget_overlay.cpp | 1 +
+ 17 files changed, 17 insertions(+)
+
+diff --git a/examples/dials/attitude_indicator.cpp b/examples/dials/attitude_indicator.cpp
+index ea0d5ab..a01611e 100644
+--- a/examples/dials/attitude_indicator.cpp
++++ b/examples/dials/attitude_indicator.cpp
+@@ -3,6 +3,7 @@
+ #include <qwt_round_scale_draw.h>
+ #include <qevent.h>
+ #include <qpainter.h>
++#include <qpainterpath.h>
+ #include <qpolygon.h>
+
+ AttitudeIndicatorNeedle::AttitudeIndicatorNeedle( const QColor &color )
+diff --git a/examples/itemeditor/editor.cpp b/examples/itemeditor/editor.cpp
+index bd06372..7c4a6ef 100644
+--- a/examples/itemeditor/editor.cpp
++++ b/examples/itemeditor/editor.cpp
+@@ -4,6 +4,7 @@
+ #include <qwt_scale_map.h>
+ #include <qwt_plot_shapeitem.h>
+ #include <qevent.h>
++#include <qpainterpath.h>
+
+ class Overlay: public QwtWidgetOverlay
+ {
+diff --git a/examples/sinusplot/sinusplot.cpp b/examples/sinusplot/sinusplot.cpp
+index 119fa4a..6a9bfe7 100644
+--- a/examples/sinusplot/sinusplot.cpp
++++ b/examples/sinusplot/sinusplot.cpp
+@@ -1,5 +1,6 @@
+ #include <qapplication.h>
+ #include <qlayout.h>
++#include <qpainterpath.h>
+ #include <qwt_plot.h>
+ #include <qwt_plot_marker.h>
+ #include <qwt_plot_curve.h>
+diff --git a/src/qwt_compass_rose.cpp b/src/qwt_compass_rose.cpp
+index 05f7039..fbd30fe 100644
+--- a/src/qwt_compass_rose.cpp
++++ b/src/qwt_compass_rose.cpp
+@@ -11,6 +11,7 @@
+ #include "qwt_point_polar.h"
+ #include "qwt_painter.h"
+ #include <qpainter.h>
++#include <qpainterpath.h>
+
+ static QPointF qwtIntersection(
+ QPointF p11, QPointF p12, QPointF p21, QPointF p22 )
+diff --git a/src/qwt_dial_needle.cpp b/src/qwt_dial_needle.cpp
+index 49dd44a..d98f68c 100644
+--- a/src/qwt_dial_needle.cpp
++++ b/src/qwt_dial_needle.cpp
+@@ -13,6 +13,7 @@
+ #include "qwt_painter.h"
+ #include <qapplication.h>
+ #include <qpainter.h>
++#include <qpainterpath.h>
+
+ #if QT_VERSION < 0x040601
+ #define qFastSin(x) qSin(x)
+diff --git a/src/qwt_null_paintdevice.cpp b/src/qwt_null_paintdevice.cpp
+index 3baf0e9..468a838 100644
+--- a/src/qwt_null_paintdevice.cpp
++++ b/src/qwt_null_paintdevice.cpp
+@@ -9,6 +9,7 @@
+
+ #include "qwt_null_paintdevice.h"
+ #include <qpaintengine.h>
++#include <qpainterpath.h>
+ #include <qpixmap.h>
+
+ class QwtNullPaintDevice::PrivateData
+diff --git a/src/qwt_painter.cpp b/src/qwt_painter.cpp
+index 7959fe5..626677f 100644
+--- a/src/qwt_painter.cpp
++++ b/src/qwt_painter.cpp
+@@ -17,6 +17,7 @@
+ #include <qframe.h>
+ #include <qrect.h>
+ #include <qpainter.h>
++#include <qpainterpath.h>
+ #include <qpalette.h>
+ #include <qpaintdevice.h>
+ #include <qpixmap.h>
+diff --git a/src/qwt_painter_command.cpp b/src/qwt_painter_command.cpp
+index 39faca9..fcd068d 100644
+--- a/src/qwt_painter_command.cpp
++++ b/src/qwt_painter_command.cpp
+@@ -7,6 +7,7 @@
+ * modify it under the terms of the Qwt License, Version 1.0
+ *****************************************************************************/
+
++#include <qpainterpath.h>
+ #include "qwt_painter_command.h"
+
+ //! Construct an invalid command
+diff --git a/src/qwt_painter_command.h b/src/qwt_painter_command.h
+index a2f509a..fab52a8 100644
+--- a/src/qwt_painter_command.h
++++ b/src/qwt_painter_command.h
+@@ -12,6 +12,7 @@
+
+ #include "qwt_global.h"
+ #include <qpaintengine.h>
++#include <qpainterpath.h>
+ #include <qpixmap.h>
+ #include <qimage.h>
+ #include <qpolygon.h>
+diff --git a/src/qwt_picker.cpp b/src/qwt_picker.cpp
+index dfd7e9b..3e20578 100644
+--- a/src/qwt_picker.cpp
++++ b/src/qwt_picker.cpp
+@@ -15,6 +15,7 @@
+ #include <qapplication.h>
+ #include <qevent.h>
+ #include <qpainter.h>
++#include <qpainterpath.h>
+ #include <qframe.h>
+ #include <qcursor.h>
+ #include <qbitmap.h>
+diff --git a/src/qwt_plot_canvas.cpp b/src/qwt_plot_canvas.cpp
+index 9438f15..bfe660d 100644
+--- a/src/qwt_plot_canvas.cpp
++++ b/src/qwt_plot_canvas.cpp
+@@ -13,6 +13,7 @@
+ #include "qwt_math.h"
+ #include "qwt_plot.h"
+ #include <qpainter.h>
++#include <qpainterpath.h>
+ #include <qstyle.h>
+ #include <qstyleoption.h>
+ #include <qpaintengine.h>
+diff --git a/src/qwt_plot_glcanvas.cpp b/src/qwt_plot_glcanvas.cpp
+index 996c0ad..6975863 100644
+--- a/src/qwt_plot_glcanvas.cpp
++++ b/src/qwt_plot_glcanvas.cpp
+@@ -12,6 +12,7 @@
+ #include "qwt_painter.h"
+ #include <qevent.h>
+ #include <qpainter.h>
++#include <qpainterpath.h>
+ #include <qdrawutil.h>
+ #include <qstyle.h>
+ #include <qstyleoption.h>
+diff --git a/src/qwt_plot_glcanvas.h b/src/qwt_plot_glcanvas.h
+index 7ca9b5a..a2dfeda 100644
+--- a/src/qwt_plot_glcanvas.h
++++ b/src/qwt_plot_glcanvas.h
+@@ -12,6 +12,7 @@
+
+ #include "qwt_global.h"
+ #include <qframe.h>
++#include <qpainterpath.h>
+ #include <qgl.h>
+
+ class QwtPlot;
+diff --git a/src/qwt_plot_panner.cpp b/src/qwt_plot_panner.cpp
+index b7daa05..59bd2df 100644
+--- a/src/qwt_plot_panner.cpp
++++ b/src/qwt_plot_panner.cpp
+@@ -12,6 +12,7 @@
+ #include "qwt_plot.h"
+ #include "qwt_painter.h"
+ #include <qbitmap.h>
++#include <qpainterpath.h>
+ #include <qstyle.h>
+ #include <qstyleoption.h>
+
+diff --git a/src/qwt_plot_renderer.cpp b/src/qwt_plot_renderer.cpp
+index 549c4bc..71cadec 100644
+--- a/src/qwt_plot_renderer.cpp
++++ b/src/qwt_plot_renderer.cpp
+@@ -20,6 +20,7 @@
+ #include "qwt_math.h"
+
+ #include <qpainter.h>
++#include <qpainterpath.h>
+ #include <qtransform.h>
+ #include <qprinter.h>
+ #include <qfiledialog.h>
+diff --git a/src/qwt_plot_shapeitem.cpp b/src/qwt_plot_shapeitem.cpp
+index db7896b..56bc208 100644
+--- a/src/qwt_plot_shapeitem.cpp
++++ b/src/qwt_plot_shapeitem.cpp
+@@ -7,6 +7,7 @@
+ * modify it under the terms of the Qwt License, Version 1.0
+ *****************************************************************************/
+
++#include <qpainterpath.h>
+ #include "qwt_plot_shapeitem.h"
+ #include "qwt_scale_map.h"
+ #include "qwt_painter.h"
+diff --git a/src/qwt_widget_overlay.cpp b/src/qwt_widget_overlay.cpp
+index 5974413..fa6da48 100644
+--- a/src/qwt_widget_overlay.cpp
++++ b/src/qwt_widget_overlay.cpp
+@@ -10,6 +10,7 @@
+ #include "qwt_widget_overlay.h"
+ #include "qwt_painter.h"
+ #include <qpainter.h>
++#include <qpainterpath.h>
+ #include <qpaintengine.h>
+ #include <qimage.h>
+ #include <qevent.h>
diff --git a/recipes-qt/qwt/qwt-qt5_6.1.4.bb b/recipes-qt/qwt/qwt-qt5_6.1.4.bb
index 623b45e5..682ab566 100644
--- a/recipes-qt/qwt/qwt-qt5_6.1.4.bb
+++ b/recipes-qt/qwt/qwt-qt5_6.1.4.bb
@@ -16,6 +16,7 @@ inherit qmake5
SRC_URI = " \
${SOURCEFORGE_MIRROR}/qwt/qwt-${PV}.tar.bz2;name=qwt \
file://0001-Remove-rpath-from-binaries-they-point-to-buuild-area.patch \
+ file://0001-fix-qpainterpath-build-issues.patch \
"
SRC_URI[qwt.md5sum] = "4fb1852f694420e3ab9c583526edecc5"
SRC_URI[qwt.sha256sum] = "1529215329e51fc562e0009505a838f427919a18b362afff441f035b2d9b5bd9"