Add revision: v1.18.0

1.18 1.18.0
Governikus 2019-09-30 17:22:19 +02:00
parent 9484181f86
commit fb0491a6cb
1501 changed files with 37408 additions and 18258 deletions

View File

@ -4,7 +4,7 @@
# cmake --build . --target architecture
########################################
SET(GRAPHVIZ_IGNORE_TARGETS AusweisAppGlobal;AusweisAppExternal;AusweisAppUiCli;cvc;fuzz;OpenSsl;tlscheck;Test;Script)
SET(GRAPHVIZ_IGNORE_TARGETS AusweisAppGlobal;AusweisAppExternal;cvc;fuzz;OpenSsl;tlscheck;Test;Script)
SET(GRAPHVIZ_EXTERNAL_LIBS OFF)
SET(GRAPHVIZ_EXECUTABLES ON)
SET(GRAPHVIZ_GENERATE_PER_TARGET OFF)

View File

@ -1,4 +1,4 @@
CMAKE_MINIMUM_REQUIRED(VERSION 3.5.0)
CMAKE_MINIMUM_REQUIRED(VERSION 3.8.0)
IF(POLICY CMP0020)
CMAKE_POLICY(SET CMP0020 NEW)
@ -37,7 +37,7 @@ ELSE()
ENDIF()
PROJECT(AusweisApp2 VERSION 1.16.2 LANGUAGES ${LANGUAGES})
PROJECT(AusweisApp2 VERSION 1.18.0 LANGUAGES ${LANGUAGES})
# Set TWEAK if not defined in PROJECT_VERSION above to
# have a valid tweak version without propagating it
@ -49,7 +49,8 @@ ENDIF()
IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
SET(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/dist" CACHE PATH "default install path" FORCE)
ENDIF()
SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
SET(CMAKE_DIR "${PROJECT_SOURCE_DIR}/cmake")
SET(CMAKE_MODULE_PATH "${CMAKE_DIR}")
OPTION(BUILD_SHARED_LIBS "Enable build of shared libraries")
INCLUDE(Helper)
@ -133,7 +134,7 @@ ADD_SUBDIRECTORY(src)
IF("${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
INCLUDE(CTest)
CONFIGURE_FILE("${CMAKE_MODULE_PATH}/CTestCustom.cmake.in" "${CMAKE_BINARY_DIR}/CTestCustom.cmake" @ONLY)
CONFIGURE_FILE("${CMAKE_DIR}/CTestCustom.cmake.in" "${CMAKE_BINARY_DIR}/CTestCustom.cmake" @ONLY)
CONFIGURE_FILE("${RESOURCES_DIR}/sonar-project.properties.in" "${CMAKE_BINARY_DIR}/sonar-project.properties" @ONLY)
ENDIF()

View File

@ -1,50 +1,7 @@
Nutzungsbedingungen
Allgemeines zur Installation
Bitte lesen Sie zunächst die Lizenzbestimmungen und deren Ergänzungen für die Überlassung und Nutzung der AusweisApp2 durch. Nachdem Sie diesen zugestimmt haben, können Sie die Installation fortsetzen. Datenschutzrechtliche Hinweise sind unter https://www.ausweisapp.bund.de/datenschutz/ abrufbar.
Bitte lesen Sie zunächst die Allgemeinen Geschäftsbedingungen so wie die Lizenzbedingungen für die Überlassung und Nutzung der AusweisApp2 durch. Nachdem Sie zugestimmt haben, können Sie die Installation fortsetzen.
Allgemeine Geschäftsbedingungen
§ 1 Nutzungsbedingungen und Datenschutzhinweis
(1) Diese Allgemeine Geschäftsbedingungen (AGB) des Bundes, vertreten durch das Bundesministerium des Innern, für Bau und Heimat (nachfolgend "Bund") und dem Nutzer gelten für die Überlassung und Nutzung der Software AusweisApp2 (nachfolgend AusweisApp2) und deren neue Versionen, die auf der Grundlage dieser Bedingungen überlassen werden.
(2) "Nutzer" im Sinne dieses Vertrages sind natürliche Personen.
§ 2 Vertragsgegenstand und Unentgeltlichkeit
(1) Die AusweisApp2 wird regelmäßig hinsichtlich ihrer Konformität zu den Technischen Richtlinien des Bundesamtes für Sicherheit in der Informationstechnik [TR-03124-2] zertifiziert sowie hinsichtlich ihrer Nutzerfreundlichkeit [EN ISO 9241 Teil 110 Ergonomie Mensch-System-Integration zur Prüfung der Benutzbarkeit und Funktionalität und Trusted Design Guidelines zur Prüfung der Vertrauenswürdigkeit] und auf Barrierefreiheit [BITV 2.0] überprüft.
(2) Die AusweisApp2 wird in maschinenlesbarer Form unentgeltlich überlassen. Der Quellcode der AusweisApp2 wird ebenfalls unentgeltlich veröffentlicht. Eine Auflistung der verwendeten Open Source-Bestandteile der AusweisApp2 findet sich im Anhang.
(3) Die AusweisApp2 wird von der Governikus GmbH & Co. KG (Governikus) als Erfüllungsgehilfe des Bundes überlassen.
§ 3 Verwendungszweck
Die AusweisApp2 und alle ihre Bestandteile dienen ausschließlich dazu, im Zusammenhang mit der Nutzung der Online-Ausweisfunktion des Personalausweises bzw. des elektronischen Aufenthaltstitels und der Übermittlung der damit verbundenen Daten gemäß den gesetzlichen Vorgaben verwendet zu werden.
§ 4 Pflichten und Obliegenheiten des Nutzers
(1) Der Nutzer verpflichtet sich, die AusweisApp2 entsprechend des in § 3 genannten Verwendungszweckes zu nutzen. Es liegt in seinem Interesse, dass in Verbindung mit der AusweisApp2 genutzte Hard- und Software des Nutzers immer auf dem neuesten Stand der Sicherheitstechnik (System- und Firmware Update, Virenscanner, Firewall usw.) sind.
(2) Es liegt im eigenen Interesse des Nutzers aber auch des Bundes, dass stets nur die neueste Version der AusweisApp2 (siehe § 5) verwendet wird.
§ 5 Pflege und Support
(1) Der Bund bietet nach eigenem Ermessen und ohne hierzu verpflichtet zu sein für Teile der AusweisApp2 zusätzliche kostenfreie Supportleistungen in Form von Dokumentationen und online Hilfen auf dem AusweisApp2-Portal im Internet unter der Adresse www.ausweisapp.bund.de an, sowie über die Hotline des Herstellers Governikus unter der E-Mail-Adresse: support@ausweisapp.de und der Tel.-Nr.: +49 421 204 95-995. Auch stellt er verfügbare neue Versionen der AusweisApp2 zur Verfügung. Hieraus erwächst jedoch kein zusätzlicher Anspruch auf Mängelbeseitigung, auf Zertifizierung, auf Beibehaltung der Supportleistungen oder der Hotline und auf Überlassung neuer Versionen.
(2) Verfügbare neue Versionen der AusweisApp2 können im Internet kostenfrei auf dem AusweisApp2-Portal unter der Adresse www.ausweisapp.bund.de sowie über allgemein zugängliche AppStore heruntergeladen werden.
(3) Eventuelle Mängel der AusweisApp2 werden grundsätzlich dadurch behoben, dass der Bund jeweils eine neue Version der AusweisApp2 zum Herunterladen zur Verfügung stellt (siehe § 5 Absatz 1). Eine Pflicht zur Bereitstellung von neuen Versionen ergibt sich daraus grundsätzlich nicht.
§ 6 Hinweis auf gewerbliche und urheberrechtliche Schutzrechte
Die Zeichen AusweisApp2 und die entsprechenden Grafiken sowie das Signet zur Online-Ausweisfunktion sind für den Bund als Marken geschützt.
§ 7 Datenschutzhinweis
(1) Mit dieser Software werden personenbezogene Daten im Sinne des § 3 Absatz 1 des Bundesdatenschutzgesetzes (BDSG) zum Zwecke der Verarbeitung grundsätzlich nicht erhoben.
(2) Personenbezogene Daten aus dem Ausweischip werden ausschließlich zum Zweck des elektronischen Identitätsnachweises im Umfang der erteilten Berechtigung nach Einwilligung des Nutzers mit seiner Ausweis-PIN-Eingabe und auf dem Transportweg zwischen dem Ausweischip und dem Diensteanbieter sicher verschlüsselt und auch für Governikus nicht lesbar übertragen.
(3) Neben den reinen Daten, die zur Identifizierung/ Authentisierung benötigt werden, erhebt die Software nur mit Einverständnis des Nutzers Daten über die Art und Version der Anwendungsumgebung (Betriebssystem, Lesegeräte usw.) des Nutzers. Diese Daten kann der Nutzer bei Bedarf an Governikus übermitteln, um die ordnungsgemäße Verarbeitung prüfen zu lassen und Fehlern im Verarbeitungsprozess vorzubeugen. Die Nutzung der Daten erfolgt dann im Rahmen des § 14 BDSG durch Governikus im Auftrag des Bundes und nur für den genannten Zweck.
(4) Die in der AusweisApp2 enthaltene Selbstauskunft über die im Chip gespeicherten Daten, ist ein Dienst der durch Governikus über das Internet erbracht wird. Die Ausweisdaten werden dabei nur zur Anzeige des Nutzers gebracht und nicht dauerhaft bei Governikus gespeichert oder für andere Zwecke verwendet.
§ 8 Deutsches Recht
Auf diese Nutzungsbedingungen ist ausschließlich deutsches Recht unter Ausschluss des Übereinkommens der Vereinten Nationen über Verträge über den internationalen Warenkauf (CISG) anwendbar.
Anhang
Eingearbeitete Open Source-Komponenten
Qt, OpenSSL und http_parser.
@ -344,6 +301,68 @@ Unbeschadet besonderer Vereinbarungen zwischen den Parteien gilt Folgendes:
Lizenzergänzungen
§ 1 Nutzungsbedingungen
(1) Diese Allgemeine Geschäftsbedingungen (AGB) des Bundes, vertreten durch das Bundesamt für Sicherheit in der Informationstechnik (nachfolgend "Bund") und dem Nutzer gelten für die Überlassung und Nutzung der Software AusweisApp2 (nachfolgend AusweisApp2) und deren neue Versionen, die auf der Grundlage dieser Bedingungen überlassen werden.
(2) "Nutzer" im Sinne dieses Vertrages sind natürliche Personen.
§ 2 Vertragsgegenstand und Unentgeltlichkeit
(1) Die AusweisApp2 wird regelmäßig hinsichtlich ihrer Konformität zu den Technischen Richtlinien des Bundesamtes für Sicherheit in der Informationstechnik [TR-03124-2] zertifiziert sowie hinsichtlich ihrer Nutzerfreundlichkeit [EN ISO 9241 Teil 110 Ergonomie Mensch-System-Integration zur Prüfung der Benutzbarkeit und Funktionalität und Trusted Design Guidelines zur Prüfung der Vertrauenswürdigkeit] und auf Barrierefreiheit [BITV 2.0] überprüft.
(2) Die AusweisApp2 wird in maschinenlesbarer Form unentgeltlich überlassen. Der Quellcode der AusweisApp2 wird ebenfalls unentgeltlich veröffentlicht. Eine Auflistung der verwendeten Open Source-Bestandteile der AusweisApp2 findet sich im Anhang.
(3) Die AusweisApp2 wird von der Governikus GmbH & Co. KG (Governikus) als Erfüllungsgehilfe des Bundes überlassen.
§ 3 Verwendungszweck
Die AusweisApp2 und alle ihre Bestandteile dienen ausschließlich dazu, im Zusammenhang mit der Nutzung der Online-Ausweisfunktion des Personalausweises bzw. des elektronischen Aufenthaltstitels und der Übermittlung der damit verbundenen Daten gemäß den gesetzlichen Vorgaben verwendet zu werden.
§ 4 Pflichten und Obliegenheiten des Nutzers
(1) Der Nutzer verpflichtet sich, die AusweisApp2 entsprechend des in § 3 genannten Verwendungszweckes zu nutzen. Es liegt in seinem Interesse, dass in Verbindung mit der AusweisApp2 genutzte Hard- und Software des Nutzers immer auf dem neuesten Stand der Sicherheitstechnik (System- und Firmware Update, Virenscanner, Firewall usw.) sind.
(2) Es liegt im eigenen Interesse des Nutzers aber auch des Bundes, dass stets nur die neueste Version der AusweisApp2 (siehe § 5) verwendet wird.
§ 5 Pflege und Support
(1) Der Bund bietet nach eigenem Ermessen und ohne hierzu verpflichtet zu sein für Teile der AusweisApp2 zusätzliche kostenfreie Supportleistungen in Form von Dokumentationen und online Hilfen auf dem AusweisApp2-Portal im Internet unter der Adresse www.ausweisapp.bund.de an, sowie über die Hotline des Herstellers Governikus unter der E-Mail-Adresse: support@ausweisapp.de und der Tel.-Nr.: +49 421 204 95-995. Auch stellt er verfügbare neue Versionen der AusweisApp2 zur Verfügung. Hieraus erwächst jedoch kein Anspruch auf Mängelbeseitigung, auf Zertifizierung, auf Beibehaltung der Supportleistungen oder der Hotline und auf Überlassung neuer Versionen.
(2) Verfügbare neue Versionen der AusweisApp2 können im Internet kostenfrei auf dem AusweisApp2-Portal unter der Adresse www.ausweisapp.bund.de sowie über allgemein zugängliche AppStore heruntergeladen werden.
(3) Eventuelle Mängel der AusweisApp2 werden grundsätzlich dadurch behoben, dass der Bund jeweils eine neue Version der AusweisApp2 zum Herunterladen zur Verfügung stellt (siehe § 5 Absatz 1). Eine Pflicht zur Bereitstellung von neuen Versionen ergibt sich daraus nicht.
§ 6 Hinweis auf gewerbliche und urheberrechtliche Schutzrechte
Die Zeichen AusweisApp2 und die entsprechenden Grafiken sowie das Signet zur Online-Ausweisfunktion sind für den Bund als Marken geschützt.
§ 7 Deutsches Recht
Auf diese Nutzungsbedingungen ist ausschließlich deutsches Recht unter Ausschluss des Übereinkommens der Vereinten Nationen über Verträge über den internationalen Warenkauf (CISG) anwendbar.
Anhang
Ergänzende Lizenzhinweise
Die verwendeten Open-Source-Bibliotheken unterliegen den folgenden Nutzungsbedingungen:
OpenSSL
Lizenz: OpenSSL license & SSLeay license
Version: 1.1.1c
Adresse: https://www.openssl.org/
Qt
Lizenz: LGPL v3
Version: 5.12.4
Adresse: https://www.qt.io/
http_parser
Lizenz: MIT
Version: 2.9.2
Adresse: https://github.com/nodejs/http-parser/
Android Support Library V4
Lizenz: Apache 2.0
Version: 21.0.3
Adresse: https://developer.android.com/topic/libraries/support-library/
Die Lizenztexte lauten in ihrer originalen Fassung wie folgt:
Copyright (c) 1998-2017 The OpenSSL Project. All rights reserved.
@ -459,33 +478,6 @@ copied and put under another distribution licence
Ergänzende Linzenzhinweise
Die verwendeten OpenSource-Bibliotheken unterliegen den folgenden Nutzungsbedingungen:
Qt
Lizenz: LGPL v3
Version: 5.11.2
Adresse: https://www.qt.io/
http_parser
Lizenz: MIT
Version: 2.8.1
Adresse: https://github.com/nodejs/http-parser/
Android Support Library V4
Lizenz: Apache 2.0
Version: 21.0.3
Adresse: https://developer.android.com/topic/libraries/support-library/
Die Lizenztexte lauten in ihrer originalen Fassung wie folgt:
GNU LESSER GENERAL PUBLIC LICENSE
The Qt Toolkit is Copyright (C) 2016 The Qt Company Ltd.
@ -867,28 +859,3 @@ IN THE SOFTWARE.
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@ -294,6 +294,38 @@ Unbeschadet besonderer Vereinbarungen zwischen den Parteien gilt Folgendes:
Anhang
Ergänzende Lizenzhinweise
Die verwendeten Open-Source-Bibliotheken unterliegen den folgenden Nutzungsbedingungen:
OpenSSL
Lizenz: OpenSSL license & SSLeay license
Version: 1.1.1c
Adresse: https://www.openssl.org/
Qt
Lizenz: LGPL v3
Version: 5.12.4
Adresse: https://www.qt.io/
http_parser
Lizenz: MIT
Version: 2.9.2
Adresse: https://github.com/nodejs/http-parser/
Android Support Library V4
Lizenz: Apache 2.0
Version: 21.0.3
Adresse: https://developer.android.com/topic/libraries/support-library/
Die Lizenztexte lauten in ihrer originalen Fassung wie folgt:
Copyright (c) 1998-2017 The OpenSSL Project. All rights reserved.
@ -409,33 +441,6 @@ copied and put under another distribution licence
Ergänzende Linzenzhinweise
Die verwendeten OpenSource-Bibliotheken unterliegen den folgenden Nutzungsbedingungen:
Qt
Lizenz: LGPL v3
Version: 5.11.2
Adresse: https://www.qt.io/
http_parser
Lizenz: MIT
Version: 2.8.1
Adresse: https://github.com/nodejs/http-parser/
Android Support Library V4
Lizenz: Apache 2.0
Version: 21.0.3
Adresse: https://developer.android.com/topic/libraries/support-library/
Die Lizenztexte lauten in ihrer originalen Fassung wie folgt:
GNU LESSER GENERAL PUBLIC LICENSE
The Qt Toolkit is Copyright (C) 2016 The Qt Company Ltd.
@ -817,28 +822,3 @@ IN THE SOFTWARE.
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@ -134,7 +134,7 @@ Für iOS wird die AusweisApp2 mittels XCode gebaut!
$ cd build
$ cmake -DCMAKE_PREFIX_PATH=/Users/governikus/Toolchain/dist -DCMAKE_TOOLCHAIN_FILE=../AusweisApp2/cmake/iOS.toolchain.cmake -DCMAKE_BUILD_TYPE=release ../AusweisApp2 -GXcode
$ xcodebuild -target install -configuration Release
$ xcodebuild -configuration Release
$ xcodebuild -target ipa -configuration Release

View File

@ -3,28 +3,21 @@ version: "{build}"
environment:
matrix:
- PlatformToolset: mingw-w64
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
QTPath: C:\Qt\5.11\mingw53_32
OPENSSLPath: C:\OpenSSL-v111-Win32
- PlatformToolset: v140
platform: x64
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
QTPath: C:\Qt\5.11\msvc2015_64
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
QTPath: C:\Qt\5.12\mingw73_64
OPENSSLPath: C:\OpenSSL-v111-Win64
ARCHI: amd64
- PlatformToolset: v140
- PlatformToolset: v141
platform: Win32
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
QTPath: C:\Qt\5.11\msvc2015
QTPath: C:\Qt\5.12\msvc2017
OPENSSLPath: C:\OpenSSL-v111-Win32
ARCHI: x86
- PlatformToolset: v141
platform: x64
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
QTPath: C:\Qt\5.11\msvc2017_64
QTPath: C:\Qt\5.12\msvc2017_64
OPENSSLPath: C:\OpenSSL-v111-Win64
ARCHI: amd64
@ -33,8 +26,7 @@ configuration:
#- Debug
install:
- if "%PlatformToolset%"=="mingw-w64" set PATH=C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1\mingw32\bin;%PATH:C:\Program Files\Git\usr\bin;=%
- if "%PlatformToolset%"=="v140" call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" %archi%
- if "%PlatformToolset%"=="mingw-w64" set PATH=C:\mingw-w64\x86_64-7.3.0-posix-seh-rt_v5-rev0\mingw64\bin;%PATH:C:\Program Files\Git\usr\bin;=%
- if "%PlatformToolset%"=="v141" call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" %archi%
build:
@ -47,7 +39,6 @@ before_build:
$generator = switch ($env:PLATFORMTOOLSET)
{
"v141" {"Visual Studio 15 2017"}
"v140" {"Visual Studio 14 2015"}
"mingw-w64" {"MinGW Makefiles"}
}
if ($env:PLATFORM -eq "x64")

View File

@ -10,7 +10,11 @@ IF(MAC OR LINUX OR WIN32)
STRING(TIMESTAMP APPCAST_DATE "%Y-%m-%dT%H:%M:%S")
FOREACH(filePath ${_files})
FILE_SIZE(fileSize ${filePath})
IF(CMAKE_VERSION VERSION_LESS "3.14")
FILE_SIZE(fileSize ${filePath})
ELSE()
FILE(SIZE ${filePath} fileSize)
ENDIF()
GET_FILENAME_COMPONENT(file ${filePath} NAME)
IF(NOT DEFINED fileSize)

View File

@ -6,6 +6,10 @@ ADD_DEFINITIONS(-DQT_NO_FOREACH)
ADD_DEFINITIONS(-DQT_NO_KEYWORDS)
ADD_DEFINITIONS(-DQT_NO_EXCEPTIONS)
IF(NOT MSVC AND NOT CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
ADD_DEFINITIONS(-DQT_STRICT_ITERATORS)
ENDIF()
IF(CMAKE_VERSION VERSION_LESS "3.12")
ADD_DEFINITIONS(-DQT_RESTRICTED_CAST_FROM_ASCII)
ELSE()
@ -18,7 +22,7 @@ IF(QT_VENDOR STREQUAL "Governikus")
ADD_DEFINITIONS(-DQT_DEPRECATED_WARNINGS)
ENDIF()
SET(CMAKE_CXX_STANDARD 11)
SET(CMAKE_CXX_STANDARD 17)
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
SET(CMAKE_CXX_EXTENSIONS OFF)
@ -34,22 +38,23 @@ IF(MSVC)
ENDIF()
ADD_FLAG(/Qspectre)
ELSE()
ADD_DEFINITIONS(-DQT_STRICT_ITERATORS)
STRING(REPLACE "-fexceptions" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
STRING(REPLACE "-frtti" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wcast-qual -Wshadow")
SET(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -g")
IF(ANDROID AND CMAKE_ANDROID_ARCH_ABI STREQUAL "arm64-v8a")
SET(USE_LD bfd)
SET(PREFER_LD bfd CACHE STRING "")
ELSE()
SET(USE_LD gold)
SET(PREFER_LD gold CACHE STRING "")
ENDIF()
ADD_FLAG(-fuse-ld=${USE_LD} VAR CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS LINK -fuse-ld=${USE_LD})
ADD_FLAG(-flto VAR CMAKE_EXE_LINKER_FLAGS_RELEASE CMAKE_SHARED_LINKER_FLAGS_RELEASE LINK -flto)
ADD_FLAG(-fno-rtti VAR CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_MINSIZEREL)
ADD_FLAG(-fuse-ld=${PREFER_LD} VAR CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS USE_SAME_FOR_LINKER USE_LINKER_ONLY)
ADD_FLAG(-flto VAR CMAKE_EXE_LINKER_FLAGS_RELEASE CMAKE_SHARED_LINKER_FLAGS_RELEASE USE_SAME_FOR_LINKER)
IF(NOT CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
ADD_FLAG(-fno-rtti VAR CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_MINSIZEREL)
ENDIF()
ADD_FLAG(-fno-exceptions)
ADD_FLAG(-fstack-protector-strong -fstack-protector)
@ -74,6 +79,8 @@ ELSE()
ADD_FLAG(-Wunreachable-code-aggressive)
ADD_FLAG(-Wnewline-eof)
ADD_FLAG(-Wdate-time)
ADD_FLAG(-Wunused)
ADD_FLAG(-Wunused-template)
ADD_FLAG(-Wno-gnu-zero-variadic-macro-arguments) # Qt (qDebug) is not compatible
@ -119,7 +126,7 @@ ELSE()
ENDIF()
IF(APPLE AND NOT IOS)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ObjC++ -mmacosx-version-min=10.11")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ObjC++ -mmacosx-version-min=10.12")
ENDIF()
@ -131,5 +138,5 @@ INCLUDE(CompilerFlagsPersoSim)
OPTION(COVERAGE "Enable code coverage")
IF(COVERAGE)
MESSAGE(STATUS "Enable code coverage instrumentation")
ADD_FLAG(--coverage LINK --coverage VAR CMAKE_CXX_FLAGS_DEBUG)
ADD_FLAG(--coverage VAR CMAKE_CXX_FLAGS_DEBUG USE_SAME_FOR_LINKER)
ENDIF()

View File

@ -21,7 +21,4 @@ FUNCTION(CONFIGURE_DEFAULT_FILES _destination)
# Copy secure storage file, so that the AusweisApp2 can be started from the build directory.
CONFIGURE_FILE(${RESOURCES_DIR}/config.json.in ${_destination}/config.json @ONLY)
# Copy qtlogging.ini file
CONFIGURE_FILE(${RESOURCES_DIR}/qtlogging.ini ${_destination}/qtlogging.ini COPYONLY)
ENDFUNCTION()

View File

@ -3,7 +3,9 @@ INCLUDE(CheckCXXCompilerFlag)
# Check if a compiler flag is supported by current compiler.
#
# Options
# NOQUOTES: Do not add quotes to the variable (not used if it is a TARGET)
# NOQUOTES: Do not add quotes to the variable (not used if it is a TARGET).
# USE_SAME_FOR_LINKER: Use flag value for linker, too.
# USE_LINKER_ONLY: Use flag for linker only. Only recognized for USE_SAME_FOR_LINKER.
#
# Parameter
# NAME: Add a human readable name. This is for configure output only to
@ -15,7 +17,7 @@ INCLUDE(CheckCXXCompilerFlag)
# If VAR parameter is a cmake TARGET the compiler flag will be added
# to the COMPILE_FLAGS property of this TARGET only.
FUNCTION(ADD_FLAG)
SET(options NOQUOTES)
SET(options NOQUOTES USE_SAME_FOR_LINKER USE_LINKER_ONLY)
SET(oneValueArgs NAME)
SET(multiValueArgs LINK VAR)
cmake_parse_arguments(_PARAM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
@ -36,7 +38,30 @@ FUNCTION(ADD_FLAG)
STRING(REPLACE "-" "_" flagname ${flagname})
STRING(REPLACE " " "_" flagname ${flagname})
CHECK_CXX_COMPILER_FLAG(${flag} ${flagname})
# GCC will ignore unknown warning options when used in the -Wno- form. It will complain
# about it though, if something else goes wrong. To check if this is a warning which can be
# disabled, we remove the negation for the test only:
STRING(REPLACE "-Wno-" "-W" flagtest ${flag})
# This enforces warnings like "-Wunused-command-line-argument" to fail
# the check.
SET(errorflag "")
IF(NOT MSVC)
SET(errorflag "-Werror")
ENDIF()
IF(_PARAM_USE_SAME_FOR_LINKER)
IF(CMAKE_VERSION VERSION_LESS "3.14")
SET(CMAKE_REQUIRED_LIBRARIES ${_PARAM_LINK} ${flagtest})
ELSE()
SET(CMAKE_REQUIRED_LINK_OPTIONS ${_PARAM_LINK} ${flagtest})
ENDIF()
IF(_PARAM_USE_LINKER_ONLY)
SET(flagtest "")
ENDIF()
ENDIF()
CHECK_CXX_COMPILER_FLAG("${flagtest} ${errorflag}" ${flagname})
IF(${flagname})
FOREACH(var ${_PARAM_VAR})
IF (${var} MATCHES "^AusweisApp")
@ -267,25 +292,27 @@ IF((WIN32 AND NOT WINDOWS_STORE) OR LINUX OR MAC OR CYGWIN OR BSD)
ENDIF()
FUNCTION(FILE_SIZE _outSize _file)
IF(LINUX)
SET(SIZE_COMMAND stat -c "%s" "${_file}")
ELSEIF(MAC)
SET(SIZE_COMMAND stat -f "%z" "${_file}")
ELSE()
RETURN()
ENDIF()
IF(CMAKE_VERSION VERSION_LESS "3.14") # Use FILE(SIZE)
FUNCTION(FILE_SIZE _outSize _file)
IF(LINUX)
SET(SIZE_COMMAND stat -c "%s" "${_file}")
ELSEIF(MAC)
SET(SIZE_COMMAND stat -f "%z" "${_file}")
ELSE()
RETURN()
ENDIF()
EXECUTE_PROCESS(COMMAND ${SIZE_COMMAND}
OUTPUT_VARIABLE SIZE_OUTPUT
RESULT_VARIABLE SIZE_RESULT
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
EXECUTE_PROCESS(COMMAND ${SIZE_COMMAND}
OUTPUT_VARIABLE SIZE_OUTPUT
RESULT_VARIABLE SIZE_RESULT
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
IF(${SIZE_RESULT} EQUAL 0)
SET(${_outSize} ${SIZE_OUTPUT} PARENT_SCOPE)
ENDIF()
ENDFUNCTION()
IF(${SIZE_RESULT} EQUAL 0)
SET(${_outSize} ${SIZE_OUTPUT} PARENT_SCOPE)
ENDIF()
ENDFUNCTION()
ENDIF()
IF(NOT COMMAND FIND_HOST_PACKAGE)
MACRO(FIND_HOST_PACKAGE)
@ -350,6 +377,7 @@ IF(WIN32)
IF(WIN_TIMESTAMP)
IF(NOT WIN_TIMESTAMP_URL)
# http://rfc3161timestamp.globalsign.com/advanced
SET(WIN_TIMESTAMP_URL http://timestamp.digicert.com)
ENDIF()
SET(SIGNTOOL_PARAMS ${SIGNTOOL_PARAMS} /tr ${WIN_TIMESTAMP_URL} /td ${WIN_SIGN_HASHALGO})

View File

@ -40,17 +40,19 @@ SET(DEPENDENCY_CHECK "
IF(WIN32)
IF(MSVC)
IF(MSVC OR CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
SET(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION .)
IF(NOT CMAKE_VERSION VERSION_LESS "3.6")
SET(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
ENDIF()
SET(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
INCLUDE(InstallRequiredSystemLibraries)
ENDIF()
IF(TARGET Qt5::Qml)
FETCH_TARGET_LOCATION(libEgl "Qt5::Gui_EGL")
FETCH_TARGET_LOCATION(libGLES "Qt5::Gui_GLESv2")
FETCH_TARGET_LOCATION(libQuickControls2 "Qt5::QuickControls2")
INSTALL(FILES ${libQuickControls2} DESTINATION . COMPONENT Runtime)
INSTALL(FILES ${libEgl} DESTINATION . COMPONENT Runtime)
INSTALL(FILES ${libGLES} DESTINATION . COMPONENT Runtime)
ENDIF()
FETCH_TARGET_LOCATION(libSvg "Qt5::Svg")
FETCH_TARGET_LOCATION(pluginSvg "Qt5::QSvgPlugin")
@ -148,7 +150,6 @@ ELSEIF(APPLE AND NOT IOS)
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtNetwork.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtSvg.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtWidgets.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtPrintSupport.framework") # remove if disabled in Qt
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtWebSockets.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtConcurrent.framework")
IF(TARGET Qt5::Qml)
@ -156,6 +157,9 @@ ELSEIF(APPLE AND NOT IOS)
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuick.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuickControls2.framework")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuickTemplates2.framework")
IF(NOT "${Qt5Core_VERSION}" VERSION_LESS "5.12")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuickShapes.framework")
ENDIF()
ENDIF()
IF(TARGET Qt5::Bluetooth)
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtBluetooth.framework")
@ -164,9 +168,9 @@ ELSEIF(APPLE AND NOT IOS)
FETCH_TARGET_LOCATION(opensslCryptoName "OpenSSL::Crypto" NAME)
FETCH_TARGET_LOCATION(opensslSslName "OpenSSL::SSL" NAME)
IF(CMAKE_VERSION VERSION_LESS "3.13")
SET(OPENSSL_LIB_LOCATION "/Contents/MacOS")
SET(OPENSSL_LIB_LOCATION "/Contents/MacOS")
ELSE()
SET(OPENSSL_LIB_LOCATION "/Contents/Frameworks")
SET(OPENSSL_LIB_LOCATION "/Contents/Frameworks")
ENDIF()
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "${OPENSSL_LIB_LOCATION}/${opensslCryptoName}")
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "${OPENSSL_LIB_LOCATION}/${opensslSslName}")
@ -206,14 +210,18 @@ ELSEIF(ANDROID)
ENDIF()
LIST(APPEND JAVA_FILES "${_java_file}")
ENDFOREACH()
INSTALL(FILES ${PACKAGING_DIR}/android/res/values/strings.xml DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/values COMPONENT Runtime)
ELSE()
SET(ANDROID_MANIFEST AndroidManifest.xml.apk.in)
FOREACH(entry ldpi mdpi hdpi xhdpi xxhdpi xxxhdpi)
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/${entry}/${ANDROID_LAUNCHER_ICON} DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/drawable-${entry} COMPONENT Runtime RENAME npa.png)
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/${entry}/background_npa.png DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/mipmap-${entry} COMPONENT Runtime RENAME npa_background.png)
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/${entry}/foreground_${ANDROID_LAUNCHER_ICON} DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/mipmap-${entry} COMPONENT Runtime RENAME npa_foreground.png)
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/${entry}/${ANDROID_LAUNCHER_ICON} DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/mipmap-${entry} COMPONENT Runtime RENAME npa.png)
ENDFOREACH()
INSTALL(FILES ${PACKAGING_DIR}/android/styles.xml DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/values COMPONENT Runtime)
INSTALL(DIRECTORY ${PACKAGING_DIR}/android/res DESTINATION ${ANDROID_PACKAGE_SRC_DIR} COMPONENT Runtime)
FILE(GLOB_RECURSE JAVA_FILES "${SRC_DIR}/*.java")
ENDIF()
@ -228,7 +236,10 @@ ELSEIF(ANDROID)
SET(ANDROID_VERSION_NAME ${PROJECT_VERSION})
ENDIF()
CONFIGURE_FILE(${PACKAGING_DIR}/android/${ANDROID_MANIFEST} ${ANDROID_PACKAGE_SRC_DIR}/AndroidManifest.xml @ONLY)
CONFIGURE_FILE(${PACKAGING_DIR}/android/fileprovider.xml ${ANDROID_PACKAGE_SRC_DIR}/res/xml/fileprovider.xml COPYONLY)
CONFIGURE_FILE(${PACKAGING_DIR}/android/backup_rules.xml ${ANDROID_PACKAGE_SRC_DIR}/res/xml/backup_rules.xml COPYONLY)
IF(NOT ANDROID_BUILD_AAR)
CONFIGURE_FILE(${PACKAGING_DIR}/android/fileprovider.xml ${ANDROID_PACKAGE_SRC_DIR}/res/xml/fileprovider.xml COPYONLY)
ENDIF()
SET(ANDROID_APP_BINARY "${CMAKE_INSTALL_PREFIX}/${ANDROID_DEST}/libAusweisApp2.so")
SET(SYMBOL_FOLDER "${CMAKE_BINARY_DIR}/debug.symbols/${CMAKE_ANDROID_ARCH_ABI}")
@ -295,7 +306,7 @@ ENDIF()
IF(WIN32)
IF(SIGNTOOL_CMD)
CONFIGURE_FILE(${CMAKE_MODULE_PATH}/SignFiles.cmake.in ${CMAKE_BINARY_DIR}/SignFiles.cmake @ONLY)
CONFIGURE_FILE(${CMAKE_DIR}/SignFiles.cmake.in ${CMAKE_BINARY_DIR}/SignFiles.cmake @ONLY)
INSTALL(CODE
"
EXECUTE_PROCESS(COMMAND \"${CMAKE_COMMAND}\" -DSIGN_EXT=*.exe -P \"${CMAKE_BINARY_DIR}/SignFiles.cmake\" WORKING_DIRECTORY \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${DEFAULT_FILE_DESTINATION}\")
@ -316,11 +327,6 @@ IF(NOT ANDROID_BUILD_AAR)
INSTALL(FILES ${RCC} DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
ENDIF()
IF(NOT ANDROID AND NOT IOS)
# qtlogging.ini
INSTALL(FILES ${RESOURCES_DIR}/qtlogging.ini DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
ENDIF()
# qt qml plugins
IF(DESKTOP AND TARGET Qt5::Qml)
FOREACH(entry QtQuick QtQuick.2 QtQml QtGraphicalEffects Qt)

View File

@ -13,7 +13,7 @@ FIND_PACKAGE(Qt5Svg ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5LinguistTools ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5WebSockets ${MIN_QT_VERSION} REQUIRED)
IF(NOT DESKTOP AND NOT ANDROID_BUILD_AAR OR "${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
IF(NOT ANDROID_BUILD_AAR)
FIND_PACKAGE(Qt5Qml ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5Quick ${MIN_QT_VERSION} REQUIRED)
FIND_PACKAGE(Qt5QuickControls2 ${MIN_QT_VERSION} REQUIRED)
@ -78,7 +78,7 @@ ENDIF()
IF(MINGW)
SET(PCSC_LIBRARIES -lwinscard)
SET(WIN_DEFAULT_LIBS "-lAdvapi32" "-lKernel32" "-lOle32" "-lSetupapi" "-lVersion" "-lws2_32")
ELSEIF(MSVC)
ELSEIF(MSVC OR CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
SET(PCSC_LIBRARIES winscard.lib)
SET(WIN_DEFAULT_LIBS setupapi.lib version.lib Ws2_32.lib)
ELSEIF(ANDROID)
@ -86,6 +86,7 @@ ELSEIF(ANDROID)
ELSEIF(IOS)
FIND_LIBRARY(IOS_ASSETSLIBRARY AssetsLibrary)
FIND_LIBRARY(IOS_UIKIT UIKit)
FIND_LIBRARY(IOS_STOREKIT StoreKit)
FIND_LIBRARY(IOS_MOBILECORESERVICES MobileCoreServices)
FIND_LIBRARY(IOS_COREBLUETOOTH CoreBluetooth)
FIND_LIBRARY(IOS_COREFOUNDATION CoreFoundation)
@ -98,6 +99,8 @@ ELSEIF(IOS)
FIND_LIBRARY(IOS_SYSTEMCONFIGURATION SystemConfiguration)
FIND_LIBRARY(IOS_AUDIOTOOLBOX AudioToolbox)
FIND_LIBRARY(IOS_IMAGEIO ImageIO)
FIND_LIBRARY(IOS_CORENFC CoreNFC)
FIND_LIBRARY(IOS_MESSAGEUI MessageUI)
ELSEIF(MAC)
FIND_PATH(PCSC_INCLUDE_DIRS WinSCard.h)
FIND_LIBRARY(PCSC_LIBRARIES NAMES PCSC WinSCard)

View File

@ -9,7 +9,11 @@ MESSAGE(STATUS "CMAKE_VERSION: ${CMAKE_VERSION}")
MESSAGE(STATUS "CMAKE_SYSROOT: ${CMAKE_SYSROOT}")
MESSAGE(STATUS "CMAKE_SYSROOT_LINK: ${CMAKE_SYSROOT_LINK}")
MESSAGE(STATUS "CMAKE_SYSROOT_COMPILE: ${CMAKE_SYSROOT_COMPILE}")
IF(APPLE)
MESSAGE(STATUS "CMAKE_OSX_SYSROOT: ${CMAKE_OSX_SYSROOT}")
ENDIF()
MESSAGE(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
MESSAGE(STATUS "CMAKE_CXX_SIMULATE_ID: ${CMAKE_CXX_SIMULATE_ID}")
IF(ANDROID)
MESSAGE(STATUS "CMAKE_ANDROID_NDK: ${CMAKE_ANDROID_NDK}")
@ -25,10 +29,6 @@ IF(ANDROID)
MESSAGE(STATUS "ANDROID_NDK_REVISION: ${ANDROID_NDK_REVISION}")
MESSAGE(STATUS "ANDROID_SDK_REVISION: ${ANDROID_SDK_REVISION}")
ELSEIF(IOS)
MESSAGE(STATUS "CMAKE_IOS_SDK_ROOT: ${CMAKE_IOS_SDK_ROOT}")
MESSAGE(STATUS "CMAKE_IOS_DEVELOPER_ROOT: ${CMAKE_IOS_DEVELOPER_ROOT}")
ENDIF()

View File

@ -96,20 +96,28 @@ IF(WIN32)
IF(SIGNTOOL_CMD)
MESSAGE(STATUS "MSI can be signed with 'make package.sign'")
ADD_CUSTOM_TARGET(package.sign COMMAND ${SIGNTOOL_CMD} ${SIGNTOOL_PARAMS} ${PROJECT_BINARY_DIR}/${CPACK_PACKAGE_FILE_NAME}.msi)
SET(MSI ${PROJECT_BINARY_DIR}/${CPACK_PACKAGE_FILE_NAME}.msi)
ADD_CUSTOM_TARGET(package.sign COMMAND ${SIGNTOOL_CMD} ${SIGNTOOL_PARAMS} ${MSI}
COMMAND ${SIGNTOOL_CMD} verify /v /pa ${MSI})
ENDIF()
ELSEIF(IOS)
FILE(WRITE ${PROJECT_BINARY_DIR}/ipa.cmake "
SET(BUNDLE_DIRS \"\${CONFIG}-iphoneos;\${CONFIG};UninstalledProducts;UninstalledProducts/iphoneos\")
FUNCTION(FIND_BUNDLE _name _out_bundle _out_parent_dir)
SET(BUNDLE_DIRS \"\${CONFIG}-iphoneos;\${CONFIG};UninstalledProducts;UninstalledProducts/iphoneos\")
FOREACH(dir \${BUNDLE_DIRS})
SET(tmpBundleDir ${PROJECT_BINARY_DIR}/src/\${dir}/${PROJECT_NAME}.app)
IF(EXISTS \"\${tmpBundleDir}\")
SET(BundleDir \"\${tmpBundleDir}\")
BREAK()
ENDIF()
ENDFOREACH()
FOREACH(dir \${BUNDLE_DIRS})
SET(tmpDir ${PROJECT_BINARY_DIR}/src/\${dir})
SET(tmpBundleDir \${tmpDir}/\${_name})
IF(EXISTS \"\${tmpBundleDir}\")
SET(\${_out_bundle} \"\${tmpBundleDir}\" PARENT_SCOPE)
SET(\${_out_parent_dir} \"\${tmpDir}\" PARENT_SCOPE)
BREAK()
ENDIF()
ENDFOREACH()
ENDFUNCTION()
FIND_BUNDLE(${PROJECT_NAME}.app BundleDir ParentDir)
IF(BundleDir)
MESSAGE(STATUS \"Use bundle: \${BundleDir}\")
@ -117,9 +125,15 @@ ELSEIF(IOS)
MESSAGE(FATAL_ERROR \"Bundle directory does not exist\")
ENDIF()
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_directory \${BundleDir} Payload/AusweisApp2.app)
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_directory \${BundleDir} Payload/${PROJECT_NAME}.app)
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E tar cf \"${CPACK_PACKAGE_FILE_NAME}.ipa\" --format=zip Payload)
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E remove_directory Payload)
FIND_BUNDLE(${PROJECT_NAME}.app.dSYM dSYM ParentDir)
IF(dSYM)
MESSAGE(STATUS \"Use dSYM: \${dSYM}\")
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E tar cf \"\${CMAKE_BINARY_DIR}/${CPACK_PACKAGE_FILE_NAME}.dSYM.zip\" --format=zip ${PROJECT_NAME}.app.dSYM WORKING_DIRECTORY \${ParentDir})
ENDIF()
")
ADD_CUSTOM_TARGET(ipa COMMAND ${CMAKE_COMMAND} -DCONFIG=$<CONFIGURATION> -P ${CMAKE_BINARY_DIR}/ipa.cmake)
@ -164,26 +178,27 @@ ELSEIF(ANDROID)
ENDIF()
MESSAGE(STATUS "Using androiddeployqt: ${androiddeployqt}")
OPTION(ANDROID_USE_GRADLE "Use gradle for androiddeployqt" ON)
FILE(READ "${QT_HOST_PREFIX}/src/android/templates/build.gradle" BUILD_GRADLE)
IF(ANDROID_USE_GRADLE)
FILE(READ "${QT_HOST_PREFIX}/src/android/templates/build.gradle" BUILD_GRADLE)
IF(ANDROID_BUILD_AAR)
STRING(REPLACE "apply plugin: 'com.android.application'" "apply plugin: 'com.android.library'" BUILD_GRADLE "${BUILD_GRADLE}")
ENDIF()
IF(ANDROID_BUILD_AAR)
STRING(REPLACE "apply plugin: 'com.android.application'" "apply plugin: 'com.android.library'" BUILD_GRADLE "${BUILD_GRADLE}")
ENDIF()
FILE(WRITE "${CMAKE_INSTALL_PREFIX}/build.gradle" "${BUILD_GRADLE}")
FILE(READ "${PACKAGING_DIR}/android/build.gradle.append" BUILD_GRADLE)
FILE(APPEND "${CMAKE_INSTALL_PREFIX}/build.gradle" "${BUILD_GRADLE}")
FILE(WRITE "${CMAKE_INSTALL_PREFIX}/build.gradle" "${BUILD_GRADLE}")
FILE(READ "${PACKAGING_DIR}/android/build.gradle.append" BUILD_GRADLE)
FILE(APPEND "${CMAKE_INSTALL_PREFIX}/build.gradle" "${BUILD_GRADLE}")
OPTION(ANDROID_LINT "Lint Android package" ON)
IF(NOT ANDROID_LINT)
FILE(APPEND "${CMAKE_INSTALL_PREFIX}/build.gradle" "tasks.lint.enabled = false")
ENDIF()
IF(ANDROID_BUILD_AAR)
SET(ANDROID_FILE_EXT aar)
CONFIGURE_FILE(${PACKAGING_DIR}/android/pom.xml.in ${CMAKE_INSTALL_PREFIX}/${CPACK_PACKAGE_FILE_NAME}.pom @ONLY)
CONFIGURE_FILE("${PACKAGING_DIR}/android/lint.aar.xml" "${CMAKE_INSTALL_PREFIX}/lint.xml" COPYONLY)
ELSE()
SET(ANDROID_FILE_EXT apk)
CONFIGURE_FILE("${PACKAGING_DIR}/android/lint.apk.xml" "${CMAKE_INSTALL_PREFIX}/lint.xml" COPYONLY)
ENDIF()
MESSAGE(STATUS "Prepare ${ANDROID_FILE_EXT} file generation")
@ -195,64 +210,40 @@ ELSEIF(ANDROID)
ELSEIF(APK_SIGN_KEYSTORE AND APK_SIGN_KEYSTORE_ALIAS AND APK_SIGN_KEYSTORE_PSW)
MESSAGE(STATUS "Release build will be signed using: ${APK_SIGN_KEYSTORE} | Alias: ${APK_SIGN_KEYSTORE_ALIAS}")
SET(DEPLOY_CMD_SIGN --sign ${APK_SIGN_KEYSTORE} ${APK_SIGN_KEYSTORE_ALIAS} --storepass ${APK_SIGN_KEYSTORE_PSW} --digestalg SHA-256 --sigalg SHA256WithRSA)
IF(ANDROID_USE_GRADLE)
SET(ANDROID_FILE dist-release-signed.apk)
ELSE()
SET(ANDROID_FILE QtApp-release-signed.apk)
ENDIF()
SET(ANDROID_FILE dist-release-signed.apk)
ELSE()
IF(ANDROID_USE_GRADLE)
SET(ANDROID_FILE dist-release-unsigned.apk)
ELSE()
SET(ANDROID_FILE QtApp-release-unsigned.apk)
ENDIF()
SET(ANDROID_FILE dist-release-unsigned.apk)
MESSAGE(WARNING "Cannot sign release build! Set APK_SIGN_KEYSTORE, APK_SIGN_KEYSTORE_ALIAS and APK_SIGN_KEYSTORE_PSW!")
ENDIF()
ELSE()
IF(ANDROID_USE_GRADLE)
SET(ANDROID_FILE dist-debug.${ANDROID_FILE_EXT})
SET(ANDROID_FILE dist-debug.${ANDROID_FILE_EXT})
ENDIF()
SET(DEPLOY_CMD ${androiddeployqt} --verbose --gradle --input ${ANDROID_DEPLOYMENT_SETTINGS} --output ${CMAKE_INSTALL_PREFIX} ${DEPLOY_CMD_SIGN})
SET(SOURCE_ANDROID_FILE ${CMAKE_INSTALL_PREFIX}/build/outputs/${ANDROID_FILE_EXT})
IF("${Qt5Core_VERSION}" VERSION_GREATER_EQUAL "5.12.0" AND NOT ANDROID_BUILD_AAR)
IF(${CMAKE_BUILD_TYPE} STREQUAL "DEBUG")
SET(SOURCE_ANDROID_FILE ${SOURCE_ANDROID_FILE}/debug)
ELSE()
SET(ANDROID_FILE QtApp-debug.apk)
SET(SOURCE_ANDROID_FILE ${SOURCE_ANDROID_FILE}/release)
ENDIF()
ENDIF()
SET(DEPLOY_CMD ${androiddeployqt} --verbose --input ${ANDROID_DEPLOYMENT_SETTINGS} --output ${CMAKE_INSTALL_PREFIX} ${DEPLOY_CMD_SIGN})
IF(ANDROID_USE_GRADLE)
SET(DEPLOY_CMD ${DEPLOY_CMD} --gradle)
SET(SOURCE_ANDROID_FILE ${CMAKE_INSTALL_PREFIX}/build/outputs/${ANDROID_FILE_EXT})
IF("${Qt5Core_VERSION}" VERSION_GREATER_EQUAL "5.12.0" AND NOT ANDROID_BUILD_AAR)
IF(${CMAKE_BUILD_TYPE} STREQUAL "DEBUG")
SET(SOURCE_ANDROID_FILE ${SOURCE_ANDROID_FILE}/debug)
ELSE()
SET(SOURCE_ANDROID_FILE ${SOURCE_ANDROID_FILE}/release)
ENDIF()
ENDIF()
SET(SOURCE_ANDROID_FILE ${SOURCE_ANDROID_FILE}/${ANDROID_FILE})
ELSE()
IF(ANDROID_BUILD_AAR)
MESSAGE(FATAL_ERROR "Use gradle to build an AAR")
ENDIF()
SET(SOURCE_ANDROID_FILE ${CMAKE_INSTALL_PREFIX}/bin/${ANDROID_FILE})
ENDIF()
SET(SOURCE_ANDROID_FILE ${SOURCE_ANDROID_FILE}/${ANDROID_FILE})
SET(DESTINATION_ANDROID_FILE ${CMAKE_INSTALL_PREFIX}/${CPACK_PACKAGE_FILE_NAME}.${ANDROID_FILE_EXT})
# Add DEPENDS install someday
# http://public.kitware.com/Bug/view.php?id=8438
# https://gitlab.kitware.com/cmake/cmake/issues/8438
ADD_CUSTOM_TARGET(${ANDROID_FILE_EXT}
COMMAND ${DEPLOY_CMD}
COMMAND ${CMAKE_COMMAND} -E copy ${SOURCE_ANDROID_FILE} ${DESTINATION_ANDROID_FILE})
IF(ANDROID_USE_GRADLE)
ADD_CUSTOM_COMMAND(TARGET ${ANDROID_FILE_EXT} POST_BUILD
ADD_CUSTOM_COMMAND(TARGET ${ANDROID_FILE_EXT} POST_BUILD
COMMAND ${CMAKE_INSTALL_PREFIX}/gradlew sourcesJar lint
COMMAND ${CMAKE_COMMAND} -E copy build/libs/dist-sources.jar ${CPACK_PACKAGE_FILE_NAME}-sources.jar
WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX})
ENDIF()
IF(NOT ANDROID_BUILD_AAR)
FIND_PROGRAM(apksigner apksigner HINTS ${ANDROID_SDK}/build-tools/${ANDROID_BUILD_TOOLS_REVISION} CMAKE_FIND_ROOT_PATH_BOTH)

View File

@ -1,44 +1,4 @@
IF(COVERAGE)
# LCov (http://ltp.sourceforge.net/coverage/lcov.php)
FIND_PROGRAM(LCOV_BIN lcov CMAKE_FIND_ROOT_PATH_BOTH)
IF(LCOV_BIN)
SET(LCOV_FILE "${PROJECT_BINARY_DIR}/coverage.info")
SET(LCOV_GLOBAL_CMD ${LCOV_BIN} -q -o ${LCOV_FILE})
SET(LCOV_CMD ${LCOV_GLOBAL_CMD} -c -d ${PROJECT_BINARY_DIR} -b ${PROJECT_SOURCE_DIR})
SET(LCOV_RM_CMD ${LCOV_GLOBAL_CMD} -r ${LCOV_FILE} "*/test/*" "*/include/*" "*/src/external/*" "moc_*" "*.moc" "qrc_*" "ui_*")
IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
IF(WIN32)
SET(CLANG_GCOV py)
ELSE()
SET(CLANG_GCOV sh)
ENDIF()
SET(LCOV_CMD ${LCOV_CMD} --gcov-tool ${RESOURCES_DIR}/jenkins/clang-gcov.${CLANG_GCOV})
ENDIF()
ADD_CUSTOM_COMMAND(OUTPUT ${LCOV_FILE} COMMAND ${LCOV_CMD} COMMAND ${LCOV_RM_CMD})
ADD_CUSTOM_TARGET(lcov COMMAND ${LCOV_BIN} -l ${LCOV_FILE} DEPENDS ${LCOV_FILE})
FIND_PROGRAM(GENHTML_BIN genhtml CMAKE_FIND_ROOT_PATH_BOTH)
IF(GENHTML_BIN)
SET(REPORT_DIR "${PROJECT_BINARY_DIR}/coverage.report")
SET(GENHTML_CMD ${GENHTML_BIN} -q -p ${PROJECT_SOURCE_DIR} --num-spaces=4 -o ${REPORT_DIR} ${LCOV_FILE})
FIND_PROGRAM(FILT_BIN c++filt CMAKE_FIND_ROOT_PATH_BOTH)
IF(FILT_BIN)
SET(GENHTML_CMD ${GENHTML_CMD} --demangle-cpp)
ENDIF()
ADD_CUSTOM_COMMAND(OUTPUT ${REPORT_DIR} COMMAND ${GENHTML_CMD} DEPENDS ${LCOV_FILE})
ADD_CUSTOM_TARGET(lcov.report DEPENDS ${REPORT_DIR})
ENDIF()
SET(LCOV_XML "${PROJECT_BINARY_DIR}/coverage.xml")
SET(LCOV_COBERTURA_CMD ${RESOURCES_DIR}/jenkins/lcov_cobertura.py ${LCOV_FILE} -b ${PROJECT_SOURCE_DIR} -o ${LCOV_XML})
ADD_CUSTOM_COMMAND(OUTPUT ${LCOV_XML} COMMAND ${LCOV_COBERTURA_CMD} DEPENDS ${LCOV_FILE})
ADD_CUSTOM_TARGET(lcov.xml DEPENDS ${LCOV_XML})
ENDIF()
# gcovr (http://gcovr.com/)
FIND_PROGRAM(GCOVR_BIN gcovr CMAKE_FIND_ROOT_PATH_BOTH)
IF(GCOVR_BIN)
@ -48,7 +8,6 @@ IF(COVERAGE)
ADD_CUSTOM_COMMAND(OUTPUT ${GCOVR_FILE} COMMAND ${GCOVR_CMD} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
ADD_CUSTOM_TARGET(gcovr DEPENDS ${GCOVR_FILE})
ENDIF()
ENDIF()
# CppCheck (http://cppcheck.sourceforge.net)
@ -118,32 +77,34 @@ ENDIF()
FIND_PROGRAM(UNCRUSTIFY uncrustify CMAKE_FIND_ROOT_PATH_BOTH)
IF(UNCRUSTIFY)
FILE(GLOB_RECURSE FILES_JAVA ${PROJECT_SOURCE_DIR}/*.java)
FILE(GLOB_RECURSE FILES_CPP ${PROJECT_SOURCE_DIR}/*.cpp)
FILE(GLOB_RECURSE FILES_H ${PROJECT_SOURCE_DIR}/*.h)
FILE(GLOB_RECURSE FILES_MM ${PROJECT_SOURCE_DIR}/*.mm)
FILE(GLOB_RECURSE FILES_M ${PROJECT_SOURCE_DIR}/*.m)
SET(FILES ${FILES_JAVA} ${FILES_CPP} ${FILES_H} ${FILES_MM} ${FILES_M})
SET(FORMATTING_FILE ${PROJECT_BINARY_DIR}/formatting.files)
FILE(WRITE ${FORMATTING_FILE} "")
FOREACH(file ${FILES})
IF(NOT "${file}" MATCHES "/external/")
FILE(APPEND ${FORMATTING_FILE} ${file})
FILE(APPEND ${FORMATTING_FILE} "\n")
ENDIF()
ENDFOREACH()
SET(UNCRUSTIFY_CFG ${PROJECT_SOURCE_DIR}/uncrustify.cfg)
SET(UNCRUSTIFY_CMD ${UNCRUSTIFY} -c ${UNCRUSTIFY_CFG} --replace --no-backup -q -F ${FORMATTING_FILE})
EXECUTE_PROCESS(COMMAND ${UNCRUSTIFY} --version OUTPUT_VARIABLE UNCRUSTIFY_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
STRING(REPLACE "uncrustify " "" UNCRUSTIFY_VERSION ${UNCRUSTIFY_VERSION})
STRING(REPLACE "Uncrustify-" "" UNCRUSTIFY_VERSION ${UNCRUSTIFY_VERSION})
SET(UNCRUSTIFY_NEEDED_VERSION "0.68")
SET(UNCRUSTIFY_NEEDED_VERSION "0.69")
IF("${UNCRUSTIFY_VERSION}" STRLESS "${UNCRUSTIFY_NEEDED_VERSION}")
MESSAGE(WARNING "Uncrustify seems to be too old. Use at least ${UNCRUSTIFY_NEEDED_VERSION}... you are using: ${UNCRUSTIFY_VERSION}")
ELSE()
MESSAGE(STATUS "Found uncrustify ${UNCRUSTIFY_VERSION}")
FILE(GLOB_RECURSE FILES_JAVA ${PROJECT_SOURCE_DIR}/*.java)
FILE(GLOB_RECURSE FILES_CPP ${PROJECT_SOURCE_DIR}/*.cpp)
FILE(GLOB_RECURSE FILES_H ${PROJECT_SOURCE_DIR}/*.h)
FILE(GLOB_RECURSE FILES_H_IN ${PROJECT_SOURCE_DIR}/*.h.in)
FILE(GLOB_RECURSE FILES_MM ${PROJECT_SOURCE_DIR}/*.mm)
FILE(GLOB_RECURSE FILES_M ${PROJECT_SOURCE_DIR}/*.m)
SET(FILES ${FILES_JAVA} ${FILES_CPP} ${FILES_H_IN} ${FILES_H} ${FILES_MM} ${FILES_M})
SET(FORMATTING_FILE ${PROJECT_BINARY_DIR}/formatting.files)
FILE(WRITE ${FORMATTING_FILE} "")
FOREACH(file ${FILES})
IF(NOT "${file}" MATCHES "/external/")
FILE(APPEND ${FORMATTING_FILE} ${file})
FILE(APPEND ${FORMATTING_FILE} "\n")
ENDIF()
ENDFOREACH()
SET(UNCRUSTIFY_CFG ${PROJECT_SOURCE_DIR}/uncrustify.cfg)
SET(UNCRUSTIFY_CMD ${UNCRUSTIFY} -c ${UNCRUSTIFY_CFG} --replace --no-backup -q -F ${FORMATTING_FILE})
ADD_CUSTOM_TARGET(format COMMAND ${UNCRUSTIFY_CMD} SOURCES ${UNCRUSTIFY_CFG} ${FILES})
ENDIF()
ENDIF()
@ -172,108 +133,138 @@ ENDFUNCTION()
FIND_PROGRAM(CONVERT convert CMAKE_FIND_ROOT_PATH_BOTH)
IF(CONVERT)
IF(IOS)
SET(CONVERT_CMD convert -alpha off)
SET(BACKGROUND_COLOR "#5489c2")
ELSE()
SET(CONVERT_CMD convert)
SET(BACKGROUND_COLOR "transparent")
ENDIF()
SET(BACKGROUND_COLOR "#dcebf6")
ADD_CUSTOM_TARGET(npaicons.docs
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 96x96 npa.svg npa_docs.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(npaicons.win
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -define icon:auto-resize=256,96,64,48,40,32,24,20,16 npa.svg npa.ico
COMMAND ${CONVERT} -background transparent -define icon:auto-resize=256,96,64,48,40,32,24,20,16 npa.svg npa.ico
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(npaicons.android.preview
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 36x36 npa_preview.svg android/ldpi/npa_preview.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 160 -resize 48x48 npa_preview.svg android/mdpi/npa_preview.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 240 -resize 72x72 npa_preview.svg android/hdpi/npa_preview.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 320 -resize 96x96 npa_preview.svg android/xhdpi/npa_preview.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 480 -resize 144x144 npa_preview.svg android/xxhdpi/npa_preview.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 640 -resize 192x192 npa_preview.svg android/xxxhdpi/npa_preview.png
ADD_CUSTOM_TARGET(npaicons.android.background
COMMAND ${CONVERT} -background transparent -resize 81x81 android/npa_background.svg android/ldpi/background_npa.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 160 -resize 108x108 android/npa_background.svg android/mdpi/background_npa.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 240 -resize 162x162 android/npa_background.svg android/hdpi/background_npa.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 216x216 android/npa_background.svg android/xhdpi/background_npa.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 480 -resize 324x324 android/npa_background.svg android/xxhdpi/background_npa.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 640 -resize 432x432 android/npa_background.svg android/xxxhdpi/background_npa.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(npaicons.android.beta
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 36x36 npa_beta.svg android/ldpi/npa_beta.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 160 -resize 48x48 npa_beta.svg android/mdpi/npa_beta.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 240 -resize 72x72 npa_beta.svg android/hdpi/npa_beta.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 320 -resize 96x96 npa_beta.svg android/xhdpi/npa_beta.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 480 -resize 144x144 npa_beta.svg android/xxhdpi/npa_beta.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 640 -resize 192x192 npa_beta.svg android/xxxhdpi/npa_beta.png
ADD_CUSTOM_TARGET(npaicons.android.foreground.preview
COMMAND ${CONVERT} -background transparent -resize 54x54 -gravity center -extent 81x81 android/npa_preview.svg android/ldpi/foreground_npa_preview.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 160 -resize 72x72 -gravity center -extent 108x108 android/npa_preview.svg android/mdpi/foreground_npa_preview.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 240 -resize 108x108 -gravity center -extent 162x162 android/npa_preview.svg android/hdpi/foreground_npa_preview.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 144x144 -gravity center -extent 216x216 android/npa_preview.svg android/xhdpi/foreground_npa_preview.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 480 -resize 216x216 -gravity center -extent 324x324 android/npa_preview.svg android/xxhdpi/foreground_npa_preview.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 640 -resize 288x288 -gravity center -extent 432x432 android/npa_preview.svg android/xxxhdpi/foreground_npa_preview.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(npaicons.android
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 36x36 npa.svg android/ldpi/npa.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 160 -resize 48x48 npa.svg android/mdpi/npa.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 240 -resize 72x72 npa.svg android/hdpi/npa.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 320 -resize 96x96 npa.svg android/xhdpi/npa.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 480 -resize 144x144 npa.svg android/xxhdpi/npa.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 640 -resize 192x192 npa.svg android/xxxhdpi/npa.png
ADD_CUSTOM_TARGET(npaicons.android.legacy.preview
COMMAND ${CONVERT} -background transparent -resize 36x36 npa_preview.svg android/ldpi/npa_preview.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 160 -resize 48x48 npa_preview.svg android/mdpi/npa_preview.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 240 -resize 72x72 npa_preview.svg android/hdpi/npa_preview.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 96x96 npa_preview.svg android/xhdpi/npa_preview.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 480 -resize 144x144 npa_preview.svg android/xxhdpi/npa_preview.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 640 -resize 192x192 npa_preview.svg android/xxxhdpi/npa_preview.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(npaicons.android.foreground.beta
COMMAND ${CONVERT} -background transparent -resize 54x54 -gravity center -extent 81x81 android/npa_beta.svg android/ldpi/foreground_npa_beta.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 160 -resize 72x72 -gravity center -extent 78x78 android/npa_beta.svg android/mdpi/foreground_npa_beta.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 240 -resize 108x108 -gravity center -extent 162x162 android/npa_beta.svg android/hdpi/foreground_npa_beta.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 144x144 -gravity center -extent 216x216 android/npa_beta.svg android/xhdpi/foreground_npa_beta.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 480 -resize 216x216 -gravity center -extent 324x324 android/npa_beta.svg android/xxhdpi/foreground_npa_beta.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 640 -resize 288x288 -gravity center -extent 432x432 android/npa_beta.svg android/xxxhdpi/foreground_npa_beta.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(npaicons.android.legacy.beta
COMMAND ${CONVERT} -background transparent -resize 36x36 npa_beta.svg android/ldpi/npa_beta.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 160 -resize 48x48 npa_beta.svg android/mdpi/npa_beta.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 240 -resize 72x72 npa_beta.svg android/hdpi/npa_beta.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 96x96 npa_beta.svg android/xhdpi/npa_beta.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 480 -resize 144x144 npa_beta.svg android/xxhdpi/npa_beta.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 640 -resize 192x192 npa_beta.svg android/xxxhdpi/npa_beta.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(npaicons.android.foreground
COMMAND ${CONVERT} -background transparent -resize 54x54 -gravity center -extent 81x81 android/npa.svg android/ldpi/foreground_npa.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 160 -resize 72x72 -gravity center -extent 108x108 android/npa.svg android/mdpi/foreground_npa.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 240 -resize 108x108 -gravity center -extent 162x162 android/npa.svg android/hdpi/foreground_npa.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 144x144 -gravity center -extent 216x216 android/npa.svg android/xhdpi/foreground_npa.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 480 -resize 216x216 -gravity center -extent 324x324 android/npa.svg android/xxhdpi/foreground_npa.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 640 -resize 288x288 -gravity center -extent 432x432 android/npa.svg android/xxxhdpi/foreground_npa.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(npaicons.android.legacy
COMMAND ${CONVERT} -background transparent -resize 36x36 npa.svg android/ldpi/npa.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 160 -resize 48x48 npa.svg android/mdpi/npa.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 240 -resize 72x72 npa.svg android/hdpi/npa.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 96x96 npa.svg android/xhdpi/npa.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 480 -resize 144x144 npa.svg android/xxhdpi/npa.png
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 640 -resize 192x192 npa.svg android/xxxhdpi/npa.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(npaicons.playstore
COMMAND ${CONVERT} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 1120 -resize 336x336 -gravity center -extent 512x512 ${RESOURCES_DIR}/images/npa.svg playstore.png
COMMAND ${CONVERT} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 1120 -resize 336x336 -gravity center -extent 512x512 ${RESOURCES_DIR}/images/npa_preview.svg playstore_preview.png
)
ADD_CUSTOM_TARGET(npaicons.ios.beta
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 20x20 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 40x40 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 60x60 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 29x29 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 58x58 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 87x87 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 40x40 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall40.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 80x80 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall40@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 120x120 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall40@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 120x120 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon60@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 180x180 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon60@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 76x76 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon76.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 152x152 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon76@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 167x167 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1024x1024 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon1024.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 20x20 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 40x40 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20@2x.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 60x60 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20@3x.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 29x29 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 58x58 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall@2x.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 87x87 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall@3x.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 40x40 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall40.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 80x80 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall40@2x.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 120x120 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall40@3x.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 120x120 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon60@2x.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 180x180 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon60@3x.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 76x76 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon76.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 152x152 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon76@2x.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 167x167 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 1024x1024 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon1024.png
COMMAND ${CONVERT} -background none -resize 256x256 npa_beta.svg iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage.png
COMMAND ${CONVERT} -background none -resize 512x512 npa_beta.svg iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@2x.png
COMMAND ${CONVERT} -background none -resize 768x768 npa_beta.svg iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@3x.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(npaicons.ios
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 20x20 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon20.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 40x40 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon20@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 60x60 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon20@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 29x29 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 58x58 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 87x87 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 40x40 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 80x80 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 120x120 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 120x120 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon60@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 180x180 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon60@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 76x76 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon76.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 152x152 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon76@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 167x167 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1024x1024 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon1024.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 20x20 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon20.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 40x40 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon20@2x.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 60x60 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon20@3x.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 29x29 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 58x58 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall@2x.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 87x87 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall@3x.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 40x40 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 80x80 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40@2x.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 120x120 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40@3x.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 120x120 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon60@2x.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 180x180 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon60@3x.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 76x76 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon76.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 152x152 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon76@2x.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 167x167 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 1024x1024 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon1024.png
COMMAND ${CONVERT} -background none -resize 256x256 npa.svg iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage.png
COMMAND ${CONVERT} -background none -resize 512x512 npa.svg iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@2x.png
COMMAND ${CONVERT} -background none -resize 768x768 npa.svg iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@3x.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
SET(BACKGROUND_COLOR "rgb\(220,235,246\)")
ADD_CUSTOM_TARGET(npaicons.iphone
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 320x320 -gravity center -extent 640x1136 npa.svg iOS/launchImages/Default-568h@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 320x320 -gravity center -extent 640x1136 npa.svg iOS/launchImages/launchImage568@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 480x480 -gravity center -extent 960x1704 npa.svg iOS/launchImages/launchImage568@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 353x353 -gravity center -extent 705x1334 npa.svg iOS/launchImages/launchImage667@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 563x563 -gravity center -extent 1125x2001 npa.svg iOS/launchImages/launchImage667@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 414x414 -gravity center -extent 828x1472 npa.svg iOS/launchImages/launchImage736@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 621x621 -gravity center -extent 1242x2208 npa.svg iOS/launchImages/launchImage736@3x.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(npaicons.ipad
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 768x768 -gravity center -extent 2048x1536 npa.svg iOS/launchImages/launchImage1024@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1152x1152 -gravity center -extent 3072x2304 npa.svg iOS/launchImages/launchImage1024@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 834x834 -gravity center -extent 2224x1668 npa.svg iOS/launchImages/launchImage1112@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1251x1251 -gravity center -extent 3336x2502 npa.svg iOS/launchImages/launchImage1112@3x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1024x1024 -gravity center -extent 2732x2048 npa.svg iOS/launchImages/launchImage1366@2x.png
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1536x1536 -gravity center -extent 4098x3072 npa.svg iOS/launchImages/launchImage1366@3x.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(npaicons DEPENDS npaicons.win npaicons.ios npaicons.ios.beta npaicons.iphone npaicons.ipad npaicons.android npaicons.android.beta npaicons.android.preview)
ADD_CUSTOM_TARGET(npaicons DEPENDS npaicons.docs npaicons.win npaicons.ios npaicons.ios.beta npaicons.playstore npaicons.android.background npaicons.android.foreground npaicons.android.foreground.beta npaicons.android.foreground.preview npaicons.android.legacy npaicons.android.legacy.beta npaicons.android.legacy.preview)
ENDIF()
FIND_PROGRAM(PNGQUANT pngquant CMAKE_FIND_ROOT_PATH_BOTH)
IF(PNGQUANT)
SET(PNGQUANT_CMD pngquant -f -o)
SET(PNGQUANT_CMD pngquant -f -o)
ADD_CUSTOM_TARGET(pngquant.npaicons.docs
COMMAND ${PNGQUANT_CMD} npa_docs.png -- npa_docs.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(pngquant.ios.beta
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20.png -- iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20@2x.png -- iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20@2x.png
@ -290,6 +281,9 @@ SET(PNGQUANT_CMD pngquant -f -o)
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon76@2x.png -- iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon76@2x.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png -- iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon1024.png -- iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon1024.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage.png -- iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@2x.png -- iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@2x.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@3x.png -- iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@3x.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(pngquant.ios
@ -308,28 +302,30 @@ SET(PNGQUANT_CMD pngquant -f -o)
COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon76@2x.png -- iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon76@2x.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png -- iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon1024.png -- iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon1024.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/Default-568h@2x.png -- iOS/launchImages/Default-568h@2x.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage.png -- iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@2x.png -- iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@2x.png
COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@3x.png -- iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@3x.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(pngquant.iphone
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage568@2x.png -- iOS/launchImages/launchImage568@2x.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage568@3x.png -- iOS/launchImages/launchImage568@3x.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage667@2x.png -- iOS/launchImages/launchImage667@2x.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage667@3x.png -- iOS/launchImages/launchImage667@3x.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage736@2x.png -- iOS/launchImages/launchImage736@2x.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage736@3x.png -- iOS/launchImages/launchImage736@3x.png
ADD_CUSTOM_TARGET(pngquant.android.background
COMMAND ${PNGQUANT_CMD} android/ldpi/background_npa.png -- android/ldpi/background_npa.png
COMMAND ${PNGQUANT_CMD} android/mdpi/background_npa.png -- android/mdpi/background_npa.png
COMMAND ${PNGQUANT_CMD} android/hdpi/background_npa.png -- android/hdpi/background_npa.png
COMMAND ${PNGQUANT_CMD} android/xhdpi/background_npa.png -- android/xhdpi/background_npa.png
COMMAND ${PNGQUANT_CMD} android/xxhdpi/background_npa.png -- android/xxhdpi/background_npa.png
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/background_npa.png -- android/xxxhdpi/background_npa.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(pngquant.ipad
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1024@2x.png -- iOS/launchImages/launchImage1024@2x.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1024@3x.png -- iOS/launchImages/launchImage1024@3x.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1112@2x.png -- iOS/launchImages/launchImage1112@2x.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1112@3x.png -- iOS/launchImages/launchImage1112@3x.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1366@2x.png -- iOS/launchImages/launchImage1366@2x.png
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1366@3x.png -- iOS/launchImages/launchImage1366@3x.png
ADD_CUSTOM_TARGET(pngquant.android.foreground.preview
COMMAND ${PNGQUANT_CMD} android/ldpi/foreground_npa_preview.png -- android/ldpi/foreground_npa_preview.png
COMMAND ${PNGQUANT_CMD} android/mdpi/foreground_npa_preview.png -- android/mdpi/foreground_npa_preview.png
COMMAND ${PNGQUANT_CMD} android/hdpi/foreground_npa_preview.png -- android/hdpi/foreground_npa_preview.png
COMMAND ${PNGQUANT_CMD} android/xhdpi/foreground_npa_preview.png -- android/xhdpi/foreground_npa_preview.png
COMMAND ${PNGQUANT_CMD} android/xxhdpi/foreground_npa_preview.png -- android/xxhdpi/foreground_npa_preview.png
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/foreground_npa_preview.png -- android/xxxhdpi/foreground_npa_preview.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(pngquant.android.preview
ADD_CUSTOM_TARGET(pngquant.android.legacy.preview
COMMAND ${PNGQUANT_CMD} android/ldpi/npa_preview.png -- android/ldpi/npa_preview.png
COMMAND ${PNGQUANT_CMD} android/mdpi/npa_preview.png -- android/mdpi/npa_preview.png
COMMAND ${PNGQUANT_CMD} android/hdpi/npa_preview.png -- android/hdpi/npa_preview.png
@ -338,7 +334,16 @@ SET(PNGQUANT_CMD pngquant -f -o)
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa_preview.png -- android/xxxhdpi/npa_preview.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(pngquant.android.beta
ADD_CUSTOM_TARGET(pngquant.android.foreground.beta
COMMAND ${PNGQUANT_CMD} android/ldpi/foreground_npa_beta.png -- android/ldpi/foreground_npa_beta.png
COMMAND ${PNGQUANT_CMD} android/mdpi/foreground_npa_beta.png -- android/mdpi/foreground_npa_beta.png
COMMAND ${PNGQUANT_CMD} android/hdpi/foreground_npa_beta.png -- android/hdpi/foreground_npa_beta.png
COMMAND ${PNGQUANT_CMD} android/xhdpi/foreground_npa_beta.png -- android/xhdpi/foreground_npa_beta.png
COMMAND ${PNGQUANT_CMD} android/xxhdpi/foreground_npa_beta.png -- android/xxhdpi/foreground_npa_beta.png
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/foreground_npa_beta.png -- android/xxxhdpi/foreground_npa_beta.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(pngquant.android.legacy.beta
COMMAND ${PNGQUANT_CMD} android/ldpi/npa_beta.png -- android/ldpi/npa_beta.png
COMMAND ${PNGQUANT_CMD} android/mdpi/npa_beta.png -- android/mdpi/npa_beta.png
COMMAND ${PNGQUANT_CMD} android/hdpi/npa_beta.png -- android/hdpi/npa_beta.png
@ -347,7 +352,16 @@ SET(PNGQUANT_CMD pngquant -f -o)
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa_beta.png -- android/xxxhdpi/npa_beta.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(pngquant.android
ADD_CUSTOM_TARGET(pngquant.android.foreground
COMMAND ${PNGQUANT_CMD} android/ldpi/foreground_npa.png -- android/ldpi/foreground_npa.png
COMMAND ${PNGQUANT_CMD} android/mdpi/foreground_npa.png -- android/mdpi/foreground_npa.png
COMMAND ${PNGQUANT_CMD} android/hdpi/foreground_npa.png -- android/hdpi/foreground_npa.png
COMMAND ${PNGQUANT_CMD} android/xhdpi/foreground_npa.png -- android/xhdpi/foreground_npa.png
COMMAND ${PNGQUANT_CMD} android/xxhdpi/foreground_npa.png -- android/xxhdpi/foreground_npa.png
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/foreground_npa.png -- android/xxxhdpi/foreground_npa.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(pngquant.android.legacy
COMMAND ${PNGQUANT_CMD} android/ldpi/npa.png -- android/ldpi/npa.png
COMMAND ${PNGQUANT_CMD} android/mdpi/npa.png -- android/mdpi/npa.png
COMMAND ${PNGQUANT_CMD} android/hdpi/npa.png -- android/hdpi/npa.png
@ -356,7 +370,7 @@ SET(PNGQUANT_CMD pngquant -f -o)
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa.png -- android/xxxhdpi/npa.png
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
ADD_CUSTOM_TARGET(pngquant DEPENDS pngquant.ios pngquant.ios.beta pngquant.iphone pngquant.ipad pngquant.android pngquant.android.beta pngquant.android.preview)
ADD_CUSTOM_TARGET(pngquant DEPENDS pngquant.npaicons.docs pngquant.ios pngquant.ios.beta pngquant.android.background pngquant.android.foreground pngquant.android.foreground.beta pngquant.android.foreground.preview pngquant.android.legacy pngquant.android.legacy.beta pngquant.android.legacy.preview)
ENDIF()
IF(NOT JAVA_EXECUTABLE)

View File

@ -54,6 +54,7 @@ ENDIF()
OPTION(ANDROID_BUILD_AAR "Build AAR file instead of APK" OFF)
SET(CMAKE_FIND_ROOT_PATH ${CMAKE_PREFIX_PATH} CACHE string "android find search path root")
SET(CMAKE_FIND_ROOT_PATH ${CMAKE_PREFIX_PATH} CACHE STRING "android find search path root")
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

View File

@ -1,217 +1,35 @@
# This file is based off of the Platform/Darwin.cmake and Platform/UnixPaths.cmake
# files which are included with CMake 2.8.4
# It has been altered for iOS development
CMAKE_MINIMUM_REQUIRED(VERSION 3.14)
# Options:
#
# IOS_PLATFORM = OS (default) or SIMULATOR or SIMULATOR64
# This decides if SDKS will be selected from the iPhoneOS.platform or iPhoneSimulator.platform folders
# OS - the default, used to build for iPhone and iPad physical devices, which have an arm arch.
# SIMULATOR - used to build for the Simulator platforms, which have an x86 arch.
#
# CMAKE_IOS_DEVELOPER_ROOT = automatic(default) or /path/to/platform/Developer folder
# By default this location is automatcially chosen based on the IOS_PLATFORM value above.
# If set manually, it will override the default location and force the user of a particular Developer Platform
#
# CMAKE_IOS_SDK_ROOT = automatic(default) or /path/to/platform/Developer/SDKs/SDK folder
# By default this location is automatcially chosen based on the CMAKE_IOS_DEVELOPER_ROOT value.
# In this case it will always be the most up-to-date SDK found in the CMAKE_IOS_DEVELOPER_ROOT path.
# If set manually, this will force the use of a specific SDK version
SET(CMAKE_SYSTEM_NAME iOS)
SET(CMAKE_OSX_ARCHITECTURES "arm64")
SET(CMAKE_OSX_DEPLOYMENT_TARGET 13.0)
# Macros:
#
# set_xcode_property (TARGET XCODE_PROPERTY XCODE_VALUE)
# A convenience macro for setting xcode specific properties on targets
# example: set_xcode_property (myioslib IPHONEOS_DEPLOYMENT_TARGET "3.1")
#
# find_host_package (PROGRAM ARGS)
# A macro used to find executable programs on the host system, not within the iOS environment.
# Thanks to the android-cmake project for providing the command
SET(UNIX True)
SET(APPLE True)
SET(IOS True)
# Standard settings
set (CMAKE_SYSTEM_NAME Darwin)
set (CMAKE_SYSTEM_VERSION 1)
set (UNIX True)
set (APPLE True)
set (IOS True)
SET(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
find_program(xcrun_bin xcrun CMAKE_FIND_ROOT_PATH_BOTH)
if(NOT xcrun_bin)
message(FATAL_ERROR "Cannot find xcrun")
endif()
SET(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE "YES")
SET(CMAKE_XCODE_ATTRIBUTE_BITCODE_GENERATION_MODE "bitcode")
function(XCRUN _out _find)
execute_process(COMMAND ${xcrun_bin} --sdk iphoneos -f ${_find} OUTPUT_VARIABLE tmp_out OUTPUT_STRIP_TRAILING_WHITESPACE)
set(${_out} "${tmp_out}" PARENT_SCOPE)
endfunction()
SET(CMAKE_FIND_ROOT_PATH ${CMAKE_PREFIX_PATH} CACHE STRING "iOS find search path root")
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
# https://cmake.org/Bug/view.php?id=15329
set(CMAKE_MACOSX_BUNDLE YES)
set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO")
# Required as of cmake 2.8.10
set (CMAKE_OSX_DEPLOYMENT_TARGET "" CACHE STRING "Force unset of the deployment target for iOS" FORCE)
# Determine the cmake host system version so we know where to find the iOS SDKs
find_program (CMAKE_UNAME uname /bin /usr/bin /usr/local/bin)
if (CMAKE_UNAME)
exec_program(uname ARGS -r OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION)
string (REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\1" DARWIN_MAJOR_VERSION "${CMAKE_HOST_SYSTEM_VERSION}")
endif (CMAKE_UNAME)
XCRUN(CMAKE_C_COMPILER clang)
XCRUN(CMAKE_CXX_COMPILER clang++)
XCRUN(CMAKE_AR ar)
set(CMAKE_AR ${CMAKE_AR} CACHE FILEPATH "" FORCE)
# All iOS/Darwin specific settings - some may be redundant
set (CMAKE_SHARED_LIBRARY_PREFIX "lib")
set (CMAKE_SHARED_LIBRARY_SUFFIX ".dylib")
set (CMAKE_SHARED_MODULE_PREFIX "lib")
set (CMAKE_SHARED_MODULE_SUFFIX ".so")
set (CMAKE_MODULE_EXISTS 1)
set (CMAKE_DL_LIBS "")
set (CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ")
set (CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ")
set (CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}")
set (CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}")
# Hidden visibilty is required for cxx on iOS
set (CMAKE_C_FLAGS_INIT "")
set (CMAKE_CXX_FLAGS_INIT "-fvisibility=hidden -fvisibility-inlines-hidden")
set (CMAKE_C_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}")
set (CMAKE_CXX_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}")
set (CMAKE_PLATFORM_HAS_INSTALLNAME 1)
set (CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -headerpad_max_install_names")
set (CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -headerpad_max_install_names")
set (CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,")
set (CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,")
set (CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a")
# hack: if a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old build tree
# (where install_name_tool was hardcoded) and where CMAKE_INSTALL_NAME_TOOL isn't in the cache
# and still cmake didn't fail in CMakeFindBinUtils.cmake (because it isn't rerun)
# hardcode CMAKE_INSTALL_NAME_TOOL here to install_name_tool, so it behaves as it did before, Alex
if (NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
find_program(CMAKE_INSTALL_NAME_TOOL install_name_tool)
endif (NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
# Setup iOS platform unless specified manually with IOS_PLATFORM
if (NOT DEFINED IOS_PLATFORM)
set (IOS_PLATFORM "OS")
endif (NOT DEFINED IOS_PLATFORM)
set (IOS_PLATFORM ${IOS_PLATFORM} CACHE STRING "Type of iOS Platform")
# Setup building for arm64 or not
if (NOT DEFINED BUILD_ARM64)
set (BUILD_ARM64 true)
endif (NOT DEFINED BUILD_ARM64)
set (BUILD_ARM64 ${BUILD_ARM64} CACHE STRING "Build arm64 arch or not")
# Check the platform selection and setup for developer root
if (${IOS_PLATFORM} STREQUAL "OS")
set (IOS_PLATFORM_LOCATION "iPhoneOS.platform")
# This causes the installers to properly locate the output libraries
set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos")
elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR")
set (SIMULATOR true)
set (IOS_PLATFORM_LOCATION "iPhoneSimulator.platform")
# This causes the installers to properly locate the output libraries
set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphonesimulator")
elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR64")
set (SIMULATOR true)
set (IOS_PLATFORM_LOCATION "iPhoneSimulator.platform")
# This causes the installers to properly locate the output libraries
set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphonesimulator")
else (${IOS_PLATFORM} STREQUAL "OS")
message (FATAL_ERROR "Unsupported IOS_PLATFORM value selected. Please choose OS or SIMULATOR")
endif (${IOS_PLATFORM} STREQUAL "OS")
# Setup iOS developer location unless specified manually with CMAKE_IOS_DEVELOPER_ROOT
# Note Xcode 4.3 changed the installation location, choose the most recent one available
exec_program(/usr/bin/xcode-select ARGS -print-path OUTPUT_VARIABLE CMAKE_XCODE_DEVELOPER_DIR)
set (XCODE_POST_43_ROOT "${CMAKE_XCODE_DEVELOPER_DIR}/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
set (XCODE_PRE_43_ROOT "/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
if (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
if (EXISTS ${XCODE_POST_43_ROOT})
set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_POST_43_ROOT})
elseif(EXISTS ${XCODE_PRE_43_ROOT})
set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_PRE_43_ROOT})
endif (EXISTS ${XCODE_POST_43_ROOT})
endif (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
set (CMAKE_IOS_DEVELOPER_ROOT ${CMAKE_IOS_DEVELOPER_ROOT} CACHE PATH "Location of iOS Platform")
# Find and use the most recent iOS sdk unless specified manually with CMAKE_IOS_SDK_ROOT
if (NOT DEFINED CMAKE_IOS_SDK_ROOT)
file (GLOB _CMAKE_IOS_SDKS "${CMAKE_IOS_DEVELOPER_ROOT}/SDKs/*")
if (_CMAKE_IOS_SDKS)
list (SORT _CMAKE_IOS_SDKS)
list (REVERSE _CMAKE_IOS_SDKS)
list (GET _CMAKE_IOS_SDKS 0 CMAKE_IOS_SDK_ROOT)
else (_CMAKE_IOS_SDKS)
message (FATAL_ERROR "No iOS SDK's found in default search path ${CMAKE_IOS_DEVELOPER_ROOT}. Manually set CMAKE_IOS_SDK_ROOT or install the iOS SDK.")
endif (_CMAKE_IOS_SDKS)
message (STATUS "Toolchain using default iOS SDK: ${CMAKE_IOS_SDK_ROOT}")
endif (NOT DEFINED CMAKE_IOS_SDK_ROOT)
set (CMAKE_IOS_SDK_ROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Location of the selected iOS SDK")
# Set the sysroot default to the most recent SDK
set (CMAKE_OSX_SYSROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Sysroot used for iOS support")
# set the architecture for iOS
if (${IOS_PLATFORM} STREQUAL "OS")
set (IOS_ARCH arm64)
elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR")
set (IOS_ARCH i386)
elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR64")
set (IOS_ARCH x86_64)
endif (${IOS_PLATFORM} STREQUAL "OS")
set (CMAKE_OSX_ARCHITECTURES ${IOS_ARCH} CACHE string "Build architecture for iOS")
# Set the find root to the iOS developer roots and to user defined paths
set (CMAKE_FIND_ROOT_PATH ${CMAKE_IOS_DEVELOPER_ROOT} ${CMAKE_IOS_SDK_ROOT} ${CMAKE_PREFIX_PATH} CACHE string "iOS find search path root")
# default to searching for frameworks first
set (CMAKE_FIND_FRAMEWORK FIRST)
# set up the default search directories for frameworks
set (CMAKE_SYSTEM_FRAMEWORK_PATH
${CMAKE_IOS_SDK_ROOT}/System/Library/Frameworks
${CMAKE_IOS_SDK_ROOT}/System/Library/PrivateFrameworks
${CMAKE_IOS_SDK_ROOT}/Developer/Library/Frameworks
)
# only search the iOS sdks, not the remainder of the host filesystem
set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# This little macro lets you set any XCode specific property
macro (set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE)
set_property (TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE})
endmacro (set_xcode_property)
# This macro lets you find executable programs on the host system
macro (find_host_package)
set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
set (IOS FALSE)
find_package(${ARGN})
set (IOS TRUE)
set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
endmacro (find_host_package)
# work-around: cmake will fail if this is missing!
macro(find_host_package)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE NEVER)
set(IOS FALSE)
find_package(${ARGN})
set(IOS TRUE)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH)
endmacro(find_host_package)

View File

@ -233,7 +233,7 @@ CA-Zertifikate im Windows-Truststore werden daher ignoriert.
"eID-SDK", TCP, 24727, "eingehend", "Nein", "Verwendung der SDK-Schnittstelle", "Nur erreichbar von localhost [#TR-03124]_"
"SaK1", UDP, 24727, "eingehend", "Ja", "Smartphone als Kartenleser, Erkennung [#TR-03112]_", "Broadcasts"
"SaK2", TCP, , "ausgehend", "Ja", "Smartphone als Kartenleser, Verwendung [#TR-03112]_", "Verbindung im lokalen Subnetz"
"Update", TCP, 443, "ausgehend", "Ja", "Updates [#govurl]_ zu Dienstanbietern und Kartenlesegeräten sowie Informationen zu neuen AusweisApp2-Versionen [#updatecheck]_ .", "Die Zertifikate der TLS-Verbindung werden mit in der AusweisApp2 mitgelieferten CA-Zertifikaten validiert. Im Betriebssystem hinterlegte CA-Zertifikate werden ignoriert."
"Update", TCP, 443, "ausgehend", "Ja", "Updates [#govurl]_ zu Dienstanbietern und Kartenlesern sowie Informationen zu neuen AusweisApp2-Versionen [#updatecheck]_ .", "Die Zertifikate der TLS-Verbindung werden mit in der AusweisApp2 mitgelieferten CA-Zertifikaten validiert. Im Betriebssystem hinterlegte CA-Zertifikate werden ignoriert."
.. [#TR-03124] Siehe TR-03124 des BSI
.. [#TR-03112] Siehe TR-03112-6 des BSI

View File

@ -152,7 +152,7 @@ latex_documents = [
# The name of an image file (relative to this directory) to place at the top of
# the title page.
latex_logo = '@SPHINX_DOCS_DIR@/../../resources/images/android/xhdpi/npa.png'
latex_logo = '@SPHINX_DOCS_DIR@/../../resources/images/npa_docs.png'
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.

View File

@ -1,7 +1,7 @@
AusweisApp2 1.16.2
^^^^^^^^^^^^^^^^^^
**Releasedatum:** 15. April 2019
**Releasedatum:** 15. Mai 2019

View File

@ -0,0 +1,21 @@
AusweisApp2 1.18.0
^^^^^^^^^^^^^^^^^^
**Releasedatum:** 24. September 2019
Anwender
""""""""
- Aktivierung der NFC-Funktion für iOS 13.
- Kleinere Fehlerbehebungen.
Entwickler
""""""""""
- Aktualisierung von OpenSSL auf die Version 1.1.1c.
- Aktualisierung von Qt auf die Version 5.12.4.
- Ein Compiler mit C++17-Support ist erforderlich.

View File

@ -3,6 +3,11 @@
<head>
<meta charset="utf-8">
<title>AusweisApp2 Release Notes</title>
<style>
.important {
color: red;
}
</style>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">

View File

@ -1,7 +1,7 @@
Abkündigungen
=============
Mit der Version 1.18.0 der AusweisApp2 wird die Unterstützung
Mit der Version 1.20.0 der AusweisApp2 wird die Unterstützung
folgender Systeme eingestellt.
- OS X 10.11

View File

@ -4,8 +4,6 @@ Release Notes
.. toctree::
:maxdepth: 1
1.16.2
1.16.1
1.16.0
1.18.0
announce
issues

View File

@ -151,7 +151,7 @@ latex_documents = [
# The name of an image file (relative to this directory) to place at the top of
# the title page.
latex_logo = '@SPHINX_DOCS_DIR@/../../resources/images/android/xhdpi/npa.png'
latex_logo = '@SPHINX_DOCS_DIR@/../../resources/images/npa_docs.png'
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.

View File

@ -5,7 +5,7 @@ Die AusweisApp2 ist eine Software, die Sie auf Ihrem Computer installieren, um s
Ihrem Personalausweis bzw. Ihrem elektronischen Aufenthaltstitel online auszuweisen.
Für die Nutzung der Online-Ausweisfunktion benötigen die Nutzerinnen und Nutzer eine
Software, mit deren Hilfe eine sichere Verbindung zwischen Kartenlesegerät oder Smartphone,
Software, mit deren Hilfe eine sichere Verbindung zwischen Kartenleser oder Smartphone,
Personalausweis und eID-Diensteanbieter hergestellt werden kann. Sie ermöglicht den
verschlüsselten Datenaustausch zwischen Personalausweis und eID-Dienst.

View File

@ -1,8 +1,20 @@
Bekannte Fehler
===============
.. important::
Auf Windows wird beim Update einer Version der AusweisApp2 älter
als Version 1.16.0 auf eine aktuelle Version der AusweisApp2 die
ältere Version nicht erkannt und auch nicht entfernt. Bitte gehen
Sie in die Systemsteuerung Ihres Endgeräts und deinstallieren Sie
die ältere Version manuell. Danach kann die bereits installierte,
aktuelle Version aufgerufen werden.
Die nachfolgende Liste bezieht sich auf die aktuelle Version der AusweisApp2.
- Mit der NFC-Schnittstelle des iPhone 7 und iPhone 7 Plus werden viele
Ausweise nicht erkannt (hauptsächlich NFC-A) und es kommt zu Abbrüchen der
Authentisierung.
- Auf Windows 10 Plattformen mit aktivierter Benutzerkontensteuerung kann
es bei Benutzern mit eingeschränkten Berechtigungen zu Problemen mit der
Online-Ausweisfunktion kommen.
@ -19,8 +31,8 @@ Die nachfolgende Liste bezieht sich auf die aktuelle Version der AusweisApp2.
leichten Irritationen bei der angegebenen Bedienung kommen.
- Wenn die AusweisApp2 heruntergefahren wird, während eine Authentisierung
oder eine PIN-Änderung mit Komfort-Kartenlesegerät durchgeführt wird,
kann es unter Windows und macOS zu einem Absturz kommen.
oder eine PIN-Änderung mit Komfort-Kartenleser durchgeführt wird, kann es
unter Windows und macOS zu einem Absturz kommen.
- Unter Umständen kommt es zu Stabilitätsproblemen der NFC-Schnittstelle
auf Android.
@ -31,6 +43,17 @@ Die nachfolgende Liste bezieht sich auf die aktuelle Version der AusweisApp2.
- Unter macOS wird der Hinweis bei falscher PIN-Bestätigung während der
PIN-Änderung nur sehr kurz angezeigt.
- Bei der Nutzung eines entfernten Kartenlesegeräts mit aktiviertem
Tastaturmodus kann bei einer Authentisierung nicht in die PIN-Änderung
gewechselt werden, wenn nur eine 5-stellige PIN vorhanden ist.
- Bei der Nutzung eines entfernten Kartenlesers mit aktiviertem Tastaturmodus
kann bei einer Authentisierung nicht in die PIN-Änderung gewechselt werden,
wenn nur eine 5-stellige PIN vorhanden ist.
- Unter Windows wird bei der neuen grafischen Oberfläche der
"Datei speichern unter"-Dialog nicht automatisch bei Beginn einer
Authentisierung geschlossen.
- Unter macOS können per Tastatur mit den Standardsystemeinstellungen nur
Textfelder angesprungen werden. Mit Änderung der Tastaturnavigationsoption
unter "Systemeinstellungen/Tastatur/Kurzbefehle" auf "Alle Steuerungen" kann
das Verhalten von macOS geändert werden, sodass auch alle anderen
Komponenten in der App fokussiert werden können.

View File

@ -8,8 +8,6 @@ der AusweisApp2 unterstützt.
Betriebssysteme
"""""""""""""""
- OS X 10.11
- macOS 10.12
- macOS 10.13
@ -60,9 +58,9 @@ getestet.
Kartenlesegeräte
~~~~~~~~~~~~~~~~
Alle Kartenlesegeräte, die die Onlineausweisfunktionalität unterstützen und nach
Kartenleser
~~~~~~~~~~~
Alle Kartenleser, die die Onlineausweisfunktionalität unterstützen und nach
BSI TR-03119 zertifiziert sind. Details hierzu befinden sich auf der Homepage
des BSI unter "Nach Technischen Richtlinien zertifizierte Produkte".
@ -93,7 +91,7 @@ Aktuelle Informationen zu Kartenlesern finden Sie auf unserer Webseite:
https://www.ausweisapp.bund.de/fragen-und-antworten/voraussetzungen/
Alle NFC-fähigen Smartphones bzw. Tablets, die die Onlineausweisfunktionalität
unterstützen, können als Kartenlesegerät verwendet werden.
unterstützen, können als Kartenleser verwendet werden.
Dabei ist es notwendig die mobile AusweisApp2 auf dem jeweiligen Smartphone
zu installieren und zu starten.
@ -122,17 +120,17 @@ folgenden Browser zu verwenden.
Kartenlesegeräte
~~~~~~~~~~~~~~~~
Kartenleser
~~~~~~~~~~~
Alle NFC-fähigen Smartphones bzw. Tablets, die die Onlineausweisfunktionalität
unterstützen. Details hierzu befinden sich auf der Homepage:
https://www.ausweisapp.bund.de/mobile-geraete/
Ebenfalls ist es möglich ein weiteres Smartphone als Kartenlesegerät zu
verwenden. Dabei ist es notwendig die mobile AusweisApp2 auf dem jeweiligen
Smartphone zu installieren und zu starten.
Ebenfalls ist es möglich ein weiteres Smartphone als Kartenleser zu verwenden.
Dabei ist es notwendig die mobile AusweisApp2 auf dem jeweiligen Smartphone zu
installieren und zu starten.
Darüber hinaus ist die Verwendung eines Bluetooth-Kartenlesegeräts möglich.
Folgendes Bluetooth-Kartenlesegerät wird von der AusweiApp2 unterstützt:
Darüber hinaus ist die Verwendung eines Bluetooth-Kartenlesers möglich.
Folgender Bluetooth-Kartenleser wird von der AusweiApp2 unterstützt:
- cyberJack wave

View File

@ -1,6 +1,14 @@
Versionen
=========
Versionszweig 1.18
------------------
.. toctree::
:maxdepth: 1
1.18.0
Versionszweig 1.16
------------------
.. toctree::

View File

@ -659,7 +659,7 @@ in the listing below.
Implementation
""""""""""""""
As it is common on the Android platform, information is send to applications
As it is common on the Android platform, information is sent to applications
encapsulated in instances of the **Intent** class. In order to process newly
discovered NFC tags, Intents which are given to the application need to be
checked for the parcelable NFC extra as shown in the code listing below.

View File

@ -149,7 +149,7 @@ latex_documents = [
# The name of an image file (relative to this directory) to place at the top of
# the title page.
latex_logo = '@SPHINX_DOCS_DIR@/../../resources/images/android/xhdpi/npa.png'
latex_logo = '@SPHINX_DOCS_DIR@/../../resources/images/npa_docs.png'
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.

View File

@ -235,7 +235,7 @@ a result and an url parameter to indicate the end of an authentication.
"minor": "http://www.bsi.bund.de/ecard/api/1.1/resultminor/al/common#internalError",
"language": "en",
"description": "An internal error has occurred during processing.",
"message": "The ID card has been removed. The process is aborted."
"message": "The connection to the ID card has been lost. The process was aborted."
},
"url": "https://test.governikus-eid.de/gov_autent/async?refID=_abcdefgh"
}

View File

@ -1,4 +1,4 @@
CMAKE_MINIMUM_REQUIRED(VERSION 3.5.0)
CMAKE_MINIMUM_REQUIRED(VERSION 3.8.0)
IF(POLICY CMP0010)
CMAKE_POLICY(SET CMP0010 NEW)
@ -82,13 +82,12 @@ ELSE()
SET(PATCH_CMD ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/patch.py --debug -v)
MESSAGE(STATUS "Cannot find 'patch' command... using patch.py")
ENDIF()
SET(PATCH_CMD ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PROJECT_SOURCE_DIR}/patches)
IF(NOT DESTINATION_DIR)
SET(DESTINATION_DIR ${PROJECT_BINARY_DIR}/dist)
ENDIF()
SET(PATCHES_DIR ${PROJECT_SOURCE_DIR}/../patches)
IF(NOT PACKAGES_DIR)
SET(PACKAGES_DIR $ENV{PACKAGES_DIR})
IF(NOT PACKAGES_DIR)
@ -103,11 +102,11 @@ INCLUDE(Messages)
################################## Versions
SET(QT 5.11.2)
SET(QT_HASH c6104b840b6caee596fa9a35bc5f57f67ed5a99d6a36497b6fe66f990a53ca81)
SET(QT 5.12.4)
SET(QT_HASH 85da5e0ee498759990180d5b8192efaa6060a313c5018b772f57d446bdd425e1)
SET(OPENSSL 1.1.1)
SET(OPENSSL_HASH 2836875a0f89c03d0fdf483941512613a50cfb421d6fd94b9f41d7279d586a3d)
SET(OPENSSL 1.1.1c)
SET(OPENSSL_HASH f6fb3079ad15076154eda9413fed42877d668e7069d9b87396d0804fdb3f4c90)
################################## Files
SET(QT_FILE qt-everywhere-src-${QT}.tar.xz)
@ -117,7 +116,7 @@ SET(OPENSSL_FILE openssl-${OPENSSL}.tar.gz)
IF("${QT}" MATCHES "alpha|beta|rc")
SET(QT_DEST_DIR development_releases)
ELSE()
SET(QT_DEST_DIR official_releases)
SET(QT_DEST_DIR archive) # official_releases
ENDIF()
STRING(SUBSTRING ${QT} 0 4 QT_SUBVERSION)
@ -131,7 +130,8 @@ SET(ENABLED_TARGETS)
#########################################################################
LIST(APPEND ENABLED_TARGETS openssl)
SET(OPENSSL_CONFIGURE_FLAGS no-camellia no-bf no-aria no-seed no-poly1305 no-srp no-gost no-ocsp no-idea no-mdc2 no-rc2 no-rc4 no-rc5 no-srtp no-hw no-sm2 no-sm3 no-sm4)
SET(OPENSSL_CONFIGURE_FLAGS no-camellia no-bf no-aria no-seed no-poly1305 no-srp no-gost no-idea no-mdc2 no-rc2 no-rc4 no-rc5 no-srtp no-hw no-sm2 no-sm3 no-sm4)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-ocsp no-ct no-dgram)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-cast no-chacha no-blake2 no-rmd160 no-scrypt no-siphash no-whirlpool no-md4 no-des)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-tls1 no-tls1-method no-tls1_1 no-tls1_1-method no-tls1_3 no-ssl3 no-ssl3-method no-dtls no-dtls1-method no-dtls1_2-method)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-deprecated no-engine no-async no-dso no-comp no-ts no-makedepend no-tests shared)
@ -139,6 +139,7 @@ SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-deprecated no-engine n
IF(${CMAKE_BUILD_TYPE} STREQUAL "DEBUG")
SET(OPENSSL_CONFIGURE_FLAGS --debug ${OPENSSL_CONFIGURE_FLAGS})
ELSE()
SET(OPENSSL_CONFIGURE_FLAGS no-ui-console no-filenames ${OPENSSL_CONFIGURE_FLAGS})
ADD_FLAG(-Os NOQUOTES VAR OPENSSL_COMPILER_FLAGS)
ENDIF()
@ -146,14 +147,20 @@ ADD_FLAG(-fstack-protector-strong -fstack-protector NOQUOTES VAR OPENSSL_COMPILE
IF(IOS)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} ios64-cross)
SET(OPENSSL_ENV export CROSS_TOP=${CMAKE_IOS_DEVELOPER_ROOT} && export CROSS_SDK=iPhoneOS.sdk &&)
STRING(REGEX REPLACE "/SDKs/.*" "" CROSS_TOP_DEV_ROOT "${CMAKE_OSX_SYSROOT}")
SET(OPENSSL_ENV export CROSS_TOP=${CROSS_TOP_DEV_ROOT} && export CROSS_SDK=iPhoneOS.sdk &&)
ELSEIF(APPLE)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} darwin64-x86_64-cc)
SET(OPENSSL_COMPILER_FLAGS ${OPENSSL_COMPILER_FLAGS} -mmacosx-version-min=10.11)
SET(OPENSSL_COMPILER_FLAGS ${OPENSSL_COMPILER_FLAGS} -mmacosx-version-min=10.12)
ELSEIF(MINGW)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} mingw)
ELSEIF(MSVC)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-asm VC-WIN32)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-asm)
IF(CMAKE_SIZEOF_VOID_P EQUAL 8)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} VC-WIN64A)
ELSE()
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} VC-WIN32)
ENDIF()
ELSEIF(ANDROID)
IF(CMAKE_ANDROID_ARCH_ABI STREQUAL "armeabi-v7a")
SET(OPENSSL_ARCH android-arm)
@ -180,10 +187,10 @@ ELSEIF(ANDROID)
ELSEIF(BSD)
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} BSD-x86_64)
ELSEIF(LINUX)
IF(CMAKE_SYSTEM_PROCESSOR STREQUAL "i686")
SET(OPENSSL_ARCH linux-generic32)
ELSE()
IF(CMAKE_SIZEOF_VOID_P EQUAL 8)
SET(OPENSSL_ARCH linux-x86_64)
ELSE()
SET(OPENSSL_ARCH linux-generic32)
ENDIF()
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} ${OPENSSL_ARCH})
ELSE()
@ -195,11 +202,8 @@ ExternalProject_Add(openssl
URL_HASH SHA256=${OPENSSL_HASH}
DOWNLOAD_DIR ${PACKAGES_DIR}
PATCH_COMMAND ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-android-shlib_variant.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-Ignore-disabled-ciphers.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-DSA-mod-inverse-fix.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-Timing-vulnerability-in-DSA-signature-generation-CVE.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-Timing-vulnerability-in-ECDSA-signature-generation-C.patch
PATCH_COMMAND ${PATCH_CMD}/openssl-android-shlib_variant.patch &&
${PATCH_CMD}/openssl-Adjust-iOS-target.patch
CONFIGURE_COMMAND ${OPENSSL_ENV} ${PERL_EXECUTABLE} Configure --prefix=${DESTINATION_DIR} ${OPENSSL_CONFIGURE_FLAGS} "${OPENSSL_COMPILER_FLAGS}"
BUILD_COMMAND ${OPENSSL_ENV} ${MAKE} ${MAKE_JOBS}
BUILD_IN_SOURCE 1
@ -235,32 +239,45 @@ LIST(APPEND ENABLED_TARGETS qt)
IF(${CMAKE_BUILD_TYPE} STREQUAL "DEBUG")
SET(QT_CONFIGURE_FLAGS -debug -qml-debug)
SET(QT_PATCH_COMMAND ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Enable-debug-output-for-OpenSSL.patch &&)
SET(QT_PATCH_COMMAND ${PATCH_CMD}/qt-Enable-debug-output-for-OpenSSL.patch &&)
ELSE()
SET(QT_CONFIGURE_FLAGS -release -optimize-size -no-qml-debug)
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} $<$<CONFIG:RelWithDebInfo>:-force-debug-info>)
ENDIF()
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -prefix ${DESTINATION_DIR} -opensource -confirm-license -c++std c++11 -qt-zlib -no-mtdev -qt-libpng -qt-libjpeg -no-dbus -no-harfbuzz -qt-pcre -system-proxies -no-compile-examples -nomake examples -nomake tests -no-sql-sqlite -openssl-linked -I ${DESTINATION_DIR}/include -L ${DESTINATION_DIR}/lib)
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -prefix ${DESTINATION_DIR} -opensource -confirm-license)
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -nomake examples -nomake tests -no-mtdev -no-dbus -no-harfbuzz -no-compile-examples -no-sql-sqlite)
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -qt-zlib -qt-libpng -qt-libjpeg -qt-pcre)
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -system-proxies -openssl-linked -I ${DESTINATION_DIR}/include -L ${DESTINATION_DIR}/lib)
IF(NOT ANDROID)
LIST(APPEND NO_FEATURES bearermanagement)
IF(CMAKE_CXX_COMPILER_LAUNCHER STREQUAL "ccache")
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -ccache)
ENDIF()
LIST(APPEND NO_FEATURES ftp paint_debug lcdnumber mdiarea)
LIST(APPEND NO_FEATURES dtls winrt_bt ftp paint_debug lcdnumber mdiarea)
LIST(APPEND NO_FEATURES calendarwidget colordialog cups dial fontcombobox fontdialog)
LIST(APPEND NO_FEATURES imageformat_bmp imageformat_ppm imageformat_xbm)
LIST(APPEND NO_FEATURES sharedmemory textodfwriter filesystemwatcher)
LIST(APPEND NO_FEATURES sharedmemory textodfwriter bearermanagement)
LIST(APPEND NO_FEATURES undocommand undogroup undostack undoview)
LIST(APPEND NO_FEATURES printer printdialog printpreviewdialog printpreviewwidget)
LIST(APPEND NO_FEATURES splashscreen syntaxhighlighter dom sql)
LIST(APPEND NO_FEATURES splashscreen syntaxhighlighter dom sql qdoc)
FOREACH(feature ${NO_FEATURES})
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -no-feature-${feature})
ENDFOREACH()
SET(QT_CONFIGURE_FLAGS_OTHER -no-journald -no-directfb -no-linuxfb)
SET(QT_CONFIGURE_FLAGS_SKIP_MODULES -skip qtwebglplugin -skip qtscxml -skip qtxmlpatterns -skip qtwebchannel -skip qtwebengine -skip qtscript -skip qtactiveqt -skip qtlocation -skip qtserialbus -skip qtserialport -skip qtgamepad -skip qtvirtualkeyboard -skip qtcanvas3d -skip qtcharts -skip qtdatavis3d -skip qt3d -skip qtpurchasing -skip qtwayland -skip qtremoteobjects -skip qtspeech -skip qtwebview -skip multimedia -skip qtquickcontrols)
LIST(APPEND SKIP_MODULES qtwebglplugin qtscxml qtxmlpatterns qtwebchannel)
LIST(APPEND SKIP_MODULES qtwebengine qtscript qtactiveqt qtlocation qtserialbus)
LIST(APPEND SKIP_MODULES qtserialport qtgamepad qtvirtualkeyboard qtcanvas3d qtcharts)
LIST(APPEND SKIP_MODULES qtdatavis3d qt3d qtpurchasing qtwayland qtremoteobjects)
LIST(APPEND SKIP_MODULES qtspeech qtwebview multimedia qtquickcontrols)
FOREACH(module ${SKIP_MODULES})
SET(QT_CONFIGURE_FLAGS_SKIP_MODULES ${QT_CONFIGURE_FLAGS_SKIP_MODULES} -skip ${module})
ENDFOREACH()
SET(QT_CONFIGURE_FLAGS_OTHER -no-journald -no-directfb -no-linuxfb)
SET(QT_CONFIGURE ./configure)
IF(IOS)
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_OTHER} -sdk iphoneos -xplatform macx-ios-clang)
@ -282,6 +299,8 @@ ELSEIF(WIN32)
SET(QT_PLATFORM win32-msvc2015)
ELSEIF(MSVC_TOOLSET_VERSION STREQUAL "141")
SET(QT_PLATFORM win32-msvc2017)
ELSEIF(MSVC_TOOLSET_VERSION STREQUAL "142")
SET(QT_PLATFORM win32-msvc2019)
ELSE()
MESSAGE(FATAL_ERROR "Version of MSVC not supported")
ENDIF()
@ -295,6 +314,8 @@ ELSEIF(WIN32)
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_OPENSSL} -opengl dynamic -no-icu -no-sql-odbc -platform ${QT_PLATFORM})
SET(QT_CONFIGURE configure.bat)
ELSEIF(ANDROID)
FIND_PACKAGE(Java COMPONENTS Development REQUIRED)
IF(CMAKE_COMPILER_IS_GNUCXX)
SET(ANDROID_XPLATFORM android-g++)
ELSE()
@ -310,8 +331,12 @@ ELSEIF(ANDROID)
ENDIF()
SET(QT_ENV export OPENSSL_LIBS=-lcrypto-gov\ -lssl-gov &&)
ELSE()
ELSEIF(BSD)
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_OTHER})
ELSEIF(LINUX)
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_OTHER} -no-libproxy)
ELSE()
MESSAGE(FATAL_ERROR "Unsupported system")
ENDIF()
IF(IOS OR ANDROID)
@ -325,23 +350,18 @@ ExternalProject_Add(qt
DOWNLOAD_DIR ${PACKAGES_DIR}
PATCH_COMMAND ${QT_PATCH_COMMAND}
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Disable-unused-imageformats.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Add-IsoDep-to-the-techList-on-Android.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Introduce-reportError-to-fix-QMetaObject-invokeMethod.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Add-work-around-for-freebsd-build.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Remove-Qt-Labs-specific-plugins-from-the-build.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-configure-refactor-directx-checks.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-configure-detect-fxc.exe-more-thoroughly.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-disable-designer.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-fix-macOS-no-printer.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Use-QUrl-toString-when-forming-the-Host-header.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-QUrl-Support-IPv6-addresses-with-zone-id.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Android-fix-compile-with-NDK-r18.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Android-Fix-crash.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-QObject-Fix-isSignalConnected-when-signals-have-been.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Use-user-provided-session-data-if-available.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Work-Around-FreeBSD-v12-build.patch &&
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Linux-Remove-our-use-of-syscall-for-statx-2-and-rena.patch &&
${PATCH_CMD}/qt-Disable-unused-imageformats.patch &&
${PATCH_CMD}/qt-Add-work-around-for-freebsd-build.patch &&
${PATCH_CMD}/qt-Remove-Qt-Labs-specific-plugins-from-the-build.patch &&
${PATCH_CMD}/qt-Remove-unused-plugins-from-the-build.patch &&
${PATCH_CMD}/qt-disable-designer.patch &&
${PATCH_CMD}/qt-Disable-qmltime-for-shared-build.patch &&
${PATCH_CMD}/qt-Add-Q_CORE_EXPORT-to-lcEventDispatcher.patch &&
${PATCH_CMD}/qt-Fix-build-with-no-feature-printer.patch &&
${PATCH_CMD}/qt-Fix-build-with-no-feature-printer-on-macOS.patch &&
${PATCH_CMD}/qt-Core-IO-Bluetooth-fix-ambiguous-conversions.patch &&
${PATCH_CMD}/qt-Core-IO-Bluetooth-fix-ambiguous-conversions-for-macO.patch &&
${PATCH_CMD}/qt-Adjust-iOS-target.patch &&
${CMAKE_COMMAND} -E touch qtbase/.gitignore
CONFIGURE_COMMAND ${QT_ENV} ${QT_CONFIGURE} ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_SKIP_MODULES}
BUILD_COMMAND ${MAKE} ${MAKE_JOBS}
@ -356,7 +376,11 @@ FOREACH(var ${ENABLED_TARGETS})
EXTERNALPROJECT_GET_PROPERTY(${var} INSTALL_DIR)
LIST(APPEND CLEAN_TARGETS ${INSTALL_DIR})
ENDFOREACH()
SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${DESTINATION_DIR};${CLEAN_TARGETS}")
IF(CMAKE_VERSION VERSION_LESS "3.15")
SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${DESTINATION_DIR};${CLEAN_TARGETS}")
ELSE()
SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_CLEAN_FILES "${DESTINATION_DIR};${CLEAN_TARGETS}")
ENDIF()
OPTION(COMPRESS_DEPENDS "Disable DEPENDS for compress target" ON)
IF(COMPRESS_DEPENDS)
@ -377,9 +401,7 @@ IF(DVCS_FOUND)
ENDIF()
ENDIF()
IF(IOS)
SET(SYSTEM_NAME iOS)
ELSEIF(ANDROID)
IF(ANDROID)
SET(SYSTEM_NAME ${CMAKE_SYSTEM_NAME}_${CMAKE_CXX_COMPILER_ID}_${CMAKE_ANDROID_ARCH_ABI})
ELSE()
SET(SYSTEM_NAME ${CMAKE_SYSTEM_NAME}_${CMAKE_CXX_COMPILER_ID})
@ -392,8 +414,14 @@ IF(WIN32)
ENDIF()
ENDIF()
SET(COMPRESSION cfJ)
SET(COMPRESSION_FILENDING tar.xz)
IF(CMAKE_VERSION VERSION_LESS "3.15")
SET(COMPRESSION cfJ)
SET(COMPRESSION_FILENDING tar.xz)
ELSE()
SET(COMPRESSION cf)
SET(COMPRESSION_OPTION --zstd)
SET(COMPRESSION_FILENDING tar.zstd)
ENDIF()
ADD_CUSTOM_TARGET(compress.pre ${compressed_filename}
COMMAND ${CMAKE_COMMAND} -E remove_directory "${DESTINATION_DIR}/doc"
COMMAND ${CMAKE_COMMAND} -E remove_directory "${DESTINATION_DIR}/share"
@ -403,6 +431,6 @@ ADD_CUSTOM_TARGET(compress.pre ${compressed_filename}
SET(compressed_filename Toolchain_${SYSTEM_NAME}_${stamp}.${COMPRESSION_FILENDING})
ADD_CUSTOM_COMMAND(OUTPUT ${compressed_filename}
COMMAND ${CMAKE_COMMAND} -E tar "${COMPRESSION}" "${compressed_filename}" "${DESTINATION_DIR}"
COMMAND ${CMAKE_COMMAND} -E tar "${COMPRESSION}" "${compressed_filename}" ${COMPRESSION_OPTION} "${DESTINATION_DIR}"
DEPENDS compress.pre)
ADD_CUSTOM_TARGET(compress DEPENDS ${compressed_filename})

View File

@ -4,15 +4,13 @@ Libraries
Um die AusweisApp2 zu bauen ist eine Toolchain erforderlich, die die
Abhängigkeiten und die Compilertools beinhaltet.
Unterstützte Compiler:
Unterstützte C++17 Compiler:
- MinGW 32 / 64 >= 4.9
- MinGW / GCC >= 7.3
- GCC >= 4.9
- Clang >= 5.0
- Clang >= 3.4
- MSVC >= 2015
- MSVC >= 2017
Notwendige Bibliotheken:
@ -32,7 +30,7 @@ Notwendige Bibliotheken:
Notwendige Tools:
- CMake >= 3.5.0 (>= 3.7.1 für Android)
- CMake >= 3.8.0 (3.14.0 >= für iOS)
- http://www.cmake.org
@ -102,7 +100,7 @@ MinGW
- http://sourceforge.net/projects/mingw-w64/
- Dabei wurde das folgende Paket getestet:
https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/5.3.0/threads-posix/dwarf/i686-5.3.0-release-posix-dwarf-rt_v4-rev0.7z/download
https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/7.3.0/threads-posix/dwarf/i686-7.3.0-release-posix-dwarf-rt_v5-rev0.7z/download
MSYS2
@ -147,7 +145,7 @@ Vorbereitung
::
Für das Windows SDK 10.0.15063.0 und neuer:
Für das Windows SDK 10.0.15063.0 und neuer (getestet: 10.0.17763.0):
WindowsSdkVerBinPath = C:\Program Files (x86)\Windows Kits\10\bin\%VERSION%
Für alle älteren Versionen:
WindowsSdkDir = C:\Program Files (x86)\Windows Kits\10

View File

@ -368,7 +368,7 @@ class PatchSet(object):
header.append(fe.line)
fe.next()
if fe.is_empty:
if p == None:
if p is None:
debug("no patch data found") # error is shown later
self.errors += 1
else:
@ -956,7 +956,6 @@ class PatchSet(object):
if exists(backupname):
warning("can't backup original file to %s - aborting" % backupname)
else:
import shutil
shutil.move(filename, backupname)
if self.write_hunks(backupname, filename, p.hunks):
info("successfully patched %d/%d:\t %s" % (i+1, total, filename))
@ -1020,7 +1019,6 @@ class PatchSet(object):
lineno = 1
line = fp.readline()
hno = None
try:
for hno, h in enumerate(hunks):
# skip to first line of the hunk

View File

@ -0,0 +1,25 @@
From 0628b87d65feb0209303e91bf7529628c4dd80f4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
Date: Fri, 1 Feb 2019 13:27:04 +0100
Subject: [PATCH] Adjust iOS target
---
Configurations/15-ios.conf | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git x/Configurations/15-ios.conf y/Configurations/15-ios.conf
index 1bb9f48d06..fb0ece9aff 100644
--- x/Configurations/15-ios.conf
+++ y/Configurations/15-ios.conf
@@ -24,7 +24,7 @@ my %targets = (
"ios64-xcrun" => {
inherit_from => [ "ios-common", asm("aarch64_asm") ],
CC => "xcrun -sdk iphoneos cc",
- cflags => add("-arch arm64 -mios-version-min=7.0.0 -fno-common"),
+ cflags => add("-arch arm64 -mios-version-min=13.0 -fno-common -fembed-bitcode"),
bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR",
perlasm_scheme => "ios64",
},
--
2.20.1

View File

@ -0,0 +1,25 @@
From f63dce0a614ad26176dfbf4069264a4ec36c11b1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
Date: Tue, 20 Nov 2018 16:05:20 +0100
Subject: [PATCH] android shlib_variant
---
Configurations/15-android.conf | 2 ++
1 file changed, 2 insertions(+)
diff --git x/Configurations/15-android.conf y/Configurations/15-android.conf
index 7b496a4529..559e11e27f 100644
--- x/Configurations/15-android.conf
+++ y/Configurations/15-android.conf
@@ -170,6 +170,8 @@ my %targets = (
bn_ops => sub { android_ndk()->{bn_ops} },
bin_cflags => "-pie",
enable => [ ],
+ shlib_variant => '-gov',
+ shared_extension => '.so',
},
"android-arm" => {
################################################################
--
2.20.1

View File

@ -0,0 +1,38 @@
From 81839e57d5f3d86d6663f58d5d6b7b0605a6986e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
Date: Tue, 30 Jul 2019 12:49:14 +0200
Subject: [PATCH] Add Q_CORE_EXPORT to lcEventDispatcher*
Undefined symbols for architecture arm64:
"lcEventDispatcher()", referenced from:
_qt_main_wrapper in libqios.a(qioseventdispatcher.o)
+[QIOSApplicationStateTracker applicationDidFinishLaunching:] in libqios.a(qioseventdispatcher.o)
user_main_trampoline() in libqios.a(qioseventdispatcher.o)
+[QIOSApplicationStateTracker applicationWillTerminate] in libqios.a(qioseventdispatcher.o)
QIOSJumpingEventDispatcher::interruptEventLoopExec() in libqios.a(qioseventdispatcher.o)
ld: symbol(s) not found for architecture arm64
Change-Id: I43677cf3bce0588753731d81d533f85b0ea1e223
Fixes: QTBUG-75457
---
src/corelib/kernel/qeventdispatcher_cf.mm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git x/qtbase/src/corelib/kernel/qeventdispatcher_cf.mm y/qtbase/src/corelib/kernel/qeventdispatcher_cf.mm
index b7b379e2c1..ac711d74ee 100644
--- x/qtbase/src/corelib/kernel/qeventdispatcher_cf.mm
+++ y/qtbase/src/corelib/kernel/qeventdispatcher_cf.mm
@@ -148,8 +148,8 @@ static CFStringRef runLoopMode(NSDictionary *dictionary)
QT_BEGIN_NAMESPACE
-Q_LOGGING_CATEGORY(lcEventDispatcher, "qt.eventdispatcher");
-Q_LOGGING_CATEGORY(lcEventDispatcherTimers, "qt.eventdispatcher.timers");
+Q_CORE_EXPORT Q_LOGGING_CATEGORY(lcEventDispatcher, "qt.eventdispatcher");
+Q_CORE_EXPORT Q_LOGGING_CATEGORY(lcEventDispatcherTimers, "qt.eventdispatcher.timers");
class RunLoopDebugger : public QObject
{
--
2.22.0

View File

@ -1,7 +1,7 @@
From 9e482ce286ad39677e64392e0ca18afc4cf5396c Mon Sep 17 00:00:00 2001
From c06988f6a5816e8ebbcebfcf7e9799cd5b90a91d Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Fri, 13 Apr 2018 08:22:18 +0200
Subject: [PATCH] Add work-around for freebsd build
Subject: Add work-around for freebsd build
Change-Id: I14e66e072f9667479815693e3dbbac71385797e7
Task-number: QTBUG-65425
@ -10,7 +10,7 @@ Task-number: QTBUG-65425
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git x/qtbase/qmake/Makefile.unix y/qtbase/qmake/Makefile.unix
index 426387f0c2..b785127ed2 100644
index 0f69b6b487..26ac96c473 100644
--- x/qtbase/qmake/Makefile.unix
+++ y/qtbase/qmake/Makefile.unix
@@ -269,7 +269,7 @@ qlibraryinfo.o: $(SOURCE_PATH)/src/corelib/global/qlibraryinfo.cpp
@ -23,5 +23,5 @@ index 426387f0c2..b785127ed2 100644
qnumeric.o: $(SOURCE_PATH)/src/corelib/global/qnumeric.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $<
--
2.17.0
2.21.0

View File

@ -0,0 +1,26 @@
From 86b0caf2e167953ef1e50f32edb96e1e64eeba7e Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Fri, 19 Jul 2019 15:19:08 +0200
Subject: Adjust iOS target
Change-Id: I6c7f0616d52b0d118ffd8c031f3f51212b8ed821
---
mkspecs/macx-ios-clang/qmake.conf | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git x/qtbase/mkspecs/macx-ios-clang/qmake.conf y/qtbase/mkspecs/macx-ios-clang/qmake.conf
index 88e96ef32e..b3372a8232 100644
--- x/qtbase/mkspecs/macx-ios-clang/qmake.conf
+++ y/qtbase/mkspecs/macx-ios-clang/qmake.conf
@@ -2,7 +2,7 @@
# qmake configuration for macx-ios-clang
#
-QMAKE_IOS_DEPLOYMENT_TARGET = 11.0
+QMAKE_IOS_DEPLOYMENT_TARGET = 13.0
# Universal target (iPhone and iPad)
QMAKE_APPLE_TARGETED_DEVICE_FAMILY = 1,2
--
2.22.0

View File

@ -0,0 +1,253 @@
From daf0e91b5be5a136d93b0e66efc3681f28a2ffde Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
Date: Fri, 19 Jul 2019 11:06:59 +0200
Subject: [PATCH] Core/IO/Bluetooth - fix ambiguous conversions for macOS
This is a sibling of QTBUG-76847 on macOS instead of iOS.
---
.../qbluetoothdevicediscoveryagent_osx.mm | 6 ++---
src/bluetooth/qbluetoothlocaldevice_osx.mm | 2 +-
src/bluetooth/qbluetoothserver_osx.mm | 6 ++---
src/bluetooth/qbluetoothserviceinfo_osx.mm | 2 +-
src/bluetooth/qbluetoothsocket_osx.mm | 26 +++++++++----------
src/bluetooth/qbluetoothtransferreply_osx.mm | 10 +++----
6 files changed, 26 insertions(+), 26 deletions(-)
diff --git x/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_osx.mm y/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_osx.mm
index 4657da82..bdc3c85e 100644
--- x/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_osx.mm
+++ y/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_osx.mm
@@ -181,7 +181,7 @@ QBluetoothDeviceDiscoveryAgentPrivate::QBluetoothDeviceDiscoveryAgentPrivate(con
QBluetoothDeviceDiscoveryAgentPrivate::~QBluetoothDeviceDiscoveryAgentPrivate()
{
- if (inquiryLE && agentState != NonActive) {
+ if (inquiryLE.data() && agentState != NonActive) {
// We want the LE scan to stop as soon as possible.
if (dispatch_queue_t leQueue = OSXBluetooth::qt_LE_queue()) {
// Local variable to be retained ...
@@ -195,7 +195,7 @@ QBluetoothDeviceDiscoveryAgentPrivate::~QBluetoothDeviceDiscoveryAgentPrivate()
bool QBluetoothDeviceDiscoveryAgentPrivate::isValid() const
{
- return hostController && [hostController powerState] == kBluetoothHCIPowerStateON;
+ return hostController.data() && [hostController powerState] == kBluetoothHCIPowerStateON;
}
bool QBluetoothDeviceDiscoveryAgentPrivate::isActive() const
@@ -292,7 +292,7 @@ void QBluetoothDeviceDiscoveryAgentPrivate::startLE()
// Check queue and create scanner:
inquiryLE.reset([[LEDeviceInquiryObjC alloc] initWithNotifier:notifier.data()]);
- if (inquiryLE)
+ if (inquiryLE.data())
notifier.take(); // Whatever happens next, inquiryLE is already the owner ...
dispatch_queue_t leQueue(qt_LE_queue());
diff --git x/qtconnectivity/src/bluetooth/qbluetoothlocaldevice_osx.mm y/qtconnectivity/src/bluetooth/qbluetoothlocaldevice_osx.mm
index 52b7bba8..e7dd9906 100644
--- x/qtconnectivity/src/bluetooth/qbluetoothlocaldevice_osx.mm
+++ y/qtconnectivity/src/bluetooth/qbluetoothlocaldevice_osx.mm
@@ -149,7 +149,7 @@ QBluetoothLocalDevicePrivate::QBluetoothLocalDevicePrivate(QBluetoothLocalDevice
bool QBluetoothLocalDevicePrivate::isValid() const
{
- return hostController;
+ return hostController.data();
}
void QBluetoothLocalDevicePrivate::requestPairing(const QBluetoothAddress &address, Pairing pairing)
diff --git x/qtconnectivity/src/bluetooth/qbluetoothserver_osx.mm y/qtconnectivity/src/bluetooth/qbluetoothserver_osx.mm
index eefaf4da..5d3b8fc4 100644
--- x/qtconnectivity/src/bluetooth/qbluetoothserver_osx.mm
+++ y/qtconnectivity/src/bluetooth/qbluetoothserver_osx.mm
@@ -142,7 +142,7 @@ void QBluetoothServerPrivate::stopListener()
void QBluetoothServerPrivate::openNotify(IOBluetoothRFCOMMChannel *channel)
{
- Q_ASSERT_X(listener, Q_FUNC_INFO, "invalid listener (nil)");
+ Q_ASSERT_X(listener.data(), Q_FUNC_INFO, "invalid listener (nil)");
Q_ASSERT_X(channel, Q_FUNC_INFO, "invalid channel (nil)");
Q_ASSERT_X(q_ptr, Q_FUNC_INFO, "invalid q_ptr (null)");
@@ -154,7 +154,7 @@ void QBluetoothServerPrivate::openNotify(IOBluetoothRFCOMMChannel *channel)
void QBluetoothServerPrivate::openNotify(IOBluetoothL2CAPChannel *channel)
{
- Q_ASSERT_X(listener, Q_FUNC_INFO, "invalid listener (nil)");
+ Q_ASSERT_X(listener.data(), Q_FUNC_INFO, "invalid listener (nil)");
Q_ASSERT_X(channel, Q_FUNC_INFO, "invalid channel (nil)");
Q_ASSERT_X(q_ptr, Q_FUNC_INFO, "invalid q_ptr (null)");
@@ -293,7 +293,7 @@ bool QBluetoothServer::listen(const QBluetoothAddress &address, quint16 port)
OSXBluetooth::qt_test_iobluetooth_runloop();
- if (d_ptr->listener) {
+ if (d_ptr->listener.data()) {
qCWarning(QT_BT_OSX) << "already in listen mode, close server first";
return false;
}
diff --git x/qtconnectivity/src/bluetooth/qbluetoothserviceinfo_osx.mm y/qtconnectivity/src/bluetooth/qbluetoothserviceinfo_osx.mm
index 34de4695..7ce4c645 100644
--- x/qtconnectivity/src/bluetooth/qbluetoothserviceinfo_osx.mm
+++ y/qtconnectivity/src/bluetooth/qbluetoothserviceinfo_osx.mm
@@ -152,7 +152,7 @@ bool QBluetoothServiceInfoPrivate::unregisterService()
if (!registered)
return false;
- Q_ASSERT_X(serviceRecord, Q_FUNC_INFO, "service registered, but serviceRecord is nil");
+ Q_ASSERT_X(serviceRecord.data(), Q_FUNC_INFO, "service registered, but serviceRecord is nil");
[serviceRecord removeServiceRecord];
serviceRecord.reset(nil);
diff --git x/qtconnectivity/src/bluetooth/qbluetoothsocket_osx.mm y/qtconnectivity/src/bluetooth/qbluetoothsocket_osx.mm
index 7f630146..2a856092 100644
--- x/qtconnectivity/src/bluetooth/qbluetoothsocket_osx.mm
+++ y/qtconnectivity/src/bluetooth/qbluetoothsocket_osx.mm
@@ -101,13 +101,13 @@ void QBluetoothSocketPrivate::connectToService(const QBluetoothAddress &address,
if (socketType == QBluetoothServiceInfo::RfcommProtocol) {
rfcommChannel.reset([[ObjCRFCOMMChannel alloc] initWithDelegate:this]);
- if (rfcommChannel)
+ if (rfcommChannel.data())
status = [rfcommChannel connectAsyncToDevice:address withChannelID:port];
else
status = kIOReturnNoMemory;
} else if (socketType == QBluetoothServiceInfo::L2capProtocol) {
l2capChannel.reset([[ObjCL2CAPChannel alloc] initWithDelegate:this]);
- if (l2capChannel)
+ if (l2capChannel.data())
status = [l2capChannel connectAsyncToDevice:address withPSM:port];
else
status = kIOReturnNoMemory;
@@ -181,10 +181,10 @@ QString QBluetoothSocketPrivate::peerName() const
NSString *nsName = nil;
if (socketType == QBluetoothServiceInfo::RfcommProtocol) {
- if (rfcommChannel)
+ if (rfcommChannel.data())
nsName = [rfcommChannel peerName];
} else if (socketType == QBluetoothServiceInfo::L2capProtocol) {
- if (l2capChannel)
+ if (l2capChannel.data())
nsName = [l2capChannel peerName];
}
@@ -198,10 +198,10 @@ QBluetoothAddress QBluetoothSocketPrivate::peerAddress() const
{
BluetoothDeviceAddress addr = {};
if (socketType == QBluetoothServiceInfo::RfcommProtocol) {
- if (rfcommChannel)
+ if (rfcommChannel.data())
addr = [rfcommChannel peerAddress];
} else if (socketType == QBluetoothServiceInfo::L2capProtocol) {
- if (l2capChannel)
+ if (l2capChannel.data())
addr = [l2capChannel peerAddress];
}
@@ -211,10 +211,10 @@ QBluetoothAddress QBluetoothSocketPrivate::peerAddress() const
quint16 QBluetoothSocketPrivate::peerPort() const
{
if (socketType == QBluetoothServiceInfo::RfcommProtocol) {
- if (rfcommChannel)
+ if (rfcommChannel.data())
return [rfcommChannel getChannelID];
} else if (socketType == QBluetoothServiceInfo::L2capProtocol) {
- if (l2capChannel)
+ if (l2capChannel.data())
return [l2capChannel getPSM];
}
@@ -231,7 +231,7 @@ void QBluetoothSocketPrivate::_q_writeNotify()
Q_ASSERT_X(socketType == QBluetoothServiceInfo::L2capProtocol
|| socketType == QBluetoothServiceInfo::RfcommProtocol,
Q_FUNC_INFO, "invalid socket type");
- Q_ASSERT_X(l2capChannel || rfcommChannel, Q_FUNC_INFO,
+ Q_ASSERT_X(l2capChannel.data() || rfcommChannel.data(), Q_FUNC_INFO,
"invalid socket (no open channel)");
Q_ASSERT_X(q_ptr, Q_FUNC_INFO, "invalid q_ptr (null)");
@@ -275,13 +275,13 @@ bool QBluetoothSocketPrivate::setChannel(IOBluetoothRFCOMMChannel *channel)
openMode = QIODevice::ReadWrite;
rfcommChannel.reset([[ObjCRFCOMMChannel alloc] initWithDelegate:this channel:channel]);
- if (rfcommChannel) {// We do not handle errors, up to an external user.
+ if (rfcommChannel.data()) {// We do not handle errors, up to an external user.
q_ptr->setOpenMode(QIODevice::ReadWrite);
state = QBluetoothSocket::ConnectedState;
socketType = QBluetoothServiceInfo::RfcommProtocol;
}
- return rfcommChannel;
+ return rfcommChannel.data();
}
bool QBluetoothSocketPrivate::setChannel(IOBluetoothL2CAPChannel *channel)
@@ -299,13 +299,13 @@ bool QBluetoothSocketPrivate::setChannel(IOBluetoothL2CAPChannel *channel)
openMode = QIODevice::ReadWrite;
l2capChannel.reset([[ObjCL2CAPChannel alloc] initWithDelegate:this channel:channel]);
- if (l2capChannel) {// We do not handle errors, up to an external user.
+ if (l2capChannel.data()) {// We do not handle errors, up to an external user.
q_ptr->setOpenMode(QIODevice::ReadWrite);
state = QBluetoothSocket::ConnectedState;
socketType = QBluetoothServiceInfo::L2capProtocol;
}
- return l2capChannel;
+ return l2capChannel.data();
}
diff --git x/qtconnectivity/src/bluetooth/qbluetoothtransferreply_osx.mm y/qtconnectivity/src/bluetooth/qbluetoothtransferreply_osx.mm
index 65c8f82d..40a747f8 100644
--- x/qtconnectivity/src/bluetooth/qbluetoothtransferreply_osx.mm
+++ y/qtconnectivity/src/bluetooth/qbluetoothtransferreply_osx.mm
@@ -136,13 +136,13 @@ QBluetoothTransferReplyOSXPrivate::~QBluetoothTransferReplyOSXPrivate()
// The OBEX session will be closed then. If
// somehow IOBluetooth/OBEX still has a reference to our
// session, it will not call any of delegate's callbacks.
- if (session)
+ if (session.data())
[session closeSession];
}
bool QBluetoothTransferReplyOSXPrivate::isActive() const
{
- return agent || (session && [session hasActiveRequest]);
+ return agent.data() || (session.data() && [session hasActiveRequest]);
}
bool QBluetoothTransferReplyOSXPrivate::startOPP(const QBluetoothAddress &device)
@@ -218,7 +218,7 @@ void QBluetoothTransferReplyOSXPrivate::sendConnect(const QBluetoothAddress &dev
void QBluetoothTransferReplyOSXPrivate::sendPut()
{
Q_ASSERT_X(inputStream, Q_FUNC_INFO, "invalid input stream (null)");
- Q_ASSERT_X(session, Q_FUNC_INFO, "invalid OBEX session (nil)");
+ Q_ASSERT_X(session.data(), Q_FUNC_INFO, "invalid OBEX session (nil)");
Q_ASSERT_X([session isConnected], Q_FUNC_INFO, "not connected");
Q_ASSERT_X(![session hasActiveRequest], Q_FUNC_INFO,
"session already has an active request");
@@ -268,7 +268,7 @@ void QBluetoothTransferReplyOSXPrivate::OBEXConnectError(OBEXError errorCode, OB
Q_UNUSED(errorCode)
Q_UNUSED(response)
- if (session) {
+ if (session.data()) {
setReplyError(QBluetoothTransferReply::SessionError,
QCoreApplication::translate(TRANSFER_REPLY, TR_CONNECT_FAILED));
} else {
@@ -283,7 +283,7 @@ void QBluetoothTransferReplyOSXPrivate::OBEXConnectError(OBEXError errorCode, OB
void QBluetoothTransferReplyOSXPrivate::OBEXConnectSuccess()
{
// Now that OBEX connect succeeded, we can send an OBEX put request.
- if (!session) {
+ if (!session.data()) {
// We're still in OBEXConnect(), it'll take care of next steps.
return;
}
--
2.22.0

View File

@ -0,0 +1,97 @@
From cd287186955f1c654a1f35197f0515ffc222e734 Mon Sep 17 00:00:00 2001
From: Timur Pocheptsov <timur.pocheptsov@qt.io>
Date: Wed, 3 Jul 2019 15:26:31 +0200
Subject: [PATCH] Core/IO/Bluetooth - fix ambiguous conversions
... somewhat prospective fix (I do not have the new iOS yet), so far build
never failed with my current SDK.
Fixes: QTBUG-76847
Change-Id: Iab75c3cd47144cd83b679b1dbf82339e29c07bd1
---
src/bluetooth/osx/osxbtperipheralmanager.mm | 4 ++--
src/bluetooth/qbluetoothdevicediscoveryagent_ios.mm | 6 +++---
src/bluetooth/qlowenergycontroller_osx.mm | 6 +++---
3 files changed, 8 insertions(+), 8 deletions(-)
diff --git x/qtconnectivity/src/bluetooth/osx/osxbtperipheralmanager.mm y/qtconnectivity/src/bluetooth/osx/osxbtperipheralmanager.mm
index 1998340a..39f9808c 100644
--- x/qtconnectivity/src/bluetooth/osx/osxbtperipheralmanager.mm
+++ y/qtconnectivity/src/bluetooth/osx/osxbtperipheralmanager.mm
@@ -340,7 +340,7 @@ bool qt_validate_value_range(const QLowEnergyCharacteristicData &data)
- (void)startAdvertising
{
state = PeripheralState::waitingForPowerOn;
- if (manager)
+ if (manager.data())
[manager setDelegate:nil];
manager.reset([[CBPeripheralManager alloc] initWithDelegate:self
queue:OSXBluetooth::qt_LE_queue()]);
@@ -405,7 +405,7 @@ bool qt_validate_value_range(const QLowEnergyCharacteristicData &data)
- (void) addServicesToPeripheral
{
- Q_ASSERT(manager);
+ Q_ASSERT(manager.data());
if (nextServiceToAdd < services.size())
[manager addService:services[nextServiceToAdd++]];
diff --git x/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_ios.mm y/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_ios.mm
index c50d546d..557785b4 100644
--- x/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_ios.mm
+++ y/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_ios.mm
@@ -132,7 +132,7 @@ QBluetoothDeviceDiscoveryAgentPrivate::QBluetoothDeviceDiscoveryAgentPrivate(con
QBluetoothDeviceDiscoveryAgentPrivate::~QBluetoothDeviceDiscoveryAgentPrivate()
{
- if (inquiryLE) {
+ if (inquiryLE.data()) {
// We want the LE scan to stop as soon as possible.
if (dispatch_queue_t leQueue = OSXBluetooth::qt_LE_queue()) {
// Local variable to be retained ...
@@ -151,7 +151,7 @@ bool QBluetoothDeviceDiscoveryAgentPrivate::isActive() const
if (stopPending)
return false;
- return inquiryLE;
+ return !!inquiryLE.data();
}
void QBluetoothDeviceDiscoveryAgentPrivate::start(QBluetoothDeviceDiscoveryAgent::DiscoveryMethods /*methods*/)
@@ -178,7 +178,7 @@ void QBluetoothDeviceDiscoveryAgentPrivate::start(QBluetoothDeviceDiscoveryAgent
this, &QBluetoothDeviceDiscoveryAgentPrivate::LEdeviceFound);
inquiryLE.reset([[LEDeviceInquiryObjC alloc] initWithNotifier:notifier.data()]);
- if (inquiryLE)
+ if (inquiryLE.data())
notifier.take(); // Whatever happens next, inquiryLE is already the owner ...
dispatch_queue_t leQueue(qt_LE_queue());
diff --git x/qtconnectivity/src/bluetooth/qlowenergycontroller_osx.mm y/qtconnectivity/src/bluetooth/qlowenergycontroller_osx.mm
index 8bcdc22e..9aaee855 100644
--- x/qtconnectivity/src/bluetooth/qlowenergycontroller_osx.mm
+++ y/qtconnectivity/src/bluetooth/qlowenergycontroller_osx.mm
@@ -165,7 +165,7 @@ QLowEnergyControllerPrivateOSX::QLowEnergyControllerPrivateOSX(QLowEnergyControl
#endif
} else {
centralManager.reset([[ObjCCentralManager alloc] initWith:notifier.data()]);
- if (!centralManager) {
+ if (!centralManager.data()) {
qCWarning(QT_BT_OSX) << "failed to initialize central manager";
return;
}
@@ -200,9 +200,9 @@ QLowEnergyControllerPrivateOSX::~QLowEnergyControllerPrivateOSX()
bool QLowEnergyControllerPrivateOSX::isValid() const
{
#ifdef Q_OS_TVOS
- return centralManager;
+ return centralManager.data();
#else
- return centralManager || peripheralManager;
+ return centralManager.data() || peripheralManager.data();
#endif
}
--
2.22.0

View File

@ -0,0 +1,32 @@
From 9040ffde6a172f634249af58cd7f1bd3fcc33a00 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
Date: Tue, 30 Jul 2019 10:42:57 +0200
Subject: [PATCH] Disable qmltime for shared build
=== BUILD TARGET qmltime OF PROJECT qmltime WITH CONFIGURATION Release ===
Code Signing Error: Signing for "qmltime" requires a development team. Select a development team in the Signing & Capabilities editor.
Code Signing Error: Code signing is required for product type 'Application' in SDK 'iOS 13.0'
** BUILD FAILED **
Fixes: QTBUG-67135
---
tools/tools.pro | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git x/qtdeclarative/tools/tools.pro y/qtdeclarative/tools/tools.pro
index d3ec38071..d431ee835 100644
--- x/qtdeclarative/tools/tools.pro
+++ y/qtdeclarative/tools/tools.pro
@@ -20,8 +20,7 @@ qtConfig(thread):!android|android_app {
qtHaveModule(quick) {
!static: {
SUBDIRS += \
- qmlscene \
- qmltime
+ qmlscene
qtConfig(regularexpression):qtConfig(process) {
SUBDIRS += \
--
2.22.0

View File

@ -1,17 +1,18 @@
From e1c05843ae1609075807d5a789fc4e6cd8154520 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
Date: Mon, 25 Sep 2017 14:10:56 +0200
Subject: [PATCH] Disable unused imageformats
From 2674afcd19c8ce6a23a3c69bb9d41d82838adf86 Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Tue, 18 Jun 2019 07:47:39 +0200
Subject: Disable unused imageformats
Change-Id: Iace4d751b615d1e54d94e9f8ab774ef39b111a79
---
src/plugins/imageformats/imageformats.pro | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git x/qtimageformats/src/plugins/imageformats/imageformats.pro y/qtimageformats/src/plugins/imageformats/imageformats.pro
index d6c59ee..f1fb6d0 100644
index be1e20a..06feab3 100644
--- x/qtimageformats/src/plugins/imageformats/imageformats.pro
+++ y/qtimageformats/src/plugins/imageformats/imageformats.pro
@@ -18,8 +18,7 @@ config_jasper {
@@ -22,8 +22,7 @@ qtConfig(jasper) {
SUBDIRS += macjp2
}
@ -22,5 +23,5 @@ index d6c59ee..f1fb6d0 100644
webp
-}
--
2.16.2
2.21.0

View File

@ -0,0 +1,159 @@
From fdb01d0c01261008f9055339db55c6e9693f18c8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
Date: Tue, 23 Jul 2019 12:44:45 +0200
Subject: [PATCH 2/2] Fix build with -no-feature-printer on macOS
Fixes: QTBUG-62675
Change-Id: I3bfcd6d78c3124769ff8662941472333c795fdbe
---
src/plugins/platforms/cocoa/cocoa.pro | 42 +++++++++++--------
.../platforms/cocoa/qcocoanativeinterface.mm | 6 +--
.../platforms/cocoa/qpaintengine_mac.mm | 4 ++
3 files changed, 32 insertions(+), 20 deletions(-)
diff --git x/qtbase/src/plugins/platforms/cocoa/cocoa.pro y/qtbase/src/plugins/platforms/cocoa/cocoa.pro
index 083b7c1655..4249bae2b1 100644
--- x/qtbase/src/plugins/platforms/cocoa/cocoa.pro
+++ y/qtbase/src/plugins/platforms/cocoa/cocoa.pro
@@ -20,8 +20,6 @@ SOURCES += main.mm \
qcocoamenuloader.mm \
qcocoahelpers.mm \
qmultitouch_mac.mm \
- qcocoaaccessibilityelement.mm \
- qcocoaaccessibility.mm \
qcocoacursor.mm \
qcocoaclipboard.mm \
qcocoadrag.mm \
@@ -55,8 +53,6 @@ HEADERS += qcocoaintegration.h \
qcocoamenuloader.h \
qcocoahelpers.h \
qmultitouch_mac_p.h \
- qcocoaaccessibilityelement.h \
- qcocoaaccessibility.h \
qcocoacursor.h \
qcocoaclipboard.h \
qcocoadrag.h \
@@ -81,15 +77,24 @@ qtConfig(vulkan) {
HEADERS += qcocoavulkaninstance.h
}
+qtConfig(accessibility) {
+ SOURCES += qcocoaaccessibilityelement.mm \
+ qcocoaaccessibility.mm
+ HEADERS += qcocoaaccessibilityelement.h \
+ qcocoaaccessibility.h
+}
+
RESOURCES += qcocoaresources.qrc
LIBS += -framework AppKit -framework CoreServices -framework Carbon -framework IOKit -framework QuartzCore -framework CoreVideo -framework Metal -framework IOSurface -lcups
QT += \
core-private gui-private \
- accessibility_support-private clipboard_support-private theme_support-private \
+ clipboard_support-private theme_support-private \
fontdatabase_support-private graphics_support-private
+qtConfig(accessibility): QT += accessibility_support-private
+
qtConfig(vulkan): QT += vulkan_support-private
CONFIG += no_app_extension_api_only
@@ -97,17 +102,19 @@ CONFIG += no_app_extension_api_only
qtHaveModule(widgets) {
QT_FOR_CONFIG += widgets
- SOURCES += \
- qpaintengine_mac.mm \
- qprintengine_mac.mm \
- qcocoaprintersupport.mm \
- qcocoaprintdevice.mm \
-
- HEADERS += \
- qpaintengine_mac_p.h \
- qprintengine_mac_p.h \
- qcocoaprintersupport.h \
- qcocoaprintdevice.h \
+ SOURCES += qpaintengine_mac.mm
+ HEADERS += qpaintengine_mac_p.h
+
+ qtHaveModule(printsupport) {
+ SOURCES += \
+ qprintengine_mac.mm \
+ qcocoaprintersupport.mm \
+ qcocoaprintdevice.mm
+ HEADERS += \
+ qcocoaprintersupport.h \
+ qcocoaprintdevice.h \
+ qprintengine_mac_p.h
+ }
qtConfig(colordialog) {
SOURCES += qcocoacolordialoghelper.mm
@@ -124,7 +131,8 @@ qtHaveModule(widgets) {
HEADERS += qcocoafontdialoghelper.h
}
- QT += widgets-private printsupport-private
+ QT += widgets-private
+ qtHaveModule(printsupport): QT += printsupport-private
}
OTHER_FILES += cocoa.json
diff --git x/qtbase/src/plugins/platforms/cocoa/qcocoanativeinterface.mm y/qtbase/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
index 7979e430ac..8c0bd1d158 100644
--- x/qtbase/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
+++ y/qtbase/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
@@ -59,7 +59,7 @@
#include "qguiapplication.h"
#include <qdebug.h>
-#ifndef QT_NO_WIDGETS
+#if !defined(QT_NO_WIDGETS) && defined(QT_PRINTSUPPORT_LIB)
#include "qcocoaprintersupport.h"
#include "qprintengine_mac_p.h"
#include <qpa/qplatformprintersupport.h>
@@ -153,7 +153,7 @@ QPlatformNativeInterface::NativeResourceForIntegrationFunction QCocoaNativeInter
QPlatformPrinterSupport *QCocoaNativeInterface::createPlatformPrinterSupport()
{
-#if !defined(QT_NO_WIDGETS) && !defined(QT_NO_PRINTER)
+#if !defined(QT_NO_WIDGETS) && !defined(QT_NO_PRINTER) && defined(QT_PRINTSUPPORT_LIB)
return new QCocoaPrinterSupport();
#else
qFatal("Printing is not supported when Qt is configured with -no-widgets");
@@ -163,7 +163,7 @@ QPlatformPrinterSupport *QCocoaNativeInterface::createPlatformPrinterSupport()
void *QCocoaNativeInterface::NSPrintInfoForPrintEngine(QPrintEngine *printEngine)
{
-#if !defined(QT_NO_WIDGETS) && !defined(QT_NO_PRINTER)
+#if !defined(QT_NO_WIDGETS) && !defined(QT_NO_PRINTER) && defined(QT_PRINTSUPPORT_LIB)
QMacPrintEnginePrivate *macPrintEnginePriv = static_cast<QMacPrintEngine *>(printEngine)->d_func();
if (macPrintEnginePriv->state == QPrinter::Idle && !macPrintEnginePriv->isPrintSessionInitialized())
macPrintEnginePriv->initialize();
diff --git x/qtbase/src/plugins/platforms/cocoa/qpaintengine_mac.mm y/qtbase/src/plugins/platforms/cocoa/qpaintengine_mac.mm
index 3677877538..00b2267f0d 100644
--- x/qtbase/src/plugins/platforms/cocoa/qpaintengine_mac.mm
+++ y/qtbase/src/plugins/platforms/cocoa/qpaintengine_mac.mm
@@ -38,14 +38,18 @@
****************************************************************************/
#include "qpaintengine_mac_p.h"
+#if defined(QT_PRINTSUPPORT_LIB)
#include "qprintengine_mac_p.h"
+#endif
#include <qbitmap.h>
#include <qpaintdevice.h>
#include <qpainterpath.h>
#include <qpixmapcache.h>
#include <private/qpaintengine_raster_p.h>
+#if defined(QT_PRINTSUPPORT_LIB)
#include <qprinter.h>
+#endif
#include <qstack.h>
#include <qwidget.h>
#include <qvarlengtharray.h>
--
2.22.0

View File

@ -0,0 +1,54 @@
From d8ac3ad8e4dfc26c6b2f4bb696d4ec8cc23d8cbf Mon Sep 17 00:00:00 2001
From: Kai Koehne <kai.koehne@qt.io>
Date: Tue, 9 Jul 2019 17:19:26 +0200
Subject: [PATCH 1/2] Fix build with -no-feature-printer
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Skip printsupport subdirectory if printer feature is disabled. Also
removed android-embedded condition for the plugin: Such a
configuration should just disable the printer feature.
Fixes: QTBUG-76941
Change-Id: Ifca7d2311a575c1589ad6a87a775bd016591ee2c
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
---
src/src.pro | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git x/qtbase/src/src.pro y/qtbase/src/src.pro
index 1c76a2e46f..b704ccd7ab 100644
--- x/qtbase/src/src.pro
+++ y/qtbase/src/src.pro
@@ -1,8 +1,10 @@
TEMPLATE = subdirs
-QT_FOR_CONFIG += core-private gui-private
+QT_FOR_CONFIG += core-private gui-private printsupport
+
include($$OUT_PWD/corelib/qtcore-config.pri)
include($$OUT_PWD/gui/qtgui-config.pri)
+include($$OUT_PWD/printsupport/qtprintsupport-config.pri)
force_bootstrap|!qtConfig(commandlineparser): \
CONFIG += force_dbus_bootstrap
@@ -221,11 +223,13 @@ qtConfig(gui) {
src_testlib.depends += src_gui # if QtGui is enabled, QtTest requires QtGui's headers
qtConfig(widgets) {
SUBDIRS += src_tools_uic src_widgets
- !android-embedded: SUBDIRS += src_printsupport
TOOLS += src_tools_uic
src_plugins.depends += src_widgets
- !android-embedded: src_plugins.depends += src_printsupport
src_testlib.depends += src_widgets # if QtWidgets is enabled, QtTest requires QtWidgets's headers
+ qtConfig(printer) {
+ SUBDIRS += src_printsupport
+ src_plugins.depends += src_printsupport
+ }
qtConfig(opengl) {
SUBDIRS += src_opengl
src_plugins.depends += src_opengl
--
2.22.0

View File

@ -0,0 +1,25 @@
From c69fef8cde15345cb53748456a2e7136258f42a4 Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Mon, 16 Apr 2018 08:34:42 +0200
Subject: Remove Qt Labs specific plugins from the build
Change-Id: I8f1444d4be2806e983979ceff73223c7452da5c2
---
src/imports/imports.pro | 1 -
1 file changed, 1 deletion(-)
diff --git x/qtquickcontrols2/src/imports/imports.pro y/qtquickcontrols2/src/imports/imports.pro
index e32bded7..2345616e 100644
--- x/qtquickcontrols2/src/imports/imports.pro
+++ y/qtquickcontrols2/src/imports/imports.pro
@@ -1,7 +1,6 @@
TEMPLATE = subdirs
SUBDIRS += \
controls \
- calendar \
platform \
templates
--
2.21.0

View File

@ -0,0 +1,37 @@
From 0aa601d4cfdded1bd1c9924244795c4bb3d1b227 Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Mon, 16 Apr 2018 08:53:54 +0200
Subject: Remove unused plugins from the build
Change-Id: I780168aa4481c4bc6c9570effd80d34ce097d08a
---
src/imports/imports.pro | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git x/qtdeclarative/src/imports/imports.pro y/qtdeclarative/src/imports/imports.pro
index 24e93fec1..aced2e417 100644
--- x/qtdeclarative/src/imports/imports.pro
+++ y/qtdeclarative/src/imports/imports.pro
@@ -3,10 +3,8 @@ TEMPLATE = subdirs
SUBDIRS += \
builtins \
qtqml \
- models \
- labsmodels
+ models
-qtConfig(thread): SUBDIRS += folderlistmodel
qtHaveModule(sql): SUBDIRS += localstorage
qtConfig(settings): SUBDIRS += settings
qtConfig(statemachine): SUBDIRS += statemachine
@@ -21,7 +19,6 @@ qtHaveModule(quick) {
wavefrontmesh
qtHaveModule(testlib): SUBDIRS += testlib
- qtConfig(systemsemaphore): SUBDIRS += sharedimage
qtConfig(quick-particles): \
SUBDIRS += particles
--
2.21.0

View File

@ -0,0 +1,52 @@
From 0b9dc418d21a54b748637f4853dbe340c2dbc33e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
Date: Tue, 16 Oct 2018 17:55:29 +0200
Subject: [PATCH] disable designer
---
src/linguist/linguist.pro | 9 ---------
src/src.pro | 7 -------
2 files changed, 16 deletions(-)
diff --git x/qttools/src/linguist/linguist.pro y/qttools/src/linguist/linguist.pro
index 3f54c396..61903c08 100644
--- x/qttools/src/linguist/linguist.pro
+++ y/qttools/src/linguist/linguist.pro
@@ -3,16 +3,7 @@ SUBDIRS = \
lrelease \
lupdate \
lconvert
-!no-png:qtHaveModule(widgets) {
- QT_FOR_CONFIG += widgets
- qtConfig(process):qtConfig(pushbutton):qtConfig(toolbutton) {
- SUBDIRS += linguist
- }
-}
-qtNomakeTools( \
- linguist \
-)
equals(QMAKE_HOST.os, Windows): CMAKE_BIN_SUFFIX = ".exe"
diff --git x/qttools/src/src.pro y/qttools/src/src.pro
index 7a1af007..a9d4ac4b 100644
--- x/qttools/src/src.pro
+++ y/qttools/src/src.pro
@@ -5,13 +5,6 @@ qtHaveModule(widgets) {
message("Some graphics-related tools are unavailable without PNG support")
} else {
QT_FOR_CONFIG += widgets
- qtConfig(pushbutton):qtConfig(toolbutton) {
- SUBDIRS = assistant \
- designer \
- pixeltool
-
- linguist.depends = designer
- }
qtHaveModule(quick):qtConfig(thread):qtConfig(toolbutton): SUBDIRS += distancefieldgenerator
}
}
--
2.19.1

98
libs/qt-install.qs 100644
View File

@ -0,0 +1,98 @@
function Controller()
{
installer.setMessageBoxAutomaticAnswer("OverwriteTargetDirectory", QMessageBox.Yes);
installer.setMessageBoxAutomaticAnswer("TargetDirectoryInUse", QMessageBox.Ok);
installer.setMessageBoxAutomaticAnswer("cancelInstallation", QMessageBox.Yes);
}
Controller.prototype.WelcomePageCallback = function()
{
console.log("Welcome");
var widget = gui.currentPageWidget();
gui.clickButton(buttons.NextButton);
widget.completeChanged.connect(function()
{
gui.clickButton(buttons.NextButton);
});
}
Controller.prototype.CredentialsPageCallback = function()
{
console.log("Credentials");
gui.clickButton(buttons.NextButton);
}
Controller.prototype.IntroductionPageCallback = function()
{
console.log("Introduction");
gui.clickButton(buttons.NextButton);
}
Controller.prototype.TargetDirectoryPageCallback = function()
{
console.log("TargetDirectory: " + installer.value("TargetDir"));
gui.clickButton(buttons.NextButton);
}
Controller.prototype.ComponentSelectionPageCallback = function()
{
var packages = installer.value("Packages")
console.log("ComponentSelection: " + packages);
var widget = gui.currentPageWidget();
widget.deselectAll();
packages = packages.split(",");
var components = installer.components();
for (var i in packages)
{
pkg = packages[i];
for (var j in components)
{
if (components[j].name === pkg)
{
widget.selectComponent(pkg);
break;
}
}
}
gui.clickButton(buttons.NextButton);
}
Controller.prototype.LicenseAgreementPageCallback = function()
{
console.log("LicenseAgreement");
var widget = gui.currentPageWidget();
widget.AcceptLicenseRadioButton.setChecked(true);
gui.clickButton(buttons.NextButton);
}
Controller.prototype.ReadyForInstallationPageCallback = function()
{
console.log("ReadyForInstallation");
gui.clickButton(buttons.CommitButton);
}
Controller.prototype.PerformInstallationPageCallback = function()
{
console.log("PerformInstallation");
installer.installationFinished.connect(function()
{
gui.clickButton(buttons.NextButton);
});
}
Controller.prototype.FinishedPageCallback = function()
{
console.log("Finished");
var widget = gui.currentPageWidget();
if (widget.LaunchQtCreatorCheckBoxForm)
{
widget.LaunchQtCreatorCheckBoxForm.launchQtCreatorCheckBox.setChecked(false);
}
else if (widget.RunItCheckBox)
{
widget.RunItCheckBox.setChecked(false);
}
gui.clickButton(buttons.FinishButton);
}

95
libs/qt.cmake 100644
View File

@ -0,0 +1,95 @@
CMAKE_MINIMUM_REQUIRED(VERSION 3.11.0)
###########################################
# Usage: cmake -DVERSION=5.10.0 -P qt.cmake
###########################################
IF(NOT PACKAGES_DIR)
SET(PACKAGES_DIR $ENV{PACKAGES_DIR})
IF(NOT PACKAGES_DIR)
SET(PACKAGES_DIR ${CMAKE_BINARY_DIR})
ENDIF()
ENDIF()
MESSAGE(STATUS "Use PACKAGES_DIR: ${PACKAGES_DIR}")
IF(NOT VERSION)
MESSAGE(FATAL_ERROR "Please provide Qt version (-DVERSION=5.10.0)")
ENDIF()
FUNCTION(READ_FILE _filename _regex _out)
FILE(STRINGS "${CMAKE_BINARY_DIR}/${_filename}" content REGEX "${_regex}")
STRING(REGEX MATCH "${_regex}" _unused "${content}")
SET(${_out} ${CMAKE_MATCH_1} PARENT_SCOPE)
ENDFUNCTION()
FUNCTION(FETCH_XML _url _out_url)
SET(_filename Updates.xml)
FILE(DOWNLOAD "${_url}/${_filename}" "${CMAKE_BINARY_DIR}/${_filename}")
READ_FILE("${_filename}" "<DownloadableArchives>(.+)</DownloadableArchives>" archive)
READ_FILE("${_filename}" "<Name>(.+)</Name>" name)
READ_FILE("${_filename}" "<Version>([-|\.|0-9]+)<\/Version>" version)
SET(${_out_url} "${_url}/${name}/${version}${archive}" PARENT_SCOPE)
ENDFUNCTION()
FUNCTION(FETCH_HASH _url _hash_algo _out_hash)
STRING(TOLOWER "${_hash_algo}" suffix)
GET_FILENAME_COMPONENT(filename "${_url}" NAME)
FILE(DOWNLOAD "${_url}.${suffix}" "${CMAKE_BINARY_DIR}/${filename}.${suffix}")
FILE(STRINGS ${CMAKE_BINARY_DIR}/${filename}.${suffix} content)
STRING(REGEX MATCH "^[a-z|0-9]+" hash "${content}")
IF(NOT hash)
MESSAGE(FATAL_ERROR "Cannot fetch hash: ${_url}.${suffix}")
ENDIF()
SET(${_out_hash} ${hash} PARENT_SCOPE)
ENDFUNCTION()
INCLUDE(FetchContent)
SET(FETCHCONTENT_QUIET FALSE)
SET(HASH_ALGO SHA256)
SET(QT_SDK_URL https://download.qt.io/online/qtsdkrepository)
############################ OpenSSL
SET(OPENSSL_URL ${QT_SDK_URL}/linux_x64/desktop/tools_openssl_x64)
FETCH_XML("${OPENSSL_URL}" OPENSSL_URL)
FETCH_HASH("${OPENSSL_URL}" ${HASH_ALGO} OPENSSL_HASH)
FetchContent_Populate(openssl
URL ${OPENSSL_URL}
URL_HASH SHA256=${OPENSSL_HASH}
DOWNLOAD_DIR ${PACKAGES_DIR}
)
FetchContent_GetProperties(openssl)
FILE(COPY "${openssl_SOURCE_DIR}/OpenSSL/binary/" DESTINATION b/${VERSION}/gcc_64)
############################ Qt
STRING(SUBSTRING ${VERSION} 0 4 SUBVERSION)
SET(QT_FILE qt-opensource-linux-x64-${VERSION}.run)
SET(QT_URL https://download.qt.io/archive/qt/${SUBVERSION}/${VERSION}/${QT_FILE})
FETCH_HASH("${QT_URL}" ${HASH_ALGO} QT_HASH)
FetchContent_Populate(qt
URL ${QT_URL}
URL_HASH SHA256=${QT_HASH}
DOWNLOAD_DIR ${PACKAGES_DIR}
DOWNLOAD_NO_EXTRACT TRUE
)
SET(ENV{XDG_DATA_HOME} ${CMAKE_BINARY_DIR})
SET(ENV{XDG_DATA_DIRS} ${CMAKE_BINARY_DIR})
SET(ENV{HOME} ${CMAKE_BINARY_DIR})
STRING(REPLACE "." "" PKGVERSION "${VERSION}")
GET_FILENAME_COMPONENT(source_dir "${CMAKE_SCRIPT_MODE_FILE}" DIRECTORY)
EXECUTE_PROCESS(COMMAND chmod +x ${PACKAGES_DIR}/${QT_FILE})
EXECUTE_PROCESS(COMMAND ${PACKAGES_DIR}/${QT_FILE} --script ${source_dir}/qt-install.qs -v --platform minimal TargetDir=b Packages=qt.qt5.${PKGVERSION}.gcc_64)
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E create_symlink b/${VERSION}/gcc_64 dist)

View File

@ -1,78 +0,0 @@
From f1b12b8713a739f27d74e6911580b2e70aea2fa4 Mon Sep 17 00:00:00 2001
From: Pauli <paul.dale@oracle.com>
Date: Mon, 29 Oct 2018 06:50:51 +1000
Subject: [PATCH 1/3] DSA mod inverse fix
There is a side channel attack against the division used to calculate one of
the modulo inverses in the DSA algorithm. This change takes advantage of the
primality of the modulo and Fermat's little theorem to calculate the inverse
without leaking information.
Thanks to Samuel Weiser for finding and reporting this.
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
(Merged from https://github.com/openssl/openssl/pull/7487)
(cherry picked from commit 415c33563528667868c3c653a612e6fc8736fd79)
---
crypto/dsa/dsa_ossl.c | 32 +++++++++++++++++++++++++++++++-
1 file changed, 31 insertions(+), 1 deletion(-)
diff --git x/crypto/dsa/dsa_ossl.c y/crypto/dsa/dsa_ossl.c
index ac1f65a51a..ca20811200 100644
--- x/crypto/dsa/dsa_ossl.c
+++ y/crypto/dsa/dsa_ossl.c
@@ -23,6 +23,8 @@ static int dsa_do_verify(const unsigned char *dgst, int dgst_len,
DSA_SIG *sig, DSA *dsa);
static int dsa_init(DSA *dsa);
static int dsa_finish(DSA *dsa);
+static BIGNUM *dsa_mod_inverse_fermat(const BIGNUM *k, const BIGNUM *q,
+ BN_CTX *ctx);
static DSA_METHOD openssl_dsa_meth = {
"OpenSSL DSA method",
@@ -259,7 +261,7 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in,
goto err;
/* Compute part of 's = inv(k) (m + xr) mod q' */
- if ((kinv = BN_mod_inverse(NULL, k, dsa->q, ctx)) == NULL)
+ if ((kinv = dsa_mod_inverse_fermat(k, dsa->q, ctx)) == NULL)
goto err;
BN_clear_free(*kinvp);
@@ -393,3 +395,31 @@ static int dsa_finish(DSA *dsa)
BN_MONT_CTX_free(dsa->method_mont_p);
return 1;
}
+
+/*
+ * Compute the inverse of k modulo q.
+ * Since q is prime, Fermat's Little Theorem applies, which reduces this to
+ * mod-exp operation. Both the exponent and modulus are public information
+ * so a mod-exp that doesn't leak the base is sufficient. A newly allocated
+ * BIGNUM is returned which the caller must free.
+ */
+static BIGNUM *dsa_mod_inverse_fermat(const BIGNUM *k, const BIGNUM *q,
+ BN_CTX *ctx)
+{
+ BIGNUM *res = NULL;
+ BIGNUM *r, *e;
+
+ if ((r = BN_new()) == NULL)
+ return NULL;
+
+ BN_CTX_start(ctx);
+ if ((e = BN_CTX_get(ctx)) != NULL
+ && BN_set_word(r, 2)
+ && BN_sub(e, q, r)
+ && BN_mod_exp_mont(r, k, e, q, ctx, NULL))
+ res = r;
+ else
+ BN_free(r);
+ BN_CTX_end(ctx);
+ return res;
+}
--
2.19.1

View File

@ -1,30 +0,0 @@
From 2bcd8e6e1fe62ef5667c1bb8ad1bfe54a0aeaa99 Mon Sep 17 00:00:00 2001
From: Matt Caswell <matt@openssl.org>
Date: Wed, 24 Oct 2018 10:11:00 +0100
Subject: [PATCH] Ignore disabled ciphers when deciding if we are using ECC
use_ecc() was always returning 1 because there are default (TLSv1.3)
ciphersuites that use ECC - even if those ciphersuites are disabled by
other options.
Fixes #7471
---
ssl/statem/extensions_clnt.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git x/ssl/statem/extensions_clnt.c y/ssl/statem/extensions_clnt.c
index 4b5e6fe2b87..dcadc2a3231 100644
--- x/ssl/statem/extensions_clnt.c
+++ y/ssl/statem/extensions_clnt.c
@@ -128,6 +128,10 @@ static int use_ecc(SSL *s)
for (i = 0; i < end; i++) {
const SSL_CIPHER *c = sk_SSL_CIPHER_value(cipher_stack, i);
+ /* Skip disabled ciphers */
+ if (ssl_cipher_disabled(s, c, SSL_SECOP_CIPHER_SUPPORTED, 0))
+ continue;
+
alg_k = c->algorithm_mkey;
alg_a = c->algorithm_auth;
if ((alg_k & (SSL_kECDHE | SSL_kECDHEPSK))

View File

@ -1,109 +0,0 @@
From 8abfe72e8c1de1b95f50aa0d9134803b4d00070f Mon Sep 17 00:00:00 2001
From: Pauli <paul.dale@oracle.com>
Date: Wed, 24 Oct 2018 07:42:46 +1000
Subject: [PATCH 2/3] Timing vulnerability in DSA signature generation
(CVE-2018-0734).
Avoid a timing attack that leaks information via a side channel that
triggers when a BN is resized. Increasing the size of the BNs
prior to doing anything with them suppresses the attack.
Thanks due to Samuel Weiser for finding and locating this.
Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
(Merged from https://github.com/openssl/openssl/pull/7486)
(cherry picked from commit a9cfb8c2aa7254a4aa6a1716909e3f8cb78049b6)
---
crypto/dsa/dsa_ossl.c | 28 +++++++++++++++-------------
1 file changed, 15 insertions(+), 13 deletions(-)
diff --git x/crypto/dsa/dsa_ossl.c y/crypto/dsa/dsa_ossl.c
index ca20811200..2dd2d7489a 100644
--- x/crypto/dsa/dsa_ossl.c
+++ y/crypto/dsa/dsa_ossl.c
@@ -9,6 +9,7 @@
#include <stdio.h>
#include "internal/cryptlib.h"
+#include "internal/bn_int.h"
#include <openssl/bn.h>
#include <openssl/sha.h>
#include "dsa_locl.h"
@@ -180,9 +181,9 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in,
{
BN_CTX *ctx = NULL;
BIGNUM *k, *kinv = NULL, *r = *rp;
- BIGNUM *l, *m;
+ BIGNUM *l;
int ret = 0;
- int q_bits;
+ int q_bits, q_words;
if (!dsa->p || !dsa->q || !dsa->g) {
DSAerr(DSA_F_DSA_SIGN_SETUP, DSA_R_MISSING_PARAMETERS);
@@ -191,8 +192,7 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in,
k = BN_new();
l = BN_new();
- m = BN_new();
- if (k == NULL || l == NULL || m == NULL)
+ if (k == NULL || l == NULL)
goto err;
if (ctx_in == NULL) {
@@ -203,9 +203,9 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in,
/* Preallocate space */
q_bits = BN_num_bits(dsa->q);
- if (!BN_set_bit(k, q_bits)
- || !BN_set_bit(l, q_bits)
- || !BN_set_bit(m, q_bits))
+ q_words = bn_get_top(dsa->q);
+ if (!bn_wexpand(k, q_words + 2)
+ || !bn_wexpand(l, q_words + 2))
goto err;
/* Get random k */
@@ -240,14 +240,17 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in,
* small timing information leakage. We then choose the sum that is
* one bit longer than the modulus.
*
- * TODO: revisit the BN_copy aiming for a memory access agnostic
- * conditional copy.
+ * There are some concerns about the efficacy of doing this. More
+ * specificly refer to the discussion starting with:
+ * https://github.com/openssl/openssl/pull/7486#discussion_r228323705
+ * The fix is to rework BN so these gymnastics aren't required.
*/
if (!BN_add(l, k, dsa->q)
- || !BN_add(m, l, dsa->q)
- || !BN_copy(k, BN_num_bits(l) > q_bits ? l : m))
+ || !BN_add(k, l, dsa->q))
goto err;
+ BN_consttime_swap(BN_is_bit_set(l, q_bits), k, l, q_words + 2);
+
if ((dsa)->meth->bn_mod_exp != NULL) {
if (!dsa->meth->bn_mod_exp(dsa, r, dsa->g, k, dsa->p, ctx,
dsa->method_mont_p))
@@ -260,7 +263,7 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in,
if (!BN_mod(r, r, dsa->q, ctx))
goto err;
- /* Compute part of 's = inv(k) (m + xr) mod q' */
+ /* Compute part of 's = inv(k) (m + xr) mod q' */
if ((kinv = dsa_mod_inverse_fermat(k, dsa->q, ctx)) == NULL)
goto err;
@@ -275,7 +278,6 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in,
BN_CTX_free(ctx);
BN_clear_free(k);
BN_clear_free(l);
- BN_clear_free(m);
return ret;
}
--
2.19.1

View File

@ -1,44 +0,0 @@
From b1d6d55ece1c26fa2829e2b819b038d7b6d692b4 Mon Sep 17 00:00:00 2001
From: Pauli <paul.dale@oracle.com>
Date: Fri, 26 Oct 2018 10:54:58 +1000
Subject: [PATCH 3/3] Timing vulnerability in ECDSA signature generation
(CVE-2018-0735)
Preallocate an extra limb for some of the big numbers to avoid a reallocation
that can potentially provide a side channel.
Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
(Merged from https://github.com/openssl/openssl/pull/7486)
(cherry picked from commit 99540ec79491f59ed8b46b4edf130e17dc907f52)
---
crypto/ec/ec_mult.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git x/crypto/ec/ec_mult.c y/crypto/ec/ec_mult.c
index 7e1b3650e7..0e0a5e1394 100644
--- x/crypto/ec/ec_mult.c
+++ y/crypto/ec/ec_mult.c
@@ -206,8 +206,8 @@ int ec_scalar_mul_ladder(const EC_GROUP *group, EC_POINT *r,
*/
cardinality_bits = BN_num_bits(cardinality);
group_top = bn_get_top(cardinality);
- if ((bn_wexpand(k, group_top + 1) == NULL)
- || (bn_wexpand(lambda, group_top + 1) == NULL)) {
+ if ((bn_wexpand(k, group_top + 2) == NULL)
+ || (bn_wexpand(lambda, group_top + 2) == NULL)) {
ECerr(EC_F_EC_SCALAR_MUL_LADDER, ERR_R_BN_LIB);
goto err;
}
@@ -244,7 +244,7 @@ int ec_scalar_mul_ladder(const EC_GROUP *group, EC_POINT *r,
* k := scalar + 2*cardinality
*/
kbit = BN_is_bit_set(lambda, cardinality_bits);
- BN_consttime_swap(kbit, k, lambda, group_top + 1);
+ BN_consttime_swap(kbit, k, lambda, group_top + 2);
group_top = bn_get_top(group->field);
if ((bn_wexpand(s->X, group_top) == NULL)
--
2.19.1

View File

@ -1,11 +0,0 @@
--- x/Configurations/15-android.conf
+++ y/Configurations/15-android.conf
@@ -136,6 +136,8 @@
bn_ops => sub { android_ndk()->{bn_ops} },
bin_cflags => "-pie",
enable => [ ],
+ shlib_variant => '-gov',
+ shared_extension => '.so',
},
"android-arm" => {
################################################################

View File

@ -1,25 +0,0 @@
From 1d9b03157657e398a99f3f183bb7399b8905eb55 Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Wed, 22 Nov 2017 07:35:56 +0100
Subject: Add IsoDep to the techList on Android
Change-Id: I26c183c1344cd0d9323fcedde82347487eebdffb
---
src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java | 1 +
1 file changed, 1 insertion(+)
diff --git x/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java y/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java
index 345b87d3..a1ae5c37 100644
--- x/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java
+++ y/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java
@@ -127,6 +127,7 @@ public class QtNfc
filters[2] = new IntentFilter();
filters[2].addAction(NfcAdapter.ACTION_TECH_DISCOVERED);
String[][] techList = new String[][]{
+ {"android.nfc.tech.IsoDep"},
{"android.nfc.tech.Ndef"},
{"android.nfc.tech.NdefFormatable"}
};
--
2.18.0

View File

@ -1,30 +0,0 @@
From ca8779363fd30a1b8fd80ce4ebacc4741b041c76 Mon Sep 17 00:00:00 2001
From: BogDan Vatra <bogdan@kdab.com>
Date: Tue, 20 Mar 2018 10:36:43 +0200
Subject: [PATCH] Android: Fix crash
Android doesn't like nor use RTLD_NODELETE
Tasnk-number: QTBUG-64654
Change-Id: I2d884bbf22a681cca592942eba84ba97327ba974
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
---
src/corelib/plugin/qlibrary_unix.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git x/qtbase/src/corelib/plugin/qlibrary_unix.cpp y/qtbase/src/corelib/plugin/qlibrary_unix.cpp
index 23b9ad6434..296af9da7a 100644
--- x/qtbase/src/corelib/plugin/qlibrary_unix.cpp
+++ y/qtbase/src/corelib/plugin/qlibrary_unix.cpp
@@ -155,7 +155,7 @@ bool QLibraryPrivate::load_sys()
// Do not unload the library during dlclose(). Consequently, the
// library's specific static variables are not reinitialized if the
// library is reloaded with dlopen() at a later time.
-#ifdef RTLD_NODELETE
+#if defined(RTLD_NODELETE) && !defined(Q_OS_ANDROID)
if (loadHints & QLibrary::PreventUnloadHint) {
dlFlags |= RTLD_NODELETE;
}
--
2.19.1

View File

@ -1,37 +0,0 @@
From 48789f354ffe99aa28c08f55240e0b0a4deaa377 Mon Sep 17 00:00:00 2001
From: BogDan Vatra <bogdan@kdab.com>
Date: Mon, 1 Oct 2018 15:46:46 +0300
Subject: [PATCH] Android: fix compile with NDK r18+
In NDK r18, libc++.so was renamed to libc++.so.XX where XX is the Android
API level.
[ChangeLog][Android] Fixed build issue with NDK r18+.
Task-number: QTBUG-70631
Task-number: QTBUG-70779
Change-Id: Id0d2955648197e3054e3c69263b5a90d57964f6c
---
mkspecs/android-clang/qmake.conf | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git x/qtbase/mkspecs/android-clang/qmake.conf y/qtbase/mkspecs/android-clang/qmake.conf
index b665000d00..1f5e690329 100644
--- x/qtbase/mkspecs/android-clang/qmake.conf
+++ y/qtbase/mkspecs/android-clang/qmake.conf
@@ -40,7 +40,11 @@ QMAKE_CFLAGS += -DANDROID_HAS_WSTRING --sysroot=$$NDK_ROOT/sysroot \
ANDROID_SOURCES_CXX_STL_LIBDIR = $$NDK_ROOT/sources/cxx-stl/llvm-libc++/libs/$$ANDROID_TARGET_ARCH
ANDROID_STDCPP_PATH = $$ANDROID_SOURCES_CXX_STL_LIBDIR/libc++_shared.so
-ANDROID_CXX_STL_LIBS = -lc++
+
+exists($$ANDROID_SOURCES_CXX_STL_LIBDIR/libc++.so): \
+ ANDROID_CXX_STL_LIBS = -lc++
+else: \
+ ANDROID_CXX_STL_LIBS = $$ANDROID_SOURCES_CXX_STL_LIBDIR/libc++.so.$$replace(ANDROID_PLATFORM, "android-", "")
QMAKE_CFLAGS_OPTIMIZE_SIZE = -Oz
--
2.19.0

View File

@ -1,262 +0,0 @@
From 9f00179a95ef729fa7871b4d408c76bc50e4eb4e Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Wed, 20 Jun 2018 11:56:19 +0200
Subject: Introduce reportError to fix "QMetaObject::invokeMethod: No such method"
Task-number: QTBUG-67958
Change-Id: Ia5a21cb19f0318844ac436adcc3f0fff9a3185b5
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
---
src/nfc/qnearfieldtagtype1.cpp | 8 ++----
src/nfc/qnearfieldtarget.cpp | 13 ++++++++++
src/nfc/qnearfieldtarget.h | 2 ++
src/nfc/qnearfieldtarget_android.cpp | 36 +++++++--------------------
src/nfc/qnearfieldtarget_emulator.cpp | 20 ++++-----------
src/nfc/qnearfieldtarget_neard_p.h | 8 ++----
6 files changed, 33 insertions(+), 54 deletions(-)
diff --git x/qtconnectivity/src/nfc/qnearfieldtagtype1.cpp y/qtconnectivity/src/nfc/qnearfieldtagtype1.cpp
index 34f2c8b8..7f27fbe9 100644
--- x/qtconnectivity/src/nfc/qnearfieldtagtype1.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtagtype1.cpp
@@ -440,9 +440,7 @@ QNearFieldTarget::RequestId QNearFieldTagType1::readNdefMessages()
if (d->m_readNdefMessageState == QNearFieldTagType1Private::NotReadingNdefMessage) {
d->progressToNextNdefReadMessageState();
} else {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, NdefReadError),
- Q_ARG(QNearFieldTarget::RequestId, d->m_readNdefRequestId));
+ reportError(QNearFieldTarget::NdefReadError, d->m_readNdefRequestId);
}
return d->m_readNdefRequestId;
@@ -462,9 +460,7 @@ QNearFieldTarget::RequestId QNearFieldTagType1::writeNdefMessages(const QList<QN
d->m_ndefWriteMessages = messages;
d->progressToNextNdefWriteMessageState();
} else {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, NdefWriteError),
- Q_ARG(QNearFieldTarget::RequestId, d->m_readNdefRequestId));
+ reportError(QNearFieldTarget::NdefWriteError, d->m_readNdefRequestId);
}
return d->m_writeNdefRequestId;
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.cpp y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
index e642824b..e9a6fa11 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
@@ -530,4 +530,17 @@ bool QNearFieldTarget::handleResponse(const QNearFieldTarget::RequestId &id,
return true;
}
+/*!
+ \since 5.12
+
+ Reports the \a error for the request \a id by appending the signal emission to the event queue.
+*/
+void QNearFieldTarget::reportError(QNearFieldTarget::Error error,
+ const QNearFieldTarget::RequestId &id)
+{
+ QMetaObject::invokeMethod(this, [this, error, id]() {
+ Q_EMIT this->error(error, id);
+ }, Qt::QueuedConnection);
+}
+
QT_END_NAMESPACE
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.h y/qtconnectivity/src/nfc/qnearfieldtarget.h
index e51960f7..868b52d5 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget.h
+++ y/qtconnectivity/src/nfc/qnearfieldtarget.h
@@ -153,6 +153,8 @@ protected:
Q_INVOKABLE virtual bool handleResponse(const QNearFieldTarget::RequestId &id,
const QByteArray &response);
+ void reportError(QNearFieldTarget::Error error, const QNearFieldTarget::RequestId &id);
+
Q_SIGNALS:
void disconnected();
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
index e656996e..78da6ac2 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
@@ -147,25 +147,19 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
// Making sure that target is still in range
QNearFieldTarget::RequestId requestId(new QNearFieldTarget::RequestIdPrivate);
if (!m_intent.isValid()) {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
+ reportError(QNearFieldTarget::TargetOutOfRangeError, requestId);
return requestId;
}
// Getting Ndef technology object
if (!setTagTechnology({NDEFTECHNOLOGY})) {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnsupportedError),
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
+ reportError(QNearFieldTarget::UnsupportedError, requestId);
return requestId;
}
// Connect
if (!connect()) {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
+ reportError(QNearFieldTarget::TargetOutOfRangeError, requestId);
return requestId;
}
@@ -174,9 +168,7 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
if (catchJavaExceptions())
ndefMessage = QAndroidJniObject();
if (!ndefMessage.isValid()) {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::NdefReadError),
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
+ reportError(QNearFieldTarget::NdefReadError, requestId);
return requestId;
}
@@ -249,9 +241,7 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
// Connecting
QNearFieldTarget::RequestId requestId = QNearFieldTarget::RequestId(new QNearFieldTarget::RequestIdPrivate());
if (!connect()) {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
+ reportError(QNearFieldTarget::TargetOutOfRangeError, requestId);
return requestId;
}
@@ -263,9 +253,7 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
// Writing
QAndroidJniObject myNewVal = m_tagTech.callObjectMethod("transceive", "([B)[B", jba);
if (catchJavaExceptions()) {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::CommandError),
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
+ reportError(QNearFieldTarget::CommandError, requestId);
return requestId;
}
QByteArray result = jbyteArrayToQByteArray(myNewVal.object<jbyteArray>());
@@ -315,9 +303,7 @@ QNearFieldTarget::RequestId NearFieldTarget::writeNdefMessages(const QList<QNdef
// Connecting
QNearFieldTarget::RequestId requestId = QNearFieldTarget::RequestId(new QNearFieldTarget::RequestIdPrivate());
if (!connect()) {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
+ reportError(QNearFieldTarget::TargetOutOfRangeError, requestId);
return requestId;
}
@@ -328,18 +314,14 @@ QNearFieldTarget::RequestId NearFieldTarget::writeNdefMessages(const QList<QNdef
env->SetByteArrayRegion(jba.object<jbyteArray>(), 0, ba.size(), reinterpret_cast<jbyte*>(ba.data()));
QAndroidJniObject jmessage = QAndroidJniObject("android/nfc/NdefMessage", "([B)V", jba.object<jbyteArray>());
if (catchJavaExceptions()) {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnknownError),
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
+ reportError(QNearFieldTarget::UnknownError, requestId);
return requestId;
}
// Writing
m_tagTech.callMethod<void>(writeMethod, "(Landroid/nfc/NdefMessage;)V", jmessage.object<jobject>());
if (catchJavaExceptions()) {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::NdefWriteError),
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
+ reportError(QNearFieldTarget::NdefWriteError, requestId);
return requestId;
}
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_emulator.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_emulator.cpp
index 29b1f74d..030718cc 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_emulator.cpp
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_emulator.cpp
@@ -82,9 +82,7 @@ QNearFieldTarget::RequestId TagType1::sendCommand(const QByteArray &command)
// tag not in proximity
if (!tagMap.value(m_tag)) {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, TargetOutOfRangeError),
- Q_ARG(QNearFieldTarget::RequestId, id));
+ reportError(QNearFieldTarget::TargetOutOfRangeError, id);
return id;
}
@@ -93,17 +91,13 @@ QNearFieldTarget::RequestId TagType1::sendCommand(const QByteArray &command)
QByteArray response = m_tag->processCommand(command + char(crc & 0xff) + char(crc >> 8));
if (response.isEmpty()) {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, NoResponseError),
- Q_ARG(QNearFieldTarget::RequestId, id));
+ reportError(QNearFieldTarget::NoResponseError, id);
return id;
}
// check crc
if (qChecksum(response.constData(), response.length(), Qt::ChecksumItuV41) != 0) {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, ChecksumMismatchError),
- Q_ARG(QNearFieldTarget::RequestId, id));
+ reportError(QNearFieldTarget::ChecksumMismatchError, id);
return id;
}
@@ -152,9 +146,7 @@ QNearFieldTarget::RequestId TagType2::sendCommand(const QByteArray &command)
// tag not in proximity
if (!tagMap.value(m_tag)) {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, TargetOutOfRangeError),
- Q_ARG(QNearFieldTarget::RequestId, id));
+ reportError(QNearFieldTarget::TargetOutOfRangeError, id);
return id;
}
@@ -168,9 +160,7 @@ QNearFieldTarget::RequestId TagType2::sendCommand(const QByteArray &command)
if (response.length() > 1) {
// check crc
if (qChecksum(response.constData(), response.length(), Qt::ChecksumItuV41) != 0) {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, ChecksumMismatchError),
- Q_ARG(QNearFieldTarget::RequestId, id));
+ reportError(QNearFieldTarget::ChecksumMismatchError, id);
return id;
}
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.h y/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.h
index 053df141..625cee67 100644
--- x/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.h
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.h
@@ -359,9 +359,7 @@ private:
Q_EMIT this->requestCompleted(this->m_currentReadRequestId);
}, Qt::QueuedConnection);
} else {
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnknownError),
- Q_ARG(QNearFieldTarget::RequestId, m_currentReadRequestId));
+ this->reportError(QNearFieldTarget::UnknownError, m_currentReadRequestId);
}
m_readRequested = false;
@@ -389,9 +387,7 @@ private:
reply.waitForFinished();
if (reply.isError()) {
qCWarning(QT_NFC_NEARD) << "Error writing to NFC tag" << reply.error();
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnknownError),
- Q_ARG(QNearFieldTarget::RequestId, m_currentWriteRequestId));
+ this->reportError(QNearFieldTarget::UnknownError, m_currentWriteRequestId);
}
QMetaObject::invokeMethod(this, "ndefMessagesWritten", Qt::QueuedConnection);
--
2.19.1

View File

@ -1,135 +0,0 @@
From f65d3fbf6cc8a50a2b6b1b5632b9b9cf189054f0 Mon Sep 17 00:00:00 2001
From: Thiago Macieira <thiago.macieira@intel.com>
Date: Wed, 19 Sep 2018 00:05:54 -0500
Subject: [PATCH] Linux: Remove our use of syscall() for statx(2) and
renameat2(2)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Those system calls are present in glibc 2.28. Instead of using
syscall(3) to place the system calls directly, let's use only the glibc
functions. That also means we no longer accept ENOSYS from either
function, if they were detected in glibc.
Change-Id: I44e7d800c68141bdaae0fffd1555b4b8fe63786b
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
---
src/corelib/global/minimum-linux_p.h | 7 +++-
src/corelib/io/qfilesystemengine_unix.cpp | 45 ++---------------------
2 files changed, 9 insertions(+), 43 deletions(-)
diff --git x/qtbase/src/corelib/global/minimum-linux_p.h y/qtbase/src/corelib/global/minimum-linux_p.h
index bad2488b4d..9c074e13ba 100644
--- x/qtbase/src/corelib/global/minimum-linux_p.h
+++ y/qtbase/src/corelib/global/minimum-linux_p.h
@@ -75,9 +75,14 @@ QT_BEGIN_NAMESPACE
* - accept4 2.6.28
* - renameat2 3.16 QT_CONFIG(renameat2)
* - getrandom 3.17 QT_CONFIG(getentropy)
+ * - statx 4.11 QT_CONFIG(statx)
*/
-#if QT_CONFIG(getentropy)
+#if QT_CONFIG(statx)
+# define MINLINUX_MAJOR 4
+# define MINLINUX_MINOR 11
+# define MINLINUX_PATCH 0
+#elif QT_CONFIG(getentropy)
# define MINLINUX_MAJOR 3
# define MINLINUX_MINOR 17
# define MINLINUX_PATCH 0
diff --git x/qtbase/src/corelib/io/qfilesystemengine_unix.cpp y/qtbase/src/corelib/io/qfilesystemengine_unix.cpp
index deb4a9f220..40e8f82a80 100644
--- x/qtbase/src/corelib/io/qfilesystemengine_unix.cpp
+++ y/qtbase/src/corelib/io/qfilesystemengine_unix.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2017 Intel Corporation.
+** Copyright (C) 2018 Intel Corporation.
** Copyright (C) 2016 The Qt Company Ltd.
** Copyright (C) 2013 Samuel Gaist <samuel.gaist@edeltech.ch>
** Contact: https://www.qt.io/licensing/
@@ -88,7 +88,6 @@ extern "C" NSString *NSTemporaryDirectory();
#if defined(Q_OS_LINUX)
# include <sys/ioctl.h>
-# include <sys/syscall.h>
# include <sys/sendfile.h>
# include <linux/fs.h>
@@ -96,28 +95,6 @@ extern "C" NSString *NSTemporaryDirectory();
#ifndef FICLONE
# define FICLONE _IOW(0x94, 9, int)
#endif
-
-# if defined(Q_OS_ANDROID)
-// renameat2() and statx() are disabled on Android because quite a few systems
-// come with sandboxes that kill applications that make system calls outside a
-// whitelist and several Android vendors can't be bothered to update the list.
-# undef SYS_renameat2
-# undef SYS_statx
-# undef STATX_BASIC_STATS
-# else
-# if !QT_CONFIG(renameat2) && defined(SYS_renameat2)
-static int renameat2(int oldfd, const char *oldpath, int newfd, const char *newpath, unsigned flags)
-{ return syscall(SYS_renameat2, oldfd, oldpath, newfd, newpath, flags); }
-# endif
-
-# if !QT_CONFIG(statx) && defined(SYS_statx)
-# include <linux/stat.h>
-static int statx(int dirfd, const char *pathname, int flag, unsigned mask, struct statx *statxbuf)
-{ return syscall(SYS_statx, dirfd, pathname, flag, mask, statxbuf); }
-# elif !QT_CONFIG(statx) && !defined(SYS_statx)
-# undef STATX_BASIC_STATS
-# endif
-# endif // !Q_OS_ANDROID
#endif
#ifndef STATX_ALL
@@ -331,22 +308,8 @@ mtime(const T &statBuffer, int)
#ifdef STATX_BASIC_STATS
static int qt_real_statx(int fd, const char *pathname, int flags, struct statx *statxBuffer)
{
-#ifdef Q_ATOMIC_INT8_IS_SUPPORTED
- static QBasicAtomicInteger<qint8> statxTested = Q_BASIC_ATOMIC_INITIALIZER(0);
-#else
- static QBasicAtomicInt statxTested = Q_BASIC_ATOMIC_INITIALIZER(0);
-#endif
-
- if (statxTested.load() == -1)
- return -ENOSYS;
-
unsigned mask = STATX_BASIC_STATS | STATX_BTIME;
int ret = statx(fd, pathname, flags, mask, statxBuffer);
- if (ret == -1 && errno == ENOSYS) {
- statxTested.store(-1);
- return -ENOSYS;
- }
- statxTested.store(1);
return ret == -1 ? -errno : 0;
}
@@ -1282,14 +1245,12 @@ bool QFileSystemEngine::renameFile(const QFileSystemEntry &source, const QFileSy
if (Q_UNLIKELY(srcPath.isEmpty() || tgtPath.isEmpty()))
return emptyFileEntryWarning(), false;
-#if defined(RENAME_NOREPLACE) && (QT_CONFIG(renameat2) || defined(SYS_renameat2))
+#if defined(RENAME_NOREPLACE) && QT_CONFIG(renameat2)
if (renameat2(AT_FDCWD, srcPath, AT_FDCWD, tgtPath, RENAME_NOREPLACE) == 0)
return true;
- // If we're using syscall(), check for ENOSYS;
- // if renameat2 came from libc, we don't accept ENOSYS.
// We can also get EINVAL for some non-local filesystems.
- if ((QT_CONFIG(renameat2) || errno != ENOSYS) && errno != EINVAL) {
+ if (errno != EINVAL) {
error = QSystemError(errno, QSystemError::StandardLibraryError);
return false;
}
--
2.20.1

View File

@ -1,185 +0,0 @@
From 78ab3263caae535a3bd31fa35c733ae2a28ca8ba Mon Sep 17 00:00:00 2001
From: Kari Oikarinen <kari.oikarinen@qt.io>
Date: Wed, 26 Sep 2018 10:29:14 +0300
Subject: [PATCH] QObject: Fix isSignalConnected() when signals have been
disconnected
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The bitmap cache for the first 64 signals being connected was only set when the
connection is added. It was never unset when the connection was removed.
Internal use of the connectedSignals bitmap is not hurt by it occasionally
saying a signal is connected even though it is not, since the purpose of those
checks is avoiding expensive operations that are not necessary if nothing is
connected to the signal.
However, the public API using this cache meant that it also never spotted
signals being disconnected. This was not documented. Fix the behavior by only
using the cache if it is up to date. If it is not, use a slower path that gives
the correct answer.
To avoid making disconnections and QObject destructions slower, the cache is
only updated to unset disconnected signals when new signal connections are
added. No extra work is done in the common case where signals are only
removed in the end of the QObject's lifetime.
Fixes: QTBUG-32340
Change-Id: Ieb6e498060157153cec60d9c8f1c33056993fda1
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@qt.io>
---
src/corelib/kernel/qobject.cpp | 34 ++++++++----
.../corelib/kernel/qobject/tst_qobject.cpp | 53 +++++++++++++++++++
2 files changed, 76 insertions(+), 11 deletions(-)
diff --git x/qtbase/src/corelib/kernel/qobject.cpp y/qtbase/src/corelib/kernel/qobject.cpp
index c6fe787e03..4532eacf0c 100644
--- x/qtbase/src/corelib/kernel/qobject.cpp
+++ y/qtbase/src/corelib/kernel/qobject.cpp
@@ -418,6 +418,7 @@ void QObjectPrivate::cleanConnectionLists()
{
if (connectionLists->dirty && !connectionLists->inUse) {
// remove broken connections
+ bool allConnected = false;
for (int signal = -1; signal < connectionLists->count(); ++signal) {
QObjectPrivate::ConnectionList &connectionList =
(*connectionLists)[signal];
@@ -429,11 +430,13 @@ void QObjectPrivate::cleanConnectionLists()
QObjectPrivate::Connection **prev = &connectionList.first;
QObjectPrivate::Connection *c = *prev;
+ bool connected = false; // whether the signal is still connected somewhere
while (c) {
if (c->receiver) {
last = c;
prev = &c->nextConnectionList;
c = *prev;
+ connected = true;
} else {
QObjectPrivate::Connection *next = c->nextConnectionList;
*prev = next;
@@ -445,6 +448,14 @@ void QObjectPrivate::cleanConnectionLists()
// Correct the connection list's last pointer.
// As conectionList.last could equal last, this could be a noop
connectionList.last = last;
+
+ if (!allConnected && !connected && signal >= 0
+ && size_t(signal) < sizeof(connectedSignals) * 8) {
+ // This signal is no longer connected
+ connectedSignals[signal >> 5] &= ~(1 << (signal & 0x1f));
+ } else if (signal == -1) {
+ allConnected = connected;
+ }
}
connectionLists->dirty = false;
}
@@ -2503,19 +2514,20 @@ bool QObject::isSignalConnected(const QMetaMethod &signal) const
signalIndex += QMetaObjectPrivate::signalOffset(signal.mobj);
- if (signalIndex < sizeof(d->connectedSignals) * 8)
+ QMutexLocker locker(signalSlotLock(this));
+ if (!d->connectionLists)
+ return false;
+
+ if (signalIndex < sizeof(d->connectedSignals) * 8 && !d->connectionLists->dirty)
return d->isSignalConnected(signalIndex);
- QMutexLocker locker(signalSlotLock(this));
- if (d->connectionLists) {
- if (signalIndex < uint(d->connectionLists->count())) {
- const QObjectPrivate::Connection *c =
- d->connectionLists->at(signalIndex).first;
- while (c) {
- if (c->receiver)
- return true;
- c = c->nextConnectionList;
- }
+ if (signalIndex < uint(d->connectionLists->count())) {
+ const QObjectPrivate::Connection *c =
+ d->connectionLists->at(signalIndex).first;
+ while (c) {
+ if (c->receiver)
+ return true;
+ c = c->nextConnectionList;
}
}
return false;
diff --git x/qtbase/tests/auto/corelib/kernel/qobject/tst_qobject.cpp y/qtbase/tests/auto/corelib/kernel/qobject/tst_qobject.cpp
index ec57522f48..20ce905265 100644
--- x/qtbase/tests/auto/corelib/kernel/qobject/tst_qobject.cpp
+++ y/qtbase/tests/auto/corelib/kernel/qobject/tst_qobject.cpp
@@ -104,6 +104,7 @@ private slots:
void deleteQObjectWhenDeletingEvent();
void overloads();
void isSignalConnected();
+ void isSignalConnectedAfterDisconnection();
void qMetaObjectConnect();
void qMetaObjectDisconnectOne();
void sameName();
@@ -3843,6 +3844,58 @@ void tst_QObject::isSignalConnected()
QVERIFY(!o.isSignalConnected(QMetaMethod()));
}
+void tst_QObject::isSignalConnectedAfterDisconnection()
+{
+ ManySignals o;
+ const QMetaObject *meta = o.metaObject();
+
+ const QMetaMethod sig00 = meta->method(meta->indexOfSignal("sig00()"));
+ QVERIFY(!o.isSignalConnected(sig00));
+ QObject::connect(&o, &ManySignals::sig00, qt_noop);
+ QVERIFY(o.isSignalConnected(sig00));
+ QVERIFY(QObject::disconnect(&o, &ManySignals::sig00, 0, 0));
+ QVERIFY(!o.isSignalConnected(sig00));
+
+ const QMetaMethod sig69 = meta->method(meta->indexOfSignal("sig69()"));
+ QVERIFY(!o.isSignalConnected(sig69));
+ QObject::connect(&o, &ManySignals::sig69, qt_noop);
+ QVERIFY(o.isSignalConnected(sig69));
+ QVERIFY(QObject::disconnect(&o, &ManySignals::sig69, 0, 0));
+ QVERIFY(!o.isSignalConnected(sig69));
+
+ {
+ ManySignals o2;
+ QObject::connect(&o, &ManySignals::sig00, &o2, &ManySignals::sig00);
+ QVERIFY(o.isSignalConnected(sig00));
+ // o2 is destructed
+ }
+ QVERIFY(!o.isSignalConnected(sig00));
+
+ const QMetaMethod sig01 = meta->method(meta->indexOfSignal("sig01()"));
+ QObject::connect(&o, &ManySignals::sig00, qt_noop);
+ QObject::connect(&o, &ManySignals::sig01, qt_noop);
+ QObject::connect(&o, &ManySignals::sig69, qt_noop);
+ QVERIFY(o.isSignalConnected(sig00));
+ QVERIFY(o.isSignalConnected(sig01));
+ QVERIFY(o.isSignalConnected(sig69));
+ QVERIFY(QObject::disconnect(&o, &ManySignals::sig69, 0, 0));
+ QVERIFY(o.isSignalConnected(sig00));
+ QVERIFY(o.isSignalConnected(sig01));
+ QVERIFY(!o.isSignalConnected(sig69));
+ QVERIFY(QObject::disconnect(&o, &ManySignals::sig00, 0, 0));
+ QVERIFY(!o.isSignalConnected(sig00));
+ QVERIFY(o.isSignalConnected(sig01));
+ QVERIFY(!o.isSignalConnected(sig69));
+ QObject::connect(&o, &ManySignals::sig69, qt_noop);
+ QVERIFY(!o.isSignalConnected(sig00));
+ QVERIFY(o.isSignalConnected(sig01));
+ QVERIFY(o.isSignalConnected(sig69));
+ QVERIFY(QObject::disconnect(&o, &ManySignals::sig01, 0, 0));
+ QVERIFY(!o.isSignalConnected(sig00));
+ QVERIFY(!o.isSignalConnected(sig01));
+ QVERIFY(o.isSignalConnected(sig69));
+}
+
void tst_QObject::qMetaObjectConnect()
{
SenderObject *s = new SenderObject;
--
2.19.1

View File

@ -1,108 +0,0 @@
From 2e492dc6a6cf9e73a04f65e133ea4e97324a68da Mon Sep 17 00:00:00 2001
From: Robbert Proost <robbert.proost@outlook.com>
Date: Thu, 18 Jan 2018 09:52:49 +0100
Subject: [PATCH] QUrl: Support IPv6 addresses with zone id
Task-number: QTBUG-25550
Change-Id: I37ec02b655abe2779aa11945e20550ce00e43723
---
src/corelib/io/qurl.cpp | 63 ++++++++++++++++---------
tests/auto/corelib/io/qurl/tst_qurl.cpp | 52 ++++++++++++++++++++
2 files changed, 92 insertions(+), 23 deletions(-)
diff --git x/qtbase/src/corelib/io/qurl.cpp y/qtbase/src/corelib/io/qurl.cpp
index 4587b9fcd6..e2a66c8459 100644
--- x/qtbase/src/corelib/io/qurl.cpp
+++ y/qtbase/src/corelib/io/qurl.cpp
@@ -1203,16 +1203,18 @@ inline void QUrlPrivate::setQuery(const QString &value, int from, int iend)
inline void QUrlPrivate::appendHost(QString &appendTo, QUrl::FormattingOptions options) const
{
- // EncodeUnicode is the only flag that matters
- if ((options & QUrl::FullyDecoded) == QUrl::FullyDecoded)
- options = 0;
- else
- options &= QUrl::EncodeUnicode;
if (host.isEmpty())
return;
if (host.at(0).unicode() == '[') {
- // IPv6Address and IPvFuture address never require any transformation
- appendTo += host;
+ // IPv6 addresses might contain a zone-id which needs to be recoded
+ QString hostInCorrectFormat;
+ if (options != 0)
+ qt_urlRecode(hostInCorrectFormat, host.constBegin(), host.constEnd(), options, 0);
+
+ if (hostInCorrectFormat.isEmpty())
+ hostInCorrectFormat = host;
+
+ appendTo += hostInCorrectFormat;
} else {
// this is either an IPv4Address or a reg-name
// if it is a reg-name, it is already stored in Unicode form
@@ -1278,31 +1280,46 @@ static const QChar *parseIpFuture(QString &host, const QChar *begin, const QChar
// ONLY the IPv6 address is parsed here, WITHOUT the brackets
static const QChar *parseIp6(QString &host, const QChar *begin, const QChar *end, QUrl::ParsingMode mode)
{
- QIPAddressUtils::IPv6Address address;
- const QChar *ret = QIPAddressUtils::parseIp6(address, begin, end);
- if (ret) {
- // this struct is kept in automatic storage because it's only 4 bytes
+ QString decoded;
+ if (mode == QUrl::TolerantMode) {
const ushort decodeColon[] = { decode(':'), 0 };
+ if (qt_urlRecode(decoded, begin, end, QUrl::ComponentFormattingOption::PrettyDecoded, decodeColon) == 0) {
+ decoded = QString(begin, end-begin);
+ }
+ }
+ else {
+ decoded = QString(begin, end-begin);
+ }
- // IPv6 failed parsing, check if it was a percent-encoded character in
- // the middle and try again
- QString decoded;
- if (mode == QUrl::TolerantMode && qt_urlRecode(decoded, begin, end, 0, decodeColon)) {
- // recurse
- // if the parsing fails again, the qt_urlRecode above will return 0
- ret = parseIp6(host, decoded.constBegin(), decoded.constEnd(), mode);
+ const QLatin1String zoneIdIdentifier("%25");
+ QIPAddressUtils::IPv6Address address;
+ QString zoneId;
+
+ const QChar *endBeforeZoneId = decoded.constEnd();
+
+ int zoneIdPosition = decoded.indexOf(zoneIdIdentifier);
+ if ((zoneIdPosition != -1) && (decoded.lastIndexOf(zoneIdIdentifier) == zoneIdPosition)) {
+ zoneId = decoded.mid(zoneIdPosition + zoneIdIdentifier.size());
+ endBeforeZoneId = decoded.constBegin() + zoneIdPosition;
- // we can't return ret, otherwise it would be dangling
- return ret ? end : 0;
+ if (zoneId.isEmpty() == true) {
+ return end;
}
+ }
- // no transformation, nothing to re-parse
- return ret;
+ const QChar *ret = QIPAddressUtils::parseIp6(address, decoded.constBegin(), endBeforeZoneId);
+ if (ret) {
+ return begin + (ret - decoded.constBegin());
}
- host.reserve(host.size() + (end - begin));
+ host.reserve(host.size() + (decoded.constEnd() - decoded.constBegin()));
host += QLatin1Char('[');
QIPAddressUtils::toString(host, address);
+
+ if (zoneId.isEmpty() == false) {
+ host += zoneIdIdentifier;
+ host += zoneId;
+ }
host += QLatin1Char(']');
return 0;
}
--
2.18.0

View File

@ -1,52 +0,0 @@
From 2e80dec588c21cfeb086912cf6c6a011c6b6b896 Mon Sep 17 00:00:00 2001
From f3e9a6e63740d922577d331f6cbe57fd43888472 Mon Sep 17 00:00:00 2001
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
Date: Mon, 16 Apr 2018 08:34:42 +0200
Subject: Remove Qt Labs specific plugins from the build
---
qtquickcontrols2/src/imports/imports.pro | 2 --
qtdeclarative/src/imports/imports.pro | 4 ----
2 file changed, 6 deletions(-)
diff --git x/qtquickcontrols2/src/imports/imports.pro y/qtquickcontrols2/src/imports/imports.pro
index e32bded7..944c9292 100644
--- x/qtquickcontrols2/src/imports/imports.pro
+++ y/qtquickcontrols2/src/imports/imports.pro
@@ -1,8 +1,6 @@
TEMPLATE = subdirs
SUBDIRS += \
controls \
- calendar \
- platform \
templates
SUBDIRS += \
diff --git x/qtdeclarative/src/imports/imports.pro y/qtdeclarative/src/imports/imports.pro
index 5d7e43488..33390bc42 100644
--- x/qtdeclarative/src/imports/imports.pro
+++ y/qtdeclarative/src/imports/imports.pro
@@ -5,7 +5,6 @@
SUBDIRS += \
builtins \
qtqml \
- folderlistmodel \
models
qtHaveModule(sql): SUBDIRS += localstorage
@@ -14,13 +13,11 @@
qtHaveModule(quick) {
SUBDIRS += \
- handlers \
layouts \
qtquick2 \
window
qtHaveModule(testlib): SUBDIRS += testlib
- qtConfig(systemsemaphore): SUBDIRS += sharedimage
qtConfig(quick-particles): \
SUBDIRS += particles
--
2.16.2

View File

@ -1,55 +0,0 @@
From 4ab766863d88a491f91fa81731dbde75d0122d89 Mon Sep 17 00:00:00 2001
From: Timur Pocheptsov <timur.pocheptsov@qt.io>
Date: Mon, 14 May 2018 12:41:23 +0200
Subject: [PATCH] Use QUrl::toString() when forming the 'Host' header
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This allows to correctly use IPv6 literals and also
deals (correctly) with a port (if it's set at all).
Task-number: QTBUG-68245
Change-Id: I6d29543887c4ab58d70f0970a6f0a1b822c301df
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
---
src/websockets/qwebsocket_p.cpp | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
diff --git x/qtwebsockets/src/websockets/qwebsocket_p.cpp y/qtwebsockets/src/websockets/qwebsocket_p.cpp
index d233b66..9b27ad2 100644
--- x/qtwebsockets/src/websockets/qwebsocket_p.cpp
+++ y/qtwebsockets/src/websockets/qwebsocket_p.cpp
@@ -1108,16 +1108,18 @@ void QWebSocketPrivate::processStateChanged(QAbstractSocket::SocketState socketS
headers << qMakePair(QString::fromLatin1(key),
QString::fromLatin1(m_request.rawHeader(key)));
- const QString handshake =
- createHandShakeRequest(m_resourceName,
- m_request.url().host()
- % QStringLiteral(":")
- % QString::number(m_request.url().port(port)),
- origin(),
- QString(),
- QString(),
- m_key,
- headers);
+ const auto format = QUrl::RemoveScheme | QUrl::RemoveUserInfo
+ | QUrl::RemovePath | QUrl::RemoveQuery
+ | QUrl::RemoveFragment | QUrl::RemovePort;
+ const QString host = m_request.url().toString(format).mid(2);
+ const QString handshake = createHandShakeRequest(m_resourceName,
+ host % QStringLiteral(":")
+ % QString::number(m_request.url().port(port)),
+ origin(),
+ QString(),
+ QString(),
+ m_key,
+ headers);
if (handshake.isEmpty()) {
m_pSocket->abort();
Q_EMIT q->error(QAbstractSocket::ConnectionRefusedError);
--
2.19.0

View File

@ -1,33 +0,0 @@
From bbd5c6feea8632c8321d3cd7a16a262d90f856e8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
Date: Thu, 22 Nov 2018 11:44:39 +0100
Subject: [PATCH] Use user provided session data if available
If a user uses persistent sessions and provide the session to
Qt again with setSessionTicket it should be used with a higher
priority.
This is also a work-around for QTBUG-71967.
Change-Id: I7351b669b6de2863136d6106dc4f73fa5c7b8c51
---
src/network/ssl/qsslcontext_openssl.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git x/qtbase/src/network/ssl/qsslcontext_openssl.cpp y/qtbase/src/network/ssl/qsslcontext_openssl.cpp
index 41b759364b..24dbc9ecbc 100644
--- x/qtbase/src/network/ssl/qsslcontext_openssl.cpp
+++ y/qtbase/src/network/ssl/qsslcontext_openssl.cpp
@@ -134,8 +134,9 @@ SSL* QSslContext::createSsl()
SSL* ssl = q_SSL_new(ctx);
q_SSL_clear(ssl);
- if (!session && !sessionASN1().isEmpty()
+ if (!m_sessionASN1.isEmpty()
&& !sslConfiguration.testSslOption(QSsl::SslOptionDisableSessionPersistence)) {
+ q_SSL_SESSION_free(session);
const unsigned char *data = reinterpret_cast<const unsigned char *>(m_sessionASN1.constData());
session = q_d2i_SSL_SESSION(0, &data, m_sessionASN1.size()); // refcount is 1 already, set by function above
}
--
2.19.1

View File

@ -1,30 +0,0 @@
From ec00fb42be3206956fd9ac7518018b47652f2bb8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
Date: Fri, 28 Dec 2018 16:12:16 +0100
Subject: [PATCH] Work-Around FreeBSD v12 build
https://bugreports.qt.io/browse/QTBUG-72775
Change-Id: Ib39e8e488c2abd0321e91acd15614085c7e2156b
---
src/network/kernel/qnetworkinterface_unix.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git x/qtbase/src/network/kernel/qnetworkinterface_unix.cpp y/qtbase/src/network/kernel/qnetworkinterface_unix.cpp
index d69fc47667..eebca77189 100644
--- x/qtbase/src/network/kernel/qnetworkinterface_unix.cpp
+++ y/qtbase/src/network/kernel/qnetworkinterface_unix.cpp
@@ -463,8 +463,10 @@ static QNetworkInterface::InterfaceType probeIfType(int socket, int iftype, stru
case IFM_ETHER:
return QNetworkInterface::Ethernet;
+#ifndef Q_OS_FREEBSD
case IFM_FDDI:
return QNetworkInterface::Fddi;
+#endif
case IFM_IEEE80211:
return QNetworkInterface::Ieee80211;
--
2.20.1

View File

@ -1,132 +0,0 @@
From d64ee0c6be7e9ce672382709d8ea38e30d1d5e0d Mon Sep 17 00:00:00 2001
From: Oliver Wolff <oliver.wolff@qt.io>
Date: Tue, 12 Dec 2017 20:02:55 +0100
Subject: configure: detect fxc.exe more thoroughly
When building ANGLE, we need the shader compiler (fxc.exe), which is not
shipped with MinGW. Previously, we required an installed DirectX SDK.
For Windows versions >= 8, the DX SDK is also part of the Windows Kit,
so we also allow the user to specify the location of the Windows Kit.
We also detect fxc on 64-bit hosts now, and in newer SDK versions which
version the binary directory.
The detected binary is now exported by configure, so the ANGLE project
file does not need to duplicate the logic anymore.
Task-number: QTBUG-52487
Change-Id: I41a17992909041dd84291b69498195cc8b8fab8a
---
src/angle/src/common/common.pri | 16 +---------------
src/gui/configure.json | 11 +++--------
src/gui/configure.pri | 31 +++++++++++++++++++++++++++----
3 files changed, 31 insertions(+), 27 deletions(-)
diff --git x/qtbase/src/angle/src/common/common.pri y/qtbase/src/angle/src/common/common.pri
index c1fad14951..2c0af02b58 100644
--- x/qtbase/src/angle/src/common/common.pri
+++ y/qtbase/src/angle/src/common/common.pri
@@ -21,20 +21,6 @@ lib_replace.replace = \$\$\$\$[QT_INSTALL_LIBS]
lib_replace.CONFIG = path
QMAKE_PRL_INSTALL_REPLACE += lib_replace
-# DirectX is included in the Windows 8 Kit, but everything else requires the DX SDK.
-winrt|msvc {
- FXC = fxc.exe
-} else {
- DX_DIR = $$(DXSDK_DIR)
- isEmpty(DX_DIR) {
- error("Cannot determine DirectX SDK location. Please set DXSDK_DIR environment variable.")
- }
-
- equals(QMAKE_TARGET.arch, x86_64) {
- FXC = \"$${DX_DIR}Utilities\\bin\\x64\\fxc.exe\"
- } else {
- FXC = \"$${DX_DIR}Utilities\\bin\\x86\\fxc.exe\"
- }
-}
+FXC = $$shell_quote($$shell_path($$QMAKE_FXC_LOCATION))
static: DEFINES *= LIBGLESV2_EXPORT_H_ ANGLE_EXPORT=
diff --git x/qtbase/src/gui/configure.json y/qtbase/src/gui/configure.json
index 4145ceddf6..2a96bc5a75 100644
--- x/qtbase/src/gui/configure.json
+++ y/qtbase/src/gui/configure.json
@@ -702,10 +702,6 @@
}
},
- "testTypeAliases": {
- "files": [ "fxc" ]
- },
-
"tests": {
"angle_d3d11_qdtd": {
"label": "D3D11_QUERY_DATA_TIMESTAMP_DISJOINT",
@@ -721,9 +717,7 @@
"fxc": {
"label": "Direct3D Shader Compiler",
"type": "fxc",
- "files": [
- "fxc.exe"
- ]
+ "log": "value"
},
"egl-x11": {
"label": "EGL on X11",
@@ -976,7 +970,8 @@
"condition": "features.dxguid && tests.fxc && (features.direct3d9 || (config.winrt && features.direct3d11 && libs.d3dcompiler))",
"output": [
"publicFeature",
- { "type": "define", "name": "QT_OPENGL_ES_2_ANGLE" }
+ { "type": "define", "name": "QT_OPENGL_ES_2_ANGLE" },
+ { "type": "varAssign", "name": "QMAKE_FXC_LOCATION", "value": "tests.fxc.value" }
]
},
"angle_d3d11_qdtd": {
diff --git x/qtbase/src/gui/configure.pri y/qtbase/src/gui/configure.pri
index f53a93063c..bc27a756a3 100644
--- x/qtbase/src/gui/configure.pri
+++ y/qtbase/src/gui/configure.pri
@@ -20,12 +20,35 @@ defineTest(qtConfLibrary_freetype) {
# DXSDK_DIR variable. Starting with Windows Kit 8, it is included in
# the Windows SDK.
defineTest(qtConfTest_fxc) {
- dxdir = $$getenv("DXSDK_DIR")
- !isEmpty(dxdir) {
- EXTRA_PATH += $$dxdir/Utilities/bin/x86
+ !mingw {
+ fxc = $$qtConfFindInPath("fxc.exe")
+ } else {
+ equals(QMAKE_HOST.arch, x86_64): \
+ fns = x64/fxc.exe
+ else: \
+ fns = x86/fxc.exe
+ dxdir = $$(DXSDK_DIR)
+ !isEmpty(dxdir) {
+ fxc = $$dxdir/Utilities/bin/$$fns
+ } else {
+ winkitbindir = $$(WindowsSdkVerBinPath)
+ !isEmpty(winkitbindir) {
+ fxc = $$winkitbindir/$$fns
+ } else {
+ winkitdir = $$(WindowsSdkDir)
+ !isEmpty(winkitdir): \
+ fxc = $$winkitdir/bin/$$fns
+ }
+ }
}
- qtConfTest_files($${1}): return(true)
+ !isEmpty(fxc):exists($$fxc) {
+ $${1}.value = $$clean_path($$fxc)
+ export($${1}.value)
+ $${1}.cache += value
+ export($${1}.cache)
+ return(true)
+ }
return(false)
}
--
2.17.0

View File

@ -1,442 +0,0 @@
From 6b73c48ac35de82b95b74f8dd614fe282209cd61 Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Date: Tue, 12 Dec 2017 12:21:16 +0100
Subject: configure: refactor directx checks
properly atomize the libraries and express their dependencies, and
adjust the project files accordingly.
note that we don't try to use any additional paths, as all SDKs we
currently support have built-in directx 11 support:
- msvc2013 comes with win sdk 8.1; that is also used for win7 targets
- mingw-64 5.3 (though this one is missing fxc, which is why the code
path for using an external sdk for that remains)
Change-Id: Ib44e389ef46567308293c2bbcad20a96e8ef70c7
---
src/angle/src/common/gles_common.pri | 6 +-
src/angle/src/libEGL/libEGL.pro | 5 +-
src/gui/configure.json | 176 ++++++++++++++----
src/gui/configure.pri | 19 +-
.../fontdatabases/windows/windows.pri | 9 +-
.../fontdatabases/winrt/winrt.pri | 4 +-
src/plugins/platforms/direct2d/direct2d.pro | 3 +-
src/plugins/platforms/platforms.pro | 6 +-
src/plugins/platforms/windows/windows.pri | 2 +
src/plugins/platforms/winrt/winrt.pro | 3 +-
10 files changed, 168 insertions(+), 65 deletions(-)
diff --git x/qtbase/src/angle/src/common/gles_common.pri y/qtbase/src/angle/src/common/gles_common.pri
index 82d38a62e6..927949d758 100644
--- x/qtbase/src/angle/src/common/gles_common.pri
+++ y/qtbase/src/angle/src/common/gles_common.pri
@@ -5,11 +5,11 @@ INCLUDEPATH += $$OUT_PWD/.. $$ANGLE_DIR/src/libANGLE
# Remember to adapt src/gui/configure.* if the Direct X version changes.
!winrt: \
- LIBS_PRIVATE += -ld3d9
+ QMAKE_USE_PRIVATE += d3d9
winrt: \
- LIBS_PRIVATE += -ld3dcompiler -ldxgi -ld3d11
+ QMAKE_USE_PRIVATE += d3dcompiler d3d11 dxgi
-LIBS_PRIVATE += -ldxguid
+QMAKE_USE_PRIVATE += dxguid
STATICLIBS = translator preprocessor
for(libname, STATICLIBS) {
diff --git x/qtbase/src/angle/src/libEGL/libEGL.pro y/qtbase/src/angle/src/libEGL/libEGL.pro
index 9e9c639002..ad2117f2fc 100644
--- x/qtbase/src/angle/src/libEGL/libEGL.pro
+++ y/qtbase/src/angle/src/libEGL/libEGL.pro
@@ -1,9 +1,10 @@
include(../common/common.pri)
DEF_FILE_TARGET = $${TARGET}
TARGET = $$qtLibraryTarget($${LIBEGL_NAME})
-winrt: LIBS_PRIVATE += -ld3d11
+winrt: QMAKE_USE_PRIVATE += d3d11
+QMAKE_USE_PRIVATE += dxguid
-LIBS_PRIVATE += -ldxguid -L$$QT_BUILD_TREE/lib -l$$qtLibraryTarget($${LIBGLESV2_NAME})
+LIBS_PRIVATE += -L$$QT_BUILD_TREE/lib -l$$qtLibraryTarget($${LIBGLESV2_NAME})
DEFINES += GL_APICALL= GL_GLEXT_PROTOTYPES= EGLAPI= LIBEGL_IMPLEMENTATION
diff --git x/qtbase/src/gui/configure.json y/qtbase/src/gui/configure.json
index 219385a108..4145ceddf6 100644
--- x/qtbase/src/gui/configure.json
+++ y/qtbase/src/gui/configure.json
@@ -65,21 +65,79 @@
"-lbcm_host"
]
},
- "direct2d": {
- "label": "Direct 2D",
- "export": "",
+ "dxguid": {
+ "label": "DirectX GUID",
+ "sources": [
+ "-ldxguid"
+ ]
+ },
+ "dxgi": {
+ "label": "DirectX GI",
+ "headers": [ "dxgi.h" ],
+ "sources": [
+ "-ldxgi"
+ ]
+ },
+ "dxgi1_2": {
+ "label": "DirectX GI 1.2",
"test": {
- "include": [ "d3d11_1.h", "d2d1_1.h", "d2d1_1helper.h", "dxgi1_2.h", "wrl.h", "dwrite.h" ],
- "tail": "using Microsoft::WRL::ComPtr;",
"main": [
- "ComPtr<ID2D1Factory1> d2dFactory;",
- "D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, d2dFactory.ReleaseAndGetAddressOf());",
- "ComPtr<IDXGISurface1> surface;",
+ "// fails with mingw-w64 5.4.0 - declaration is missing from header",
+ "IDXGISurface1 *surface;",
"(void) surface;"
]
},
+ "headers": [ "dxgi1_2.h" ],
+ "sources": [
+ "-ldxgi"
+ ]
+ },
+ "d3d9": {
+ "label": "Direct3D 9",
+ "headers": "d3d9.h",
+ "sources": [
+ "-ld3d9"
+ ]
+ },
+ "d3d11": {
+ "label": "Direct3D 11",
+ "headers": "d3d11.h",
+ "sources": [
+ "-ld3d11"
+ ]
+ },
+ "d3d11_1": {
+ "label": "Direct3D 11.1",
+ "headers": "d3d11_1.h",
+ "sources": [
+ "-ld3d11"
+ ]
+ },
+ "d3dcompiler": {
+ "label": "Direct3D Shader Compiler Library",
+ "headers": "d3dcompiler.h",
+ "sources": [
+ "-ld3dcompiler"
+ ]
+ },
+ "d2d1": {
+ "label": "Direct2D 1",
+ "headers": [ "d2d1.h", "d2d1helper.h" ],
+ "sources": [
+ "-ld2d1"
+ ]
+ },
+ "d2d1_1": {
+ "label": "Direct2D 1.1",
+ "test": {
+ "main": [
+ "ID2D1Factory1 *d2dFactory;",
+ "D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &d2dFactory);"
+ ]
+ },
+ "headers": [ "d2d1_1.h", "d2d1_1helper.h" ],
"sources": [
- "-ld2d1 -ldwrite -ld3d11"
+ "-ld2d1"
]
},
"directfb": {
@@ -96,9 +154,8 @@
{ "type": "pkgConfig", "args": "directfb" }
]
},
- "directwrite": {
+ "dwrite": {
"label": "DirectWrite",
- "export": "",
"test": {
"include": [ "dwrite.h", "d2d1.h" ],
"main": [
@@ -107,6 +164,29 @@
" (IUnknown **)(&factory));"
]
},
+ "headers": "dwrite.h",
+ "sources": [
+ "-ldwrite"
+ ]
+ },
+ "dwrite_1": {
+ "label": "DirectWrite 1",
+ "headers": "dwrite_1.h",
+ "sources": [
+ "-ldwrite"
+ ]
+ },
+ "dwrite_2": {
+ "label": "DirectWrite 2",
+ "test": {
+ "main": [
+ "IUnknown *factory = 0;",
+ "(void)(size_t(DWRITE_E_NOCOLOR) + sizeof(IDWriteFontFace2));",
+ "DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory2),",
+ " &factory);"
+ ]
+ },
+ "headers": "dwrite_2.h",
"sources": [
"-ldwrite"
]
@@ -623,7 +703,7 @@
},
"testTypeAliases": {
- "files": [ "directX" ]
+ "files": [ "fxc" ]
},
"tests": {
@@ -638,26 +718,10 @@
]
}
},
- "directwrite2": {
- "label": "DirectWrite 2",
- "type": "compile",
- "test": {
- "include": [ "dwrite_2.h", "d2d1.h" ],
- "main": [
- "IUnknown *factory = 0;",
- "(void)(size_t(DWRITE_E_NOCOLOR) + sizeof(IDWriteFontFace2));",
- "DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory2),",
- " &factory);"
- ]
- },
- "use": "directwrite"
- },
- "directx": {
- "label": "DirectX SDK",
- "type": "directX",
+ "fxc": {
+ "label": "Direct3D Shader Compiler",
+ "type": "fxc",
"files": [
- "d3dcompiler.h",
- "d3d11.lib",
"fxc.exe"
]
},
@@ -909,7 +973,7 @@
"angle": {
"label": "ANGLE",
"autoDetect": "features.opengles2 || features.opengl-dynamic",
- "condition": "config.win32 && tests.directx",
+ "condition": "features.dxguid && tests.fxc && (features.direct3d9 || (config.winrt && features.direct3d11 && libs.d3dcompiler))",
"output": [
"publicFeature",
{ "type": "define", "name": "QT_OPENGL_ES_2_ANGLE" }
@@ -936,19 +1000,59 @@
"directwrite": {
"label": "DirectWrite",
"emitIf": "config.win32",
- "condition": "libs.directwrite",
+ "condition": "libs.dwrite",
+ "output": [ "privateFeature" ]
+ },
+ "directwrite1": {
+ "label": "DirectWrite 1",
+ "emitIf": "config.win32",
+ "condition": "libs.dwrite_1",
"output": [ "privateFeature" ]
},
"directwrite2": {
"label": "DirectWrite 2",
"emitIf": "config.win32",
- "condition": "features.directwrite && tests.directwrite2",
+ "condition": "features.directwrite1 && libs.dwrite_2",
+ "output": [ "privateFeature" ]
+ },
+ "dxguid": {
+ "label": "DirectX GUID",
+ "condition": "config.win32 && libs.dxguid",
+ "output": [ "privateFeature" ]
+ },
+ "direct3d9": {
+ "label": "Direct 3D 9",
+ "condition": "config.win32 && !config.winrt && libs.d3d9",
+ "output": [ "privateFeature" ]
+ },
+ "dxgi": {
+ "label": "DirectX GI",
+ "condition": "config.win32 && libs.dxgi",
+ "output": [ "privateFeature" ]
+ },
+ "dxgi1_2": {
+ "label": "DirectX GI 1.2",
+ "condition": "features.dxgi && libs.dxgi1_2",
+ "output": [ "privateFeature" ]
+ },
+ "direct3d11": {
+ "label": "Direct 3D 11",
+ "condition": "features.dxgi && libs.d3d11",
+ "output": [ "privateFeature" ]
+ },
+ "direct3d11_1": {
+ "label": "Direct 3D 11.1",
+ "condition": "features.direct3d11 && features.dxgi1_2 && libs.d3d11_1",
"output": [ "privateFeature" ]
},
"direct2d": {
"label": "Direct 2D",
- "section": "Platform plugins",
- "condition": "config.win32 && !config.winrt && libs.direct2d",
+ "condition": "config.win32 && !config.winrt && features.direct3d11 && libs.d2d1",
+ "output": [ "privateFeature" ]
+ },
+ "direct2d1_1": {
+ "label": "Direct 2D 1.1",
+ "condition": "features.direct2d && libs.d2d1_1",
"output": [ "privateFeature" ]
},
"evdev": {
diff --git x/qtbase/src/gui/configure.pri y/qtbase/src/gui/configure.pri
index fcd2d1f73e..f53a93063c 100644
--- x/qtbase/src/gui/configure.pri
+++ y/qtbase/src/gui/configure.pri
@@ -15,29 +15,16 @@ defineTest(qtConfLibrary_freetype) {
return(true)
}
-# Check for Direct X SDK (include, lib, and direct shader compiler 'fxc').
+# Check for Direct X shader compiler 'fxc'.
# Up to Direct X SDK June 2010 and for MinGW, this is pointed to by the
# DXSDK_DIR variable. Starting with Windows Kit 8, it is included in
-# the Windows SDK. Checking for the header is not sufficient, since it
-# is also present in MinGW.
-defineTest(qtConfTest_directX) {
+# the Windows SDK.
+defineTest(qtConfTest_fxc) {
dxdir = $$getenv("DXSDK_DIR")
!isEmpty(dxdir) {
- EXTRA_INCLUDEPATH += $$dxdir/include
- equals(QT_ARCH, x86_64): \
- EXTRA_LIBDIR += $$dxdir/lib/x64
- else: \
- EXTRA_LIBDIR += $$dxdir/lib/x86
EXTRA_PATH += $$dxdir/Utilities/bin/x86
}
- $$qtConfEvaluate("features.sse2") {
- ky = $$size($${1}.files._KEYS_)
- $${1}.files._KEYS_ += $$ky
- # Not present on MinGW-32
- $${1}.files.$${ky} = "intrin.h"
- }
-
qtConfTest_files($${1}): return(true)
return(false)
}
diff --git x/qtbase/src/platformsupport/fontdatabases/windows/windows.pri y/qtbase/src/platformsupport/fontdatabases/windows/windows.pri
index 0e64084cf1..9c529f55ea 100644
--- x/qtbase/src/platformsupport/fontdatabases/windows/windows.pri
+++ y/qtbase/src/platformsupport/fontdatabases/windows/windows.pri
@@ -15,9 +15,14 @@ qtConfig(freetype) {
HEADERS += $$PWD/qwindowsfontdatabase_ft_p.h
}
-qtConfig(directwrite) {
- qtConfig(directwrite2): \
+qtConfig(directwrite):qtConfig(direct2d) {
+ qtConfig(directwrite2) {
+ QMAKE_USE_PRIVATE += dwrite_2
DEFINES *= QT_USE_DIRECTWRITE2
+ } else {
+ QMAKE_USE_PRIVATE += dwrite
+ }
+ QMAKE_USE_PRIVATE += d2d1
SOURCES += $$PWD/qwindowsfontenginedirectwrite.cpp
HEADERS += $$PWD/qwindowsfontenginedirectwrite_p.h
diff --git x/qtbase/src/platformsupport/fontdatabases/winrt/winrt.pri y/qtbase/src/platformsupport/fontdatabases/winrt/winrt.pri
index 291ada220f..7617df2e7a 100644
--- x/qtbase/src/platformsupport/fontdatabases/winrt/winrt.pri
+++ y/qtbase/src/platformsupport/fontdatabases/winrt/winrt.pri
@@ -8,4 +8,6 @@ HEADERS += \
DEFINES += __WRL_NO_DEFAULT_LIB__
-LIBS += -lws2_32 -ldwrite
+LIBS += -lws2_32
+
+QMAKE_USE_PRIVATE += dwrite_1
diff --git x/qtbase/src/plugins/platforms/direct2d/direct2d.pro y/qtbase/src/plugins/platforms/direct2d/direct2d.pro
index 3bfd02bdc8..9764272632 100644
--- x/qtbase/src/plugins/platforms/direct2d/direct2d.pro
+++ y/qtbase/src/plugins/platforms/direct2d/direct2d.pro
@@ -8,7 +8,8 @@ QT += \
qtConfig(accessibility): QT += accessibility_support-private
qtConfig(vulkan): QT += vulkan_support-private
-LIBS += -ldwmapi -ld2d1 -ld3d11 -ldwrite -lversion -lgdi32
+LIBS += -ldwmapi -lversion -lgdi32
+QMAKE_USE_PRIVATE += dwrite_1 d2d1_1 d3d11_1 dxgi1_2
include(../windows/windows.pri)
diff --git x/qtbase/src/plugins/platforms/platforms.pro y/qtbase/src/plugins/platforms/platforms.pro
index e61887618f..b70d8d5996 100644
--- x/qtbase/src/plugins/platforms/platforms.pro
+++ y/qtbase/src/plugins/platforms/platforms.pro
@@ -14,10 +14,10 @@ qtConfig(xcb) {
uikit:!watchos: SUBDIRS += ios
osx: SUBDIRS += cocoa
-win32:!winrt: SUBDIRS += windows
-winrt: SUBDIRS += winrt
+win32:!winrt:qtConfig(direct3d9): SUBDIRS += windows
+winrt:qtConfig(direct3d11): SUBDIRS += winrt
-qtConfig(direct2d) {
+qtConfig(direct3d11_1):qtConfig(direct2d1_1):qtConfig(directwrite1) {
SUBDIRS += direct2d
}
diff --git x/qtbase/src/plugins/platforms/windows/windows.pri y/qtbase/src/plugins/platforms/windows/windows.pri
index f4c396f7c5..2f244d8b71 100644
--- x/qtbase/src/plugins/platforms/windows/windows.pri
+++ y/qtbase/src/plugins/platforms/windows/windows.pri
@@ -9,6 +9,8 @@ mingw: LIBS *= -luuid
# For the dialog helpers:
LIBS += -lshlwapi -lshell32 -ladvapi32
+QMAKE_USE_PRIVATE += d3d9/nolink
+
DEFINES *= QT_NO_CAST_FROM_ASCII
SOURCES += \
diff --git x/qtbase/src/plugins/platforms/winrt/winrt.pro y/qtbase/src/plugins/platforms/winrt/winrt.pro
index 042b270cff..fc70eba979 100644
--- x/qtbase/src/plugins/platforms/winrt/winrt.pro
+++ y/qtbase/src/plugins/platforms/winrt/winrt.pro
@@ -8,7 +8,8 @@ QT += \
DEFINES *= QT_NO_CAST_FROM_ASCII __WRL_NO_DEFAULT_LIB__
-LIBS += -lws2_32 -ld3d11
+LIBS += -lws2_32
+QMAKE_USE_PRIVATE += d3d11
SOURCES = \
main.cpp \
--
2.17.0

View File

@ -1,36 +0,0 @@
diff --git x/qttools/src/linguist/linguist.pro y/qttools/src/linguist/linguist.pro
index 103336da..2fe9656d 100644
--- x/qttools/src/linguist/linguist.pro
+++ y/qttools/src/linguist/linguist.pro
@@ -3,11 +3,6 @@ SUBDIRS = \
lrelease \
lupdate \
lconvert
-!no-png:qtHaveModule(widgets):qtConfig(process): SUBDIRS += linguist
-
-qtNomakeTools( \
- linguist \
-)
equals(QMAKE_HOST.os, Windows): CMAKE_BIN_SUFFIX = ".exe"
diff --git x/qttools/src/src.pro y/qttools/src/src.pro
index 41064a5d..fcef4dd8 100644
--- x/qttools/src/src.pro
+++ y/qttools/src/src.pro
@@ -3,12 +3,6 @@ TEMPLATE = subdirs
qtHaveModule(widgets) {
no-png {
message("Some graphics-related tools are unavailable without PNG support")
- } else {
- SUBDIRS = assistant \
- pixeltool \
- designer
-
- linguist.depends = designer
}
}
--
2.14.3

View File

@ -1,19 +0,0 @@
--- x/qtbase/src/plugins/platforms/cocoa/qprintengine_mac_p.h
+++ y/qtbase/src/plugins/platforms/cocoa/qprintengine_mac_p.h
@@ -52,6 +52,7 @@
//
#include <QtCore/qglobal.h>
+#include <qpa/qplatformprintdevice.h>
#ifndef QT_NO_PRINTER
--- x/qtbase/src/plugins/plugins.pro
+++ y/qtbase/src/plugins/plugins.pro
@@ -9,6 +9,3 @@
!android:qtConfig(library): SUBDIRS *= generic
}
qtHaveModule(widgets): SUBDIRS += styles
-
-!winrt:qtHaveModule(printsupport): \
- SUBDIRS += printsupport

View File

@ -15,19 +15,9 @@
<file>images/icon_ok.png</file>
<file>images/icon_cancelled.png</file>
<file>images/Icon_Checked.svg</file>
<file>images/search.svg</file>
<file>images/cancel.svg</file>
<file>images/iOS/tabBar/Anbieter-off.png</file>
<file>images/iOS/tabBar/Anbieter-on.png</file>
<file>images/iOS/tabBar/Ausweisen-off.png</file>
<file>images/iOS/tabBar/Ausweisen-on.png</file>
<file>images/iOS/tabBar/Pin-off.png</file>
<file>images/iOS/tabBar/Pin-on.png</file>
<file>images/iOS/tabBar/Verlauf-off.png</file>
<file>images/iOS/tabBar/Verlauf-on.png</file>
<file>images/check.svg</file>
<file>images/icon_Pin.svg</file>
<file>images/iOS/tabBar/More-off.svg</file>
<file>images/iOS/tabBar/More-on.svg</file>
<file>images/status_error.svg</file>
<file>images/status_info.svg</file>
<file>images/status_ok.svg</file>
@ -38,18 +28,20 @@
<file>images/ausweis.png</file>
<file>images/provider/information.svg</file>
<file>images/provider/purpose.svg</file>
<file>images/provider/adresse.png</file>
<file>images/provider/+tablet/adresse.png</file>
<file>images/provider/mail.png</file>
<file>images/provider/+tablet/mail.png</file>
<file>images/provider/telefon.png</file>
<file>images/provider/+tablet/telefon.png</file>
<file>images/provider/url.png</file>
<file>images/provider/+tablet/url.png</file>
<file>images/provider/adresse.svg</file>
<file>images/provider/mail.svg</file>
<file>images/provider/telefon.svg</file>
<file>images/provider/url.svg</file>
<file>images/provider/gradient-citizen.png</file>
<file>images/provider/gradient-insurance.png</file>
<file>images/provider/gradient-finance.png</file>
<file>images/provider/gradient-other.png</file>
<file>images/provider/categoryIcons/general.svg</file>
<file>images/provider/categoryIcons/citizen.svg</file>
<file>images/provider/categoryIcons/finance.svg</file>
<file>images/provider/categoryIcons/insurance.svg</file>
<file>images/provider/categoryIcons/other.svg</file>
<file alias="images/provider/categoryIcons/general_bg.svg">images/provider/categoryIcons/+android/general_bg.svg</file>
<file>images/provider/categoryIcons/+android/general.svg</file>
<file>images/provider/categoryIcons/+android/citizen.svg</file>
<file>images/provider/categoryIcons/+android/finance.svg</file>
@ -73,7 +65,14 @@
<file>updatable-files/supported-providers.json</file>
<file>images/icon_nfc.svg</file>
<file>images/icon_remote.svg</file>
<file>images/icon_remote_inactive.svg</file>
<file>images/icon_remote_0.svg</file>
<file>images/icon_remote_25.svg</file>
<file>images/icon_remote_50.svg</file>
<file>images/icon_remote_75.svg</file>
<file>images/icon_remote_100.svg</file>
<file>images/icon_bluetooth.svg</file>
<file>images/phone_to_pc.svg</file>
<file>images/phone_nfc.svg</file>
<file>images/phone_remote.svg</file>
<file>images/phone_bluetooth.svg</file>
@ -82,5 +81,11 @@
<file>images/siteWithLogo.png</file>
<file>images/icon_pair.svg</file>
<file>images/icon_settings.svg</file>
<file>images/trash_icon_white.svg</file>
<file>images/trash_icon.svg</file>
<file>images/icon_save.svg</file>
<file>images/info.svg</file>
<file>images/info_filled.svg</file>
<file>images/triangle.svg</file>
</qresource>
</RCC>

View File

@ -13,16 +13,33 @@
<file>images/start_nPA_eAT.png</file>
<file>images/busy_animation.gif</file>
<file>images/html_message_section.jpg</file>
<file>images/desktop/background.png</file>
<file>images/search_icon.svg</file>
<file>images/search_cancel.svg</file>
<file>images/desktop/bell_white.svg</file>
<file>images/desktop/bell_green.svg</file>
<file>images/desktop/bell_red.svg</file>
<file>images/desktop/id_card.png</file>
<file>images/desktop/pin-letter-page1.png</file>
<file>images/desktop/pin-letter-page2.png</file>
<file>images/desktop/help_icon.svg</file>
<file>images/desktop/main_history.svg</file>
<file>images/desktop/main_identify.svg</file>
<file>images/desktop/main_info.svg</file>
<file>images/desktop/main_pin.svg</file>
<file>images/desktop/main_provider.svg</file>
<file>images/desktop/sandglass.svg</file>
<file>images/desktop/settings_icon.svg</file>
<file>images/desktop/titlebar_arrow.svg</file>
<file>images/desktop/continue_arrow.svg</file>
<file>images/desktop/info_questions.svg</file>
<file>images/desktop/info_application_log.svg</file>
<file>images/desktop/info_diagnosis.svg</file>
<file>images/desktop/info_license.svg</file>
<file>images/desktop/info_manual.svg</file>
<file>images/desktop/info_rate_application.svg</file>
<file>images/desktop/info_report_error.svg</file>
<file>images/desktop/info_setup.svg</file>
<file>images/desktop/info_version.svg</file>
<file>images/randompin/btn_normal_0.png</file>
<file>images/randompin/btn_normal_1.png</file>
<file>images/randompin/btn_normal_2.png</file>
@ -37,6 +54,7 @@
<file>images/randompin/btn_ok.png</file>
<file>images/randompin/btn_cancel.png</file>
<file>images/randompin/btn_clear.png</file>
<file>images/reader/default_card_position.png</file>
<file>images/reader/default_more_reader.png</file>
<file>images/reader/default_no_card.png</file>
<file>images/reader/default_no_reader.png</file>

View File

@ -2,7 +2,7 @@
<qresource prefix="/">
<file>qtquickcontrols2.conf</file>
<file>images/zahnraeder.svg</file>
<file>images/check.svg</file>
<file>images/arrowLeft.svg</file>
<file>images/arrowRight.svg</file>
<file>images/share.svg</file>
<file>images/android/navigation/ausweisen.svg</file>
@ -15,16 +15,19 @@
<file>images/android/navigation/support.svg</file>
<file>images/android/navigation/bewerten.svg</file>
<file>images/android/navigation/tutorial.svg</file>
<file>images/android/search_icon.svg</file>
<file>images/iOS/search_icon.svg</file>
<file>images/iOS/search_cancel.svg</file>
<file>images/iOS/more/icon_mehr_npa.svg</file>
<file>images/iOS/more/icon_mehr_favorit.svg</file>
<file>images/iOS/more/icon_mehr_fragen.svg</file>
<file>images/iOS/more/icon_mehr_info.svg</file>
<file>images/iOS/more/icon_mehr_license.svg</file>
<file>images/iOS/more/icon_mehr_remotereader.svg</file>
<file>images/iOS/more/icon_mehr_verlauf.svg</file>
<file>images/iOS/more/icon_mehr_upload.svg</file>
<file>images/iOS/more/icon_mehr_log.svg</file>
<file>images/iOS/more/icon_mehr_tutorial.svg</file>
<file>images/iOS/more/icon_mehr_report.svg</file>
<file>images/tutorial/main_menu_what_caret.svg</file>
<file>images/tutorial/main_menu_where_caret.svg</file>
<file>images/tutorial/main_menu_how_caret.svg</file>
@ -80,27 +83,37 @@
<file>images/tutorial/user-tine@3x.png</file>
<file>images/tutorial/providericons.png</file>
<file>images/tutorial/play_movie.png</file>
<file>images/tutorial/screenshot_cert_de.png</file>
<file>images/tutorial/screenshot_cert_en.png</file>
<file>images/tutorial/screenshot_providerlist_de.png</file>
<file>images/tutorial/screenshot_providerlist_en.png</file>
<file>images/tutorial/screenshot_menu_providerlist_de.png</file>
<file>images/tutorial/screenshot_menu_providerlist_en.png</file>
<file>images/tutorial/screenshot_cert_android_de.png</file>
<file>images/tutorial/screenshot_cert_android_en.png</file>
<file>images/tutorial/screenshot_cert_ios_de.png</file>
<file>images/tutorial/screenshot_cert_ios_en.png</file>
<file>images/tutorial/screenshot_providerlist_android_de.png</file>
<file>images/tutorial/screenshot_providerlist_android_en.png</file>
<file>images/tutorial/screenshot_providerlist_ios_de.png</file>
<file>images/tutorial/screenshot_providerlist_ios_en.png</file>
<file>images/tutorial/screenshot_remoteservice_ios_en.png</file>
<file>images/tutorial/screenshot_remoteservice_ios_de.png</file>
<file>images/tutorial/screenshot_menu_providerlist_android_de.png</file>
<file>images/tutorial/screenshot_menu_providerlist_android_en.png</file>
<file>images/tutorial/screenshot_pairing_de.png</file>
<file>images/tutorial/screenshot_pairing_en.png</file>
<file>images/tutorial/screenshot_sac_menu_de.png</file>
<file>images/tutorial/screenshot_sac_menu_en.png</file>
<file>images/tutorial/screenshot_choose_reader_de.png</file>
<file>images/tutorial/screenshot_choose_reader_en.png</file>
<file>images/tutorial/screenshot_pin_management_menu_en.png</file>
<file>images/tutorial/screenshot_pin_management_menu_de.png</file>
<file>images/tutorial/screenshot_sac_menu_android_de.png</file>
<file>images/tutorial/screenshot_sac_menu_android_en.png</file>
<file>images/tutorial/screenshot_choose_reader_android_de.png</file>
<file>images/tutorial/screenshot_choose_reader_android_en.png</file>
<file>images/tutorial/screenshot_choose_reader_ios_de.png</file>
<file>images/tutorial/screenshot_choose_reader_ios_en.png</file>
<file>images/tutorial/screenshot_pin_management_menu_android_en.png</file>
<file>images/tutorial/screenshot_pin_management_menu_android_de.png</file>
<file>images/tutorial/screenshot_pin_management_menu_ios_en.png</file>
<file>images/tutorial/screenshot_pin_management_menu_ios_de.png</file>
<file>images/tutorial/section_seperator_what.svg</file>
<file>images/tutorial/section_seperator_where.svg</file>
<file>images/tutorial/section_seperator_how.svg</file>
<file>images/tutorial/section_seperator_important.svg</file>
<file>images/tutorial/generated/where_overview_question.svg</file>
<file>images/tutorial/generated/where_providerlist_screenshot_de.svg</file>
<file>images/tutorial/generated/where_providerlist_screenshot_en.svg</file>
<file>images/tutorial/generated/where_providerlist_screenshot_android_de.svg</file>
<file>images/tutorial/generated/where_providerlist_screenshot_android_en.svg</file>
<file>images/tutorial/generated/where_identify_now_de.svg</file>
<file>images/tutorial/generated/where_identify_now_en.svg</file>
<file>images/tutorial/generated/where_userdata_example_de.svg</file>
@ -129,18 +142,14 @@
<file>images/tutorial/generated/reader_sac_provider_on_laptop.svg</file>
<file>images/tutorial/generated/reader_sac_npa_on_laptop.svg</file>
<file>images/tutorial/generated/reader_sac_aa2_ok.svg</file>
<file>images/tutorial/generated/reader_sac_menu_de.svg</file>
<file>images/tutorial/generated/reader_sac_menu_en.svg</file>
<file>images/tutorial/generated/reader_sac_menu_android_de.svg</file>
<file>images/tutorial/generated/reader_sac_menu_android_en.svg</file>
<file>images/tutorial/generated/reader_sac_menu_ios_de.svg</file>
<file>images/tutorial/generated/reader_sac_menu_ios_en.svg</file>
<file>images/tutorial/generated/reader_sac_no_nfc_devices.svg</file>
<file>images/tutorial/generated/reader_sac_no_nfc_provider.svg</file>
<file>images/tutorial/generated/reader_bluetooth_card_inserted.svg</file>
<file>images/tutorial/generated/reader_bluetooth_connection.svg</file>
<file>images/provider/categoryIcons/general.svg</file>
<file>images/provider/categoryIcons/citizen.svg</file>
<file>images/provider/categoryIcons/finance.svg</file>
<file>images/provider/categoryIcons/insurance.svg</file>
<file>images/provider/categoryIcons/other.svg</file>
<file alias="images/provider/categoryIcons/general_bg.svg">images/provider/categoryIcons/+android/general_bg.svg</file>
<file alias="images/provider/categoryIcons/general_button.svg">images/provider/categoryIcons/+android/general_button.svg</file>
<file alias="images/provider/categoryIcons/citizen_bg.svg">images/provider/categoryIcons/+android/citizen_bg.svg</file>
<file alias="images/provider/categoryIcons/citizen_button.svg">images/provider/categoryIcons/+android/citizen_button.svg</file>
@ -150,10 +159,12 @@
<file alias="images/provider/categoryIcons/insurance_button.svg">images/provider/categoryIcons/+android/insurance_button.svg</file>
<file alias="images/provider/categoryIcons/other_bg.svg">images/provider/categoryIcons/+android/other_bg.svg</file>
<file alias="images/provider/categoryIcons/other_button.svg">images/provider/categoryIcons/+android/other_button.svg</file>
<file>images/phone_to_pc.svg</file>
<file>images/android/navigation/remotesettings.svg</file>
<file>images/trash_icon.svg</file>
<file>images/trash_icon_all.svg</file>
<file>images/trash_icon_white.svg</file>
<file>images/iOS/tabBar/anbieter.svg</file>
<file>images/iOS/tabBar/ausweisen.svg</file>
<file>images/iOS/tabBar/more.svg</file>
<file>images/iOS/tabBar/pin.svg</file>
<file>images/iOS/tabBar/remoteleser.svg</file>
</qresource>
</RCC>

View File

@ -22,6 +22,7 @@
"DETESTeID00002_DETESTeID00004",
"DETESTeID00001_DETESTeID00002",
"DETESTeID00001",
"DECVCAeIDCTL0402_DECVCAeIDCTL0403",
"DECVCAeIDCTL0401_DECVCAeIDCTL0402",
"DECVCAeIDCT00001_DECVCAeIDCTL0401",
"DECVCAeIDCT00001_DECVCAeIDCT00001"
@ -32,9 +33,10 @@
"7F218201B67F4E82016E5F290100420E44455445535465494430303030327F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A786410474FF63AB838C73C303AC003DFEE95CF8BF55F91E8FEBCB7395D942036E47CF1845EC786EC95BB453AAC288AD023B6067913CF9B63F908F49304E5CFC8B3050DD8701015F200E44455445535465494430303030347F4C12060904007F0007030102025305FC0F13FFFF5F25060102000501015F24060105000501015F37405C035A0611B6C58F0B5261FDD009DECAB7DC7A79482D5248CCA119059B7D82B2157CF0C4A499BCF441EFDD35E294A58C0AF19A34A0762159533285ACF170A505",
"7F218201B67F4E82016E5F290100420E44455445535465494430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104096EB58BFD86252238EC2652185C43C3A56C320681A21E37A8E69DDC387C0C5F5513856EFE2FDC656E604893212E29449B365E304605AC5413E75BE31E641F128701015F200E44455445535465494430303030327F4C12060904007F0007030102025305FE0F01FFFF5F25060100000902015F24060103000902015F3740141120A0FDFC011A52F3F72B387A3DC7ACA88B4868D5AE9741780B6FF8A0B49E5F55169A2D298EF5CF95935DCA0C3DF3E9D42DC45F74F2066317154961E6C746",
"7F218201B67F4E82016E5F290100420E44455445535465494430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104184BB519FC2A8F52DC0DC73112FACFE914F2A49B678DD5799A2B1DFE95E1A66359014E22FA8D66438413CEBA6CF0E215576B673376BF617AF4DFE9761D2290148701015F200E44455445535465494430303030317F4C12060904007F0007030102025305FE0F01FFFF5F25060100000801035F24060103000801035F37409F25EBFAF4B91E4C60A1683754C5DC076A3179753EF97D9F8CB01FE1DCD3B8C83E7A26602AB1F344BE5706006D79A9FF6A9716404DC83B9F30E1213B393128A2",
"7F218201BA7F4E8201725F290100421044454356434165494443544C303430317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641043EE15015916563E31459045924DE804C1D93A77652AA25D0B753730DBA3233886A9A9B28A06AF84CC5A40F78E9167CA40B8098724A3A0332283D0A52C5453FE08701015F201044454356434165494443544C303430327F4C12060904007F0007030102025305FE1FFFFFFF5F25060106000300015F24060109000300015F374068261CEB4DC915301371C9B273377F33CEB25AFA07E70EDB3498ACF0327DC13B9AF99A9D694A6D048F0DB6FF1774E882CA8F41C8A0B96FDDF6F6DDABFD55CB43",
"7F218201BA7F4E8201725F2901004210444543564341654944435430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641042C037C6CF8C0B62E36E220B7D411404AF248A2C83C569A49FAB02FC232D2395B3A5FF80DDB01D0DFAFCEF55E54ACCBA4C56E528F0746BEF1108E7D9B0122EBA78701015F201044454356434165494443544C303430317F4C12060904007F0007030102025305FE1FFFFFFF5F25060106000300015F24060109000300015F37404FB2F9F17D38656EEC2846CBB1711E07D739E6A584D487B3AFBA5C723C73A10236995E6A19499DE941DFE3CC044E2AACB6B5869C0E46C9585AEF892E2236F62E",
"7F218201BA7F4E8201725F2901004210444543564341654944435430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104206160B85B82B2BE249DCD7B15FD1AD46CA03F39FE675C07535806E57CE24349392BBB9F73B364672F12243F18083DCC49ACA613767F0873AEB60715FC605A288701015F2010444543564341654944435430303030317F4C12060904007F0007030102025305FE1FFFFFFF5F25060106000300015F24060109000300015F37402B62927D46BF675DB387FC4A425FF3B604B20DD5ED6FFCDAFA9DA1DD920DC996245B358167C66A721DF39C6897864E4D648746339A97D22D08659885F92BDE21"
"7F218201BA7F4E8201725F290100421044454356434165494443544C303430327F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641040DC10C2E105D1CFC84CCDAB7AC0A37F161234D9F5549D83FD29E1D3B3A1455DC5F5464FE69E7B1F18F57AD6A0BBB3B2F673A356B3AC8AB525A96A78E71EC20B38701015F201044454356434165494443544C303430337F4C12060904007F0007030102025305FE1FFFFFFF5F25060108000900025F24060201000900015F37407D738AA07BBC24E4969ABC424CC75B1BBE9F4A8AEB497544516F32D2284A6F785BFC630BE9C6D96C6DE8FFF377FE68A3950DE140953DEFAFADA92A201774C0BB",
"7F218201BA7F4E8201725F290100421044454356434165494443544C303430317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641044EDF23187A2E4535AB7AA3C29AD43E3ACFB7C38230CCC7B705829E60DE14946D7A0257527E1488D9EBB967D5734FCBCFBA3A1085798AFA7883FDAF88605A46008701015F201044454356434165494443544C303430327F4C12060904007F0007030102025305FE1FFFFFFF5F25060108000900025F24060201000900015F3740A2CC27745E141CE871645178F5D8B55B9ECAA690A7975EF7AB518145D9CE9FA31C326F923EDDC6AD58CF0E644CDF86FC2EAF4D059B0598C2CEB6C713D825CD69",
"7F218201BA7F4E8201725F2901004210444543564341654944435430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641048A50D5902E9E63D103974E9FBE1D7E61BA186585E2A12A4643FFA57DFF0613FE213A7C3793C8C5C6C095224DDCA409AFE92998E3F372D826AD008FC6A0981DE18701015F201044454356434165494443544C303430317F4C12060904007F0007030102025305FE1FFFFFFF5F25060108000900025F24060201000900015F3740767C88881693C2AA936EC55FC0104EFF92FAD1AB9B1CF26ECCFA49AE98E9F9EA5BDD60AFFA6FFC6526AFE47BB6897E67241F2170A51F635EBC8AA8414748562C",
"7F218201BA7F4E8201725F2901004210444543564341654944435430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641041A47FE0DA706867F877AB071E8867778EDB6E7C12B13FA13ED93D54C86A44E3BA9F93D1B978B54841202B14A924BBA1A56C76B9E596614C66A9D2CBCDC8B29B18701015F2010444543564341654944435430303030317F4C12060904007F0007030102025305FE1FFFFFFF5F25060108000900025F24060201000900015F37407CDC52ADB660CC0EB56841EF9D5773DDE84A5581853CCF3DCF24D555C2FDE8F31D2128B5D6A0A528BF07CFDA005DBCACFFCDB14755BB132E47CFA0E34233A290"
],
"_comment_5": "array of certificates for checking the authenticity of updates; DER format, hex encoded",
@ -151,18 +153,20 @@
"minStaticKeySizes": {
"Rsa": 2000,
"Dsa": 2000,
"Dh": 2000,
"Ec": 224
},
"minEphemeralKeySizes": {
"Rsa": 2000,
"Dsa": 2000,
"Dh": 2000,
"Ec": 224
},
"selfAuthentication": {
"_comment_1": "TCTokenURL for self authentication (AusweisAuskunft)",
"_comment_1": "TCTokenURL for self-authentication (AusweisAuskunft)",
"url": "https://www.autentapp.de/AusweisAuskunft/WebServiceRequesterServlet?mode=json",
"testUrl": "https://test.governikus-eid.de/AusweisAuskunft/WebServiceRequesterServlet?mode=json"
},

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 718 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 963 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="768" height="768" viewBox="0 0 37 37" id="svg2696">
<defs id="defs2698">
<linearGradient x1="0" y1="0" x2="1" y2="0" id="linearGradient2559">
<stop style="stop-color:#58ab27;stop-opacity:1" offset="0"/>
<stop style="stop-color:#93c36c;stop-opacity:1" offset="0.78019702"/>
</linearGradient>
<linearGradient x1="0" y1="0" x2="1" y2="0" id="linearGradient2688" xlink:href="#linearGradient2559" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0,-26.61169,26.61169,0,5.06287,31.67544)" spreadMethod="pad"/>
<linearGradient x1="0" y1="0" x2="1" y2="0" id="linearGradient2583">
<stop style="stop-color:#88bce2;stop-opacity:1" offset="0"/>
<stop style="stop-color:#5489c2;stop-opacity:1" offset="1"/>
</linearGradient>
<linearGradient x1="0" y1="0" x2="1" y2="0" id="linearGradient2683" xlink:href="#linearGradient2583" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0,26.61169,26.61169,0,19.60739,5.06376)" spreadMethod="pad"/>
<mask id="maskLeft">
<rect x="0" y="0" width="17.25" height="37" style="fill:#ffffff" />
</mask>
<mask id="maskRight">
<rect x="19.75" y="0" width="17.25" height="37" style="fill:#ffffff" />
</mask>
</defs>
<path d="M 18.5 5 L 18.5 9.8 A 8.7 8.7 0 0 0 18.5 27.2 L 18.5 32 A 13.5 13.5 0 0 1 18.5 5" style="fill:url(#linearGradient2688);stroke:none" mask="url(#maskLeft)"/>
<path d="M 18.5 5 L 18.5 9.8 A 8.7 8.7 0 0 1 18.5 27.2 L 18.5 32 A 13.5 13.5 0 0 0 18.5 5" style="fill:url(#linearGradient2683);stroke:none" mask="url(#maskRight)"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="768" height="768" viewBox="0 0 37 37" id="svg2696">
<rect x="0" y="0" width="37" height="37" style="fill:#5489c2" />
<rect x="7.5" y="7.5" width="22" height="22" rx="11" ry="11" style="fill:#ffffff" />
</svg>

After

Width:  |  Height:  |  Size: 411 B

View File

@ -0,0 +1,216 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="768" height="768" viewBox="0 0 37 37" id="svg2696">
<defs id="defs2698">
<linearGradient x1="0" y1="0" x2="1" y2="0" id="linearGradient2559">
<stop style="stop-color:#58ab27;stop-opacity:1" offset="0"/>
<stop style="stop-color:#93c36c;stop-opacity:1" offset="0.78019702"/>
</linearGradient>
<linearGradient x1="0" y1="0" x2="1" y2="0" id="linearGradient2688" xlink:href="#linearGradient2559" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0,-26.61169,26.61169,0,5.06287,31.67544)" spreadMethod="pad"/>
<linearGradient x1="0" y1="0" x2="1" y2="0" id="linearGradient2583">
<stop style="stop-color:#88bce2;stop-opacity:1" offset="0"/>
<stop style="stop-color:#5489c2;stop-opacity:1" offset="1"/>
</linearGradient>
<linearGradient x1="0" y1="0" x2="1" y2="0" id="linearGradient2683" xlink:href="#linearGradient2583" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0,26.61169,26.61169,0,19.60739,5.06376)" spreadMethod="pad"/>
<g id="balken">
<path fill-rule="evenodd" clip-rule="evenodd" fill="#B50202"
d="M930.1914063,224.3017578 c0.4013672-0.0766602,0.7988281-0.1586914,1.1816406-0.2539063 C930.9677734,224.0883789,930.5751953,224.1787109,930.1914063,224.3017578z" />
<path fill-rule="evenodd" clip-rule="evenodd" fill="#B50202"
d="M930.1914063,224.3017578 c-4.2128906,0.8032227-9.2978516,0.734375-12.0058594,3.0429688 C920.2412109,238.8300781,923.7841797,226.3496094,930.1914063,224.3017578z" />
<path fill-rule="evenodd" clip-rule="evenodd" fill="#B50202"
d="M852.2470703,243.8295898 c1.2910156-4.2543945-4.7246094-3.9301758-2.4726563-6.5942383c-2.6367188,0.1118164-6.3085938-0.8125-5.7685547,2.4731445
C848.421875,239.4121094,849.0009766,242.953125,852.2470703,243.8295898z" />
<path fill-rule="evenodd" clip-rule="evenodd" fill="#B50202"
d="M835.7929688,243.0053711 c0.1738281-0.9243164,0.8994141-1.2832031,1.6328125-1.6484375c0.0361328,1.1342773-0.3964844,1.8095703-0.8320313,2.4726563
c2.2167969,0.5678711,1.6210938-1.7041016,2.5-2.4726563C838.1376953,240.6650391,837,240.2695313,835,240.5327148
c0,0.5498047,0,1.0991211,0,1.6484375C835,242.6835938,835.0917969,243.1567383,835.7929688,243.0053711z" />
<path fill-rule="evenodd" clip-rule="evenodd" fill="#B50202"
d="M862.9619141,240.5327148 c-0.9277344,1.5458984-3.1943359,1.7509766-4.1210938,3.296875 C861.1806641,244.1816406,865.2539063,242.0878906,862.9619141,240.5327148z" />
<path fill-rule="evenodd" clip-rule="evenodd" fill="#B50202"
d="M856.3681641,243.8295898 c0.6494141-3.1738281-3.9462891-3.1738281-3.296875,0C855.3203125,243.7543945,854.7294922,245.2026367,856.3681641,243.8295898z" />
<path fill-rule="evenodd" clip-rule="evenodd" fill="#B50202"
d="M975.8828125,274.3261719 c2.1298828,0.7412109,4.0429688-4.6557617,0.8242188-4.1210938 C977.3876953,272.534668,975.5458984,272.340332,975.8828125,274.3261719z" />
<path fill-rule="evenodd" clip-rule="evenodd" fill="#B50202"
d="M984.125,280.0957031 c0.2431641-2.1669922-3.1972656-0.6484375-2.4726563-3.296875c0.5048828,0.2412109,3.1738281,2.050293,3.296875,0
c-1.4580078-0.7407227-2.4072266-1.9897461-4.1210938-2.4726563c-1.0625,4.9863281-3.6552734,8.6484375,0,12.3637695
c-1.9208984-4.8847656,3.7138672-4.940918,5.7695313-3.296875c-2.2216797-2.5029297,2.9404297-3.2421875,0-5.7700195
C985.7929688,278.4663086,984.96875,279.2905273,984.125,280.0957031z" />
<path fill-rule="evenodd" clip-rule="evenodd" fill="#B50202"
d="M50.2641602,483.6835938 c-1.1333008,1.0556641-1.4350586,4.9277344,0.8242188,4.9433594 C52.2216797,487.5712891,52.5229492,483.6992188,50.2641602,483.6835938z" />
<path d="m 1003.9062,383.94971 c -1.499,-11.13916 -3.4453,-21.83008 -4.94526,-32.96924 -3.65625,1.83838 -10.21875,0.66211 -15.66016,2.47265 -1.31836,-4.57958 -4.23242,-11.17919
-7.41797,-9.0664 1.44239,-4.55957 0.97461,-2.87549 -0.82422,-6.59424 1.5586,-1.63525 3.89356,-0.3999 5.76953,0 5.41895,-5.2959 6.16602,-15.26367 13.1875,-18.95752 -2.68652,-11.05176
-2.75488,-24.72119 -6.59375,-34.61767 -0.54199,2.46826 -1.76171,-0.78809 -3.29687,0 -0.64844,2.02246 -1.66309,3.67822 -2.79102,5.22167 -1.29882,-2.9165 -3.04589,-5.62109
-5.20507,-7.89013 -0.51172,-3.74561 -1.71973,-7.32813 -3.45704,-10.66553 0.62989,0.375 1.61329,0.48242 3.21094,0.146 -2.73828,-0.71143 -6.03906,-7.25049 -2.47363,-9.06641
3.78125,4.96826 8.2334,7.89453 13.18848,13.1875 -1.1836,-16.95068 -5.47364,-30.79297 -6.59375,-47.80566 -2.81153,-0.84961 -7.08985,3.12207 -12.36426,2.47265 -1.50488,-2.0664
-1.71387,-5.42822 -4.1211,-6.59326 -1.99218,1.02979 -1.88769,4.15576 -4.94531,4.12061 -0.92676,-2.37061 -1.73144,-4.86231 -3.29687,-6.59375 -5.07129,-0.10645 -11.27539,1.10986
-10.71485,4.12109 -1.72461,-0.44336 -3.09765,-1.44482 -4.12109,0.82471 3.47559,-0.14014 -0.0146,1.26562 0,2.47168 4.17773,1.05713 0.4375,-3.94385 4.12109,-1.64795
-5.9375,4.32422 -2.55566,9.71875 -5.76953,14.83642 1.08301,-0.10888 5.96289,-0.125 3.29688,0.82422 -0.59864,2.39356 3.63281,-3.09228 5.76953,-3.29687 2.38965,2.71777
0.6748,7.90332 1.26855,12.2417 -5.6748,-1.93506 -11.73242,-2.63575 -17.66308,-1.75733 0.12109,-0.96728 0.35644,-1.98681 0.7334,-3.0664 -1.80762,-0.93946 -3.36719,-2.12745
-6.59375,-1.64844 -4.00977,-4.38818 -3.64063,-16.0874 -12.36329,-13.18799 -1.69336,-0.7793 -0.69824,-4.24658 -3.29687,-4.12109 -2.38086,1.46582 -7.85449,-0.16211
-9.06641,2.47265 3.48145,1.03272 0.28125,4.45801 0.82422,7.41797 -5.31543,1.43311 -10.18359,0.50733 -9.0664,-6.59424 -10.00586,0.16065 -17.19532,3.13721 -27.2002,3.29737
1.55664,5.53662 1.95215,6.21191 1.64844,10.71533 -2.26758,-3.99805 -1.76758,1.90088 -4.1211,2.47266 -9.45898,2.22607 -17.45996,-10.37647 -24.72754,-7.41797 3.49219,-0.19483
4.88184,1.71142 5.77149,4.12109 -0.79883,2.22461 -2.06836,3.97754 -4.94727,4.12109 -3.34863,-0.58056 -3.83789,-5.2915 -8.24218,-2.47265 -1.85645,-1.16504 -1.6211,-4.42383
-4.1211,-4.94531 -3.2959,-0.27393 -4.57519,1.46923 -8.24219,0.82421 -1.5664,2.03516 2.33204,4.37842 -0.82421,6.59375 -1.05372,0.0454 -1.14161,1.05664 -2.47266,0.82422
-2.06738,-1.22949 -2.89258,-3.70019 -4.12109,-5.76953 -2.85938,-0.66113 -3.16797,1.22803 -5.76954,0.82422 l -32.96972,4.94531 c -2.90918,0.93701 -6.78418,0.75537
-9.89063,1.49414 l -7.41894,0.93994 c -41.2461,7.6587 -85.13281,12.69727 -126.10742,20.62598 l -14.0127,3.31543 c -4.34668,-0.88867 -9.26855,-0.0762 -14.83594,0.82422
-72.28711,11.6958 -156.9209,24.67285 -229.9624,34.61816 -24.53069,3.49019 -24.05221,7.85228 -25.55127,16.48487 1.6875,2.15869 2.58399,5.1084 2.47315,9.0664 -1.81592,2.18116
-3.54004,1.31934 -6.59424,0.82422 -1.19922,3.19678 -3.94141,4.85108 -7.41797,5.76953 -2.66748,-0.93554 -4.76563,-2.43994 -8.21924,-2.58935 -1.96826,-1.61426 -3.98437,-3.1875
-6.06299,-4.76367 -5.98144,-4.53516 -12.80469,-6.77588 -19.65576,-6.99219 -0.90771,-1.81348 -1.96533,-3.37549 -3.15283,-4.61231 -24.08057,2.29541 -45.39795,7.35352
-69.23584,9.89112 -17.30908,2.47265 -13.80132,2.66723 -17.30908,2.47265 l -32.14551,5.77002 c -8.06348,1.27735 -16.83447,1.84717 -23.90332,4.1211 -0.0982,2.37402
0.45068,5.3955 -0.82373,6.59375 -6.45117,1.26367 -9.55371,0.57617 -10.71485,-4.94532 -9.54834,0.34278 -16.82714,2.95411 -26.37548,3.29688 -5.23584,16.72266
-20.759281,-0.67774 -34.618656,5.76953 0.02734,10.74219 -8.334473,13.0957 -14.011719,18.1333 1.749023,2.9209 6.891601,2.4502 6.594238,7.41797 -5.730957,8.55518
-11.773926,16.80029 -26.375977,16.48584 -5.817871,-8.52441 -6.666503,-30.54346 8.242676,-31.32227 -0.682129,-2.958 1.858399,-3.98681 0,-5.76953 -6.708984,-0.29297
-18.658691,1.05127 -24.727051,4.1211 8.725586,9.1167 -1.884765,25.41992 -9.891113,30.49804 1.819336,21.8086 6.217774,41.03809 9.066895,61.81641 6.033691,-0.81348
9.365234,1.07617 11.539062,4.12109 6.973633,-2.96289 19.833008,-1.1582 23.902832,0.82422 -0.428223,4.79297 -8.676758,1.76367 -7.417969,8.24317 3.940918,1.42968
5.873047,4.86914 9.916016,6.19629 0.694824,5.01562 2.527344,9.98925 5.056641,13.32226 0.777832,1.02539 1.524414,1.96192 2.260253,2.8418 0.122559,1.63769 0.405274,3.26172
0.856446,4.84863 -1.133301,-1.21777 -2.624512,-2.00781 -4.901367,-1.6582 -0.451172,3.12207 -2.682129,4.46191 -2.473145,8.24219 0.428223,2.04589 2.009766,2.93652
3.297363,4.12109 -0.492187,3.35254 -2.481933,4.37695 -2.473144,7.41894 0.02393,8.31836 7.888183,10.95704 13.187988,14.83594 3.721192,2.72363 5.084473,6.5293
8.242188,7.41797 2.74414,0.77246 6.482422,-0.60547 9.891113,0 6.48682,1.15332 8.09814,1.91699 14.83643,0.82422 28.66211,-4.64746 66.95361,-9.82813 90.66601,-14.01172
l 32.96924,-4.94531 c 2.90967,-0.9375 6.7832,-0.91016 9.89111,-1.64844 l 7.41797,-0.82422 c 24.0918,-4.22558 49.51953,-8.6123 72.53272,-11.53906 1.82715,-1.74609
1.7373,-5.40723 5.77002,-4.94629 3.11621,0.5127 -0.89112,3.44336 3.29687,3.29688 14.06641,-2.14356 28.33936,-4.08008 42.03613,-6.59375 l 280.24024,-43.68457
c 40.92969,-5.50098 83.10058,-14.15918 122.81152,-18.13282 l 9.06641,-2.47265 c 2.87793,0.62402 6.22363,-2.49512 8.24316,0 l 33.79297,-6.59375 c 15.21289,-1.82227
29.29785,-4.77149 44.50977,-6.59473 4.45117,-7.63672 14.49902,-9.67676 25.55078,-10.71484 3.02344,-1.12305 5.98242,-2.02247 8.89355,-2.792 6.04492,2.67969
13.10254,4.58008 19.46973,4.29493 C 939.91797,411.49609 946.02051,409 952.4873,406 l 0.003,0 c -4.4414,2 -0.96289,0.16406 1.01465,-0.30664 1.3584,-0.17383
2.7168,-0.4502 4.0791,-0.67578 8.74512,-1.44824 15.28907,-7.40918 18.85254,-14.88867 9.21387,-2.26954 18.5625,-4.13184 27.46971,-6.1792 z M 982.47656,259.49023
c -8.74316,3.625 -1.10351,-9.87158 0,0 z m -5.76953,-9.89111 c 3.08692,-0.32617 4.25098,3.74902 2.47266,5.76953 -3.28516,0.5376 -2.36133,-3.13379 -2.47266,-5.76953
z M 32.131348,417.74316 c -2.375,-0.0976 -5.396485,0.45118 -6.594727,-0.82421 0.156738,-0.93555 0.82666,-0.45704 0.824219,0 3.558594,-1.54395 5.482422,0.40039
5.770508,-4.1211 2.320312,0.83301 -0.228028,3.50195 0,4.94531 z m 3.296386,-21.42871 c -0.02246,0.80078 -1.008789,0.6377 -1.648437,0.82325 0.02246,0.80175
1.009277,0.63964 1.648437,0.82421 -1.230468,2.47559 -3.694336,-0.60644 -3.296386,-2.47265 0.732422,-0.64063 1.860351,-0.88672 3.296386,-0.82422 -0.506836,0.7334
-0.995117,1.47461 0,1.64941 z M 82.40918,515.00391 c 1.590332,2.10058 3.798339,1.7539 5.211914,0.23925 0.268066,0.23438 0.540527,0.46192 0.812988,0.68946
-2.038574,1.88281 -5.668457,2.66015 -6.024902,-0.92871 z M 355.23193,342.73779 c -1.78222,0.69092 -2.81201,2.13428 -5.76953,1.64893 -8.6206,-7.1792 9.58643,-13.83936
5.76953,-1.64893 z m 18.13282,-7.41797 c -4.00586,-2.90478 -5.90479,-11.23974 -4.94532,-16.48486 3.80567,3.61279 6.58448,8.25195 8.24268,14.01221 -2.1582,-3.3374
-4.02539,-6.96387 -6.59424,-9.89112 -2.5293,4.1001 5.34375,8.68653 3.29688,12.36377 z m 446.73681,-79.12695 c -2.64648,0.72266 -1.70898,-2.13721 -3.29687,-2.47266
0.25488,-1.11865 2.06347,-0.6831 3.29687,-0.82421 -0.0742,2.24902 1.37305,1.65966 0,3.29687 z m 12.36328,-1.64844 c -1.05761,-1.083 -1.05761,-3.03808 0,-4.12109
2.09766,0.10059 3.19629,1.19971 3.29688,3.29687 -0.7334,0.64063 -1.86035,0.88624 -3.29688,0.82422 z m 4.1211,4.1211 c -0.80957,-4.20362 3.08203,-7.56739
6.59375,-9.89063 2.88086,0.6919 5.84668,1.29737 5.77051,4.94531 2.48046,-1.15478 5.98437,-1.20312 6.59375,1.64844 -4.13575,5.43604 -17.11915,12.84473 -18.95801,3.29688 z
m 18.95801,9.06689 c -0.66797,-0.15674 -0.82129,-0.82666 -1.64844,-0.82373 0.15136,-0.70166 -0.32129,-0.77832 -0.82422,-0.82471 0.60742,-0.86767 3.1416,0.56641
3.29687,-2.47265 0.1045,-1.47901 -1.00976,-1.73877 -0.82421,-3.29688 -1.87891,-0.23095 -3.09864,0.19873 -3.29688,1.64844 -1.79199,-2.97021 5.64844,-2.97021 6.59375,0
0.22656,3.24854 -3.52441,2.52051 -3.29687,5.76953 z m 126.93261,51.10254 c -0.65234,-1.78516 -1.65625,-2.55176 -2.85156,-2.82715 0.43555,-0.65722 0.84473,-1.34228
1.22656,-2.05615 0.49512,1.67383 2.01465,2.32422 1.625,4.8833 z m -19.78222,-62.64209 c 2.16015,1.1377 2.83691,3.75684 5.76953,4.12158 1.06933,-1.67871 0.53027,-4.96484
3.29687,-4.9458 1.20703,0.7168 2.61328,1.23389 2.47364,3.29688 -0.31446,3.53222 -4.22168,3.47168 -5.77051,5.77051 2.75488,0.4663 2.71777,2.65771 3.07226,4.42822
-3.03222,-5.0083 -7.28906,-9.36914 -12.27539,-12.71582 1.08887,-0.0947 2.22949,-0.0899 3.4336,0.0444 z m -50.27832,-18.95752 c 5.68164,-4.28174 4.78515,8.15186
-0.82422,3.29736 0.0693,-1.30517 -0.39649,-3.14404 0.82422,-3.29736 z m -32.96973,14.83643 c -5.87598,-1.50293 -5.95215,-5.31787 -0.82324,-0.82422 2.66699,1.01855
0.6289,-2.66699 3.2959,-1.64844 0.21582,-2.41308 -1.86329,-2.53223 -1.64844,-4.94531 -2.52051,-0.59815 -2.42383,1.42139 -4.94531,0.82422 0.0908,-2.10596
2.75976,-1.63623 4.94531,-1.64844 2.78711,2.30371 3.21679,7.03271 -0.82422,8.24219 z"
style="clip-rule:evenodd;fill:#b50202;fill-rule:evenodd" />
<path fill-rule="evenodd" clip-rule="evenodd" fill="#B50202"
d="M978,223.2241211c0-1.9238281,0-3.8466797,0-5.7700195 c-3-0.4731445-10.0166016,0.3754883-8.2431641,2.4726563C971.2460938,220.8037109,974,222.7402344,978,223.2241211z" />
<path fill-rule="evenodd" clip-rule="evenodd" fill="#B50202"
d="M937.9677734,230.6411133 c2.5419922,0.0585938,1.0898438-3.0454102,1.6484375-6.5932617c-1.1357422,0.0351563-1.8095703-0.3886719-2.4726563-0.8237305
C938.2304688,227.1489258,939.0458984,227.1333008,937.9677734,230.6411133z" />
<path fill-rule="evenodd" clip-rule="evenodd" fill="#B50202"
d="M925.6035156,231.4658203 c0.1972656-1.5458984,1.3574219,0.4677734,1.6484375-0.824707c-0.5029297-0.0458984-0.9755859-0.1225586-0.8242188-0.8237305
c2.0351563-0.7128906,5.7060547,0.2109375,5.7695313-2.4726563 C929.1445313,227.3496094,923.7236328,229.2631836,925.6035156,231.4658203z" />
<path fill-rule="evenodd" clip-rule="evenodd" fill="#B50202"
d="M930.5488281,231.4658203 c3.1601563-0.1494141,0.2988281,0.6748047,0.8242188,2.4726563c2.5097656,0.0366211,3.2060547-1.7402344,4.9462891-2.4726563
c-0.0029297,0.8271484,0.6669922,0.980957,0.8242188,1.6479492c-2.0371094-2.0493164-2.4394531,1.7451172-4.1210938,2.4731445
c2.3408203,2.3540039,1.1855469-2.996582,4.9453125-1.6484375c0.7158203-3.1889648-2.0136719-2.9321289-2.4726563-4.9453125
C933.6611328,229.6333008,931.0253906,229.46875,930.5488281,231.4658203z" />
<path fill-rule="evenodd" clip-rule="evenodd" fill="#B50202"
d="M926.4277344,243.0053711 c3.1328125-1.8076172,3.1279297,1.6533203,6.5947266,1.6484375c0.2880859-3.1713867,3.0205078-3.8974609,4.1210938-4.1210938
c-2.1669922,0.2436523-0.6494141-3.1982422-3.296875-2.4731445c-2.0175781,0.730957-0.8935547,4.6025391-4.1220703,4.121582
c-0.0019531-0.8266602,0.6679688-0.980957,0.8242188-1.6484375 C928.4433594,240.6245117,927.6640625,242.0439453,926.4277344,243.0053711z" />
<path fill-rule="evenodd" clip-rule="evenodd" fill="#B50202"
d="M59.3305664,486.15625 c-0.0102539,1.6367188-2.2485352,1.0478516-1.6484375,3.2958984c1.878418-1.1318359,3.0986328,2.125,3.296875,0
C58.7407227,490.0419922,61.5688477,485.5654297,59.3305664,486.15625z" />
<path fill-rule="evenodd" clip-rule="evenodd" fill="#B50202"
d="M58.5063477,510.8828125 c-1.534668-0.7880859-2.7548828,2.4677734-3.296875,0c0.5595703-2.2763672,0.1489258-1.8818359,2.4726563-3.2978516
c-2.1835938-2.3632813-0.4360352-8.8613281-7.4179688-8.2421875c-1.5712891,7.2363281-6.8120117,16.4111328-10.7158203,23.9033203
c1.5380859,8.9023438,3.2910156,17.5908203,4.121582,27.1992188c6.940918,1.7294922,23.5087891-5.4667969,25.5512695-3.296875
c0.4970703-5.2724609,11.3886719-0.1513672,13.1879883-4.1210938 C81.8623047,527.4199219,57.2509766,530.8154297,58.5063477,510.8828125z" />
<path fill-rule="evenodd" clip-rule="evenodd" fill="#B50202"
d="M844.828125,250.4233398 c-1.2333984,0.1411133-3.0410156-0.2944336-3.296875,0.8242188c2.2978516,2.6484375,3.7373047,6.1542969,6.5947266,8.2426758
c0.1816406-0.6425781,0.6894531-0.9584961,1.6484375-0.824707 C850.5302734,252.5976563,844.0488281,252.1230469,844.828125,250.4233398z" />
</g>
<g id="schrift">
<path fill="#FFFFFF"
d="M71.8759766,408.8876953l41.2275391-6.4589844 c4.1943359-0.6572266,8.1435547-0.7929688,11.8447266-0.4082031c3.6992188,0.3857422,7,1.2939453,9.9013672,2.7246094
c2.8994141,1.4335938,5.3017578,3.46875,7.2070313,6.1083984c1.9052734,2.6416016,3.1601563,5.8867188,3.7636719,9.7392578
c0.8857422,5.6513672,0.2158203,10.3408203-2.0078125,14.0654297c-2.2236328,3.7265625-5.7265625,6.8417969-10.5097656,9.3447266
l0.0400391,0.2568359c12.4628906,0.5927734,19.53125,6.2392578,21.2080078,16.9414063
c0.8457031,5.3945313,0.4580078,9.9287109-1.1582031,13.6035156c-1.6171875,3.6748047-3.9443359,6.7363281-6.9814453,9.1865234
c-3.0371094,2.4492188-6.5791016,4.3427734-10.625,5.6777344c-4.0458984,1.3369141-8.0800781,2.3183594-12.1035156,2.9492188 l-37.7597656,5.9160156L71.8759766,408.8876953z
M101.3193359,440.5927734l6.6796875-1.046875 c1.9667969-0.3076172,3.8710938-0.7587891,5.7080078-1.3544922c1.8349609-0.59375,3.4501953-1.3505859,4.8417969-2.2724609
c1.3896484-0.9179688,2.4580078-2.0722656,3.2080078-3.4628906c0.7460938-1.3876953,0.9726563-3.0244141,0.6777344-4.9091797
c-0.3222656-2.0546875-1.0263672-3.609375-2.1132813-4.6689453c-1.0869141-1.0576172-2.40625-1.7714844-3.9541016-2.1435547
c-1.5507813-0.3701172-3.2802734-0.4941406-5.1904297-0.3710938c-1.9111328,0.1240234-3.8505859,0.3398438-5.8193359,0.6484375 l-6.9355469,1.0859375L101.3193359,440.5927734z
M107.1552734,477.8378906l7.0634766-1.1064453 c2.1396484-0.3349609,4.2646484-0.7773438,6.3710938-1.3271484c2.1064453-0.5478516,3.9589844-1.3212891,5.5585938-2.3183594
c1.5986328-0.9951172,2.8046875-2.2597656,3.6171875-3.7910156c0.8134766-1.5292969,1.0380859-3.4521484,0.6757813-5.7636719
c-0.375-2.3964844-1.2128906-4.2382813-2.5107422-5.5283203c-1.2998047-1.2871094-2.8359375-2.1416016-4.6132813-2.5664063
c-1.7773438-0.4228516-3.7314453-0.5771484-5.8623047-0.4628906c-2.1328125,0.1162109-4.2246094,0.3330078-6.2792969,0.6542969 l-7.3212891,1.1474609L107.1552734,477.8378906z" />
<path fill="#FFFFFF"
d="M154.9716797,395.8681641l63.1894531-9.9003906l2.65625,16.953125l-39.3007813,6.1572266
l2.8984375,18.4951172l37.1171875-5.8164063l2.65625,16.953125l-37.1171875,5.8164063L190.25,464.8183594l40.7138672-6.3789063
l2.65625,16.953125l-64.6025391,10.1220703L154.9716797,395.8681641z" />
<path fill="#FFFFFF"
d="M249.7060547,399.1835938l-22.0908203,3.4619141l-2.7763672-17.7241211l68.0683594-10.6655273
l2.7773438,17.7236328l-22.0898438,3.4619141l11.2685547,71.921875l-23.8886719,3.7431641L249.7060547,399.1835938z" />
<path fill="#FFFFFF"
d="M317.5693359,370.3916016l29.2822266-4.5878906l48.5947266,84.2333984l-26.2001953,4.1044922
l-9.6767578-18.0898438l-33.6503906,5.2724609l-4.0654297,20.2431641l-24.2734375,3.8037109L317.5693359,370.3916016z
M335.1074219,386.5917969l-0.2568359,0.0410156l-6.0644531,36.8730469l22.4755859-3.5214844L335.1074219,386.5917969z" />
<path fill="#FFFFFF"
d="M391.1445313,406.6298828l34.8056641-5.4541016l2.65625,16.953125l-34.8056641,5.4541016 L391.1445313,406.6298828z" />
<path fill="#FFFFFF"
d="M446.5947266,368.3349609l-22.0908203,3.4609375l-2.7763672-17.7241211l68.0683594-10.6655273
l2.7773438,17.7241211l-22.0898438,3.4614258l11.2685547,71.921875l-23.8886719,3.7431641L446.5947266,368.3349609z" />
<path fill="#FFFFFF"
d="M496.6025391,342.3398438l63.1894531-9.9008789l2.65625,16.953125l-39.2998047,6.1577148
l2.8974609,18.4951172l37.1171875-5.815918l2.65625,16.9526367l-37.1171875,5.8164063l3.1796875,20.2919922l40.7128906-6.3789063
l2.65625,16.953125l-64.6015625,10.1220703L496.6025391,342.3398438z" />
<path fill="#FFFFFF"
d="M583.9902344,397.8623047c3.3505859,1.2304688,7.2109375,2.0732422,11.5810547,2.5273438
c4.3681641,0.4560547,9.0371094,0.2949219,14.0039063-0.4833984c1.8818359-0.2949219,3.7070313-0.6904297,5.4716797-1.1865234
c1.765625-0.4941406,3.28125-1.171875,4.5507813-2.0283203c1.2685547-0.8564453,2.2197266-1.9267578,2.8525391-3.2109375
c0.6318359-1.2832031,0.8076172-2.8232422,0.5263672-4.6220703c-0.4433594-2.8251953-1.8271484-4.7998047-4.1533203-5.9287109
c-2.3271484-1.1259766-5.1357422-1.9785156-8.4277344-2.5610352c-3.2939453-0.5795898-6.8652344-1.1157227-10.7138672-1.6108398
c-3.8496094-0.4926758-7.4882813-1.4580078-10.9140625-2.8955078c-3.4287109-1.4370117-6.4453125-3.6162109-9.0527344-6.5429688
c-2.6083984-2.9233398-4.3398438-7.1259766-5.1982422-12.6064453c-0.8457031-5.394043-0.3486328-10.0556641,1.4931641-13.9848633
c1.8388672-3.9272461,4.4619141-7.2124023,7.8642578-9.8515625c3.4023438-2.6381836,7.3486328-4.7475586,11.8378906-6.3286133
c4.4902344-1.5791016,9.0019531-2.7255859,13.5419922-3.4370117c4.3662109-0.684082,8.6074219-1.0405273,12.7265625-1.0737305
c4.1181641-0.0302734,7.7548828,0.2329102,10.9140625,0.7905273l1.3564453,18.7353516
c-3.3105469-0.972168-6.7070313-1.5141602-10.1894531-1.6264648c-3.484375-0.1123047-6.9375,0.1000977-10.3613281,0.6362305
c-1.5410156,0.2416992-3.2226563,0.5708008-5.0429688,0.9873047c-1.8222656,0.4174805-3.5019531,1.0322266-5.0410156,1.8422852
c-1.5390625,0.8125-2.7792969,1.8623047-3.7167969,3.1489258c-0.9394531,1.2875977-1.2539063,2.9160156-0.9453125,4.8847656
c0.3759766,2.3984375,1.7109375,4.0742188,4.0117188,5.0297852c2.2988281,0.9555664,5.0839844,1.6601563,8.3574219,2.1118164
c3.2724609,0.4536133,6.8300781,0.9038086,10.6738281,1.3540039c3.8417969,0.4506836,7.4794922,1.4169922,10.9140625,2.8955078
c3.4335938,1.480957,6.453125,3.6826172,9.0625,6.6064453c2.6064453,2.9267578,4.3339844,7.0849609,5.1787109,12.4794922
c0.9130859,5.8232422,0.5537109,10.8134766-1.0751953,14.9716797c-1.6308594,4.1591797-4.1113281,7.640625-7.4433594,10.4423828
c-3.3339844,2.8046875-7.3046875,5.0273438-11.9160156,6.6699219c-4.6113281,1.6435547-9.4013672,2.8554688-14.3662109,3.6328125
c-4.1953125,0.6582031-8.7412109,1.0410156-13.6357422,1.1503906c-4.8964844,0.109375-9.4570313-0.1640625-13.6816406-0.8173828 L583.9902344,397.8623047z" />
<path fill="#FFFFFF"
d="M667.2402344,333.7626953l-22.0908203,3.4614258L642.3720703,319.5l68.0703125-10.6655273
l2.7763672,17.7241211l-22.0898438,3.4609375l11.2685547,71.9228516l-23.8886719,3.7421875L667.2402344,333.7626953z" />
<path fill="#FFFFFF"
d="M719.046875,307.4863281l23.8886719-3.7431641l14.0458984,89.6464844l-23.8886719,3.7431641 L719.046875,307.4863281z" />
<path fill="#FFFFFF"
d="M758.6044922,301.2880859l30.4384766-4.769043l39.8486328,56.1279297l0.2578125-0.0400391
l-9.9238281-60.8168945l21.8330078-3.4208984l14.0458984,89.6464844l-29.6679688,4.6484375L784.5,326.3115234
l-0.2558594,0.0405273l10.3681641,61.1411133l-21.9619141,3.4414063L758.6044922,301.2880859z" />
<path fill="#FFFFFF"
d="M952.0546875,360.1928711c-7.3134766,3.1650391-13.7851563,5.3842773-19.4179688,6.6616211 c-5.6347656,1.2773438-10.5048828,2.2382813-14.6142578,2.8818359
c-5.9951172,0.9394531-12.1816406,1.0737305-18.5566406,0.4072266 c-6.3769531-0.6660156-12.3085938-2.4140625-17.7949219-5.2382813
c-5.4873047-2.824707-10.2529297-6.9243164-14.2958984-12.3007813c-4.0458984-5.3735352-6.7304688-12.3007813-8.0585938-20.777832
c-1.328125-8.4765625-1.0429688-15.8901367,0.8574219-22.2402344c1.8994141-6.3510742,5.0615234-11.7807617,9.4873047-16.2900391
s9.9716797-8.1625977,16.6376953-10.9633789c6.6679688-2.7983398,14.1113281-4.8417969,22.3310547-6.1298828
c1.4550781-0.2280273,3.2822266-0.4697266,5.4785156-0.7275391c2.1962891-0.2553711,4.5585938-0.4287109,7.0898438-0.5185547
c2.5292969-0.0878906,5.0976563-0.0751953,7.7050781,0.0424805c2.6044922,0.1186523,5.0878906,0.4326172,7.4492188,0.9384766
l1.1328125,19.8237305c-4.1171875-1.6347656-8.2294922-2.546875-12.3369141-2.7382813
c-4.109375-0.1884766-7.5771484-0.0625-10.4013672,0.3798828c-4.8808594,0.7646484-9.3789063,2.0175781-13.4921875,3.7587891
c-4.1142578,1.7421875-7.59375,4.019043-10.4423828,6.8334961c-2.8486328,2.8149414-4.9052734,6.2094727-6.1689453,10.1777344
c-1.265625,3.9711914-1.4863281,8.5683594-0.6679688,13.7895508c0.6835938,4.3666992,2.0498047,8.1884766,4.0976563,11.4638672
c2.0478516,3.2768555,4.5693359,5.9291992,7.5644531,7.9599609c2.9921875,2.03125,6.4316406,3.4008789,10.3144531,4.1083984
c3.8818359,0.7070313,8.0087891,0.71875,12.375,0.0341797c3.4238281-0.5361328,6.1689453-1.4926758,8.2353516-2.8691406
l-2.7763672-17.7236328l-14,2.1933594l-2.65625-16.9536133l37.1162109-5.8154297L952.0546875,360.1928711z" />
</g>
<mask id="maskLeft">
<rect x="0" y="0" width="17.25" height="37" style="fill:#ffffff" />
</mask>
<mask id="maskRight">
<rect x="19.75" y="0" width="17.25" height="37" style="fill:#ffffff" />
</mask>
</defs>
<path d="M 18.5 5 L 18.5 9.8 A 8.7 8.7 0 0 0 18.5 27.2 L 18.5 32 A 13.5 13.5 0 0 1 18.5 5" style="fill:url(#linearGradient2688);stroke:none" mask="url(#maskLeft)"/>
<path d="M 18.5 5 L 18.5 9.8 A 8.7 8.7 0 0 1 18.5 27.2 L 18.5 32 A 13.5 13.5 0 0 0 18.5 5" style="fill:url(#linearGradient2683);stroke:none" mask="url(#maskRight)"/>
<use xlink:href="#balken" transform="translate(0.5,5) scale(0.035,0.035)" />
<use xlink:href="#schrift" transform="translate(0.5,5) scale(0.035,0.035)" />
</svg>

After

Width:  |  Height:  |  Size: 26 KiB

Some files were not shown because too many files have changed in this diff Show More