diff --git a/3rdparty/ext_frameworks/CMakeLists.txt b/3rdparty/ext_frameworks/CMakeLists.txt index 67311172af..9aa57f36f9 100644 --- a/3rdparty/ext_frameworks/CMakeLists.txt +++ b/3rdparty/ext_frameworks/CMakeLists.txt @@ -1,243 +1,243 @@ SET(EXTPREFIX_frameworks "${EXTPREFIX}" ) # # All needed frameworks: # # Archive # Config # WidgetsAddons # Completion # CoreAddons # GuiAddons # I18n # ItemModels # ItemViews # WindowSystem # kimageformats # On Linux: # KCrash ExternalProject_Add( ext_extra_cmake_modules DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} - URL http://download.kde.org/stable/frameworks/5.44/extra-cmake-modules-5.44.0.zip - URL_MD5 74aa8fc501e27024390b01c81f2925eb + URL http://download.kde.org/stable/frameworks/5.60/extra-cmake-modules-5.60.0.zip + URL_MD5 c205e17d89028ab0b034e68081d5ebfb PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/ecm_install_to_share.diff INSTALL_DIR ${EXTPREFIX_frameworks} CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} ${GLOBAL_PROFILE} -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} -DBUILD_TESTING=false UPDATE_COMMAND "" ) ExternalProject_Add( ext_karchive DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} - URL http://download.kde.org/stable/frameworks/5.44/karchive-5.44.0.zip - URL_MD5 c60a8e22b88cc7328610041638459689 + URL http://download.kde.org/stable/frameworks/5.60/karchive-5.60.0.zip + URL_MD5 50ae1495ef5b19898a06e43160d9b84d PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/karchive.diff INSTALL_DIR ${EXTPREFIX_frameworks} CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} ${GLOBAL_PROFILE} -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} -DBUILD_TESTING=false UPDATE_COMMAND "" DEPENDS ext_extra_cmake_modules ) ExternalProject_Add( ext_kconfig DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} - URL http://download.kde.org/stable/frameworks/5.44/kconfig-5.44.0.zip - URL_MD5 d0223ea471bbf463ec42c2a2355a5183 + URL http://download.kde.org/stable/frameworks/5.60/kconfig-5.60.0.zip + URL_MD5 db96fdd78a574d07b09abb720dae1a06 PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/kconfig.diff INSTALL_DIR ${EXTPREFIX_frameworks} CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} ${GLOBAL_PROFILE} -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} -DBUILD_TESTING=false UPDATE_COMMAND "" DEPENDS ext_karchive ) ExternalProject_Add( ext_kwidgetsaddons DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} - URL http://download.kde.org/stable/frameworks/5.44/kwidgetsaddons-5.44.0.zip - URL_MD5 a9911d8d0f8aaf7a7afd84c41c8f80a1 + URL http://download.kde.org/stable/frameworks/5.60/kwidgetsaddons-5.60.0.zip + URL_MD5 1b09306fe482dd5665b16a243eb2be94 INSTALL_DIR ${EXTPREFIX_frameworks} - PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/kwidgetsaddons.diff +# PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/kwidgetsaddons.diff CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} ${GLOBAL_PROFILE} -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} -DBUILD_TESTING=false UPDATE_COMMAND "" DEPENDS ext_kconfig ) ExternalProject_Add( ext_kcompletion DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} - URL http://download.kde.org/stable/frameworks/5.44/kcompletion-5.44.0.zip - URL_MD5 0647885a702c338a1b656eb4f311ad16 + URL http://download.kde.org/stable/frameworks/5.60/kcompletion-5.60.0.zip + URL_MD5 a9848cb26ff96246769c56244f0db25f INSTALL_DIR ${EXTPREFIX_frameworks} CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} ${GLOBAL_PROFILE} -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} -DBUILD_TESTING=false UPDATE_COMMAND "" DEPENDS ext_kwidgetsaddons ) ExternalProject_Add( ext_kcoreaddons DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} - URL http://download.kde.org/stable/frameworks/5.44/kcoreaddons-5.44.0.zip - URL_MD5 16a7379f3e2941d1c19d6f80939f15e8 + URL http://download.kde.org/stable/frameworks/5.60/kcoreaddons-5.60.0.zip + URL_MD5 da21c1532042c2c8a7e56f444c581196 INSTALL_DIR ${EXTPREFIX_frameworks} PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/desktoptojson.diff CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} ${GLOBAL_PROFILE} -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} -DBUILD_TESTING=false UPDATE_COMMAND "" DEPENDS ext_kcompletion ) ExternalProject_Add( ext_kguiaddons DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} - URL http://download.kde.org/stable/frameworks/5.44/kguiaddons-5.44.0.zip - URL_MD5 440eefbf5abcafc492dcf857f7e4eaf5 + URL http://download.kde.org/stable/frameworks/5.60/kguiaddons-5.60.0.zip + URL_MD5 f8aeea516e264c80df470efafab6ded0 INSTALL_DIR ${EXTPREFIX_frameworks} CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} ${GLOBAL_PROFILE} -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} -DBUILD_TESTING=false UPDATE_COMMAND "" DEPENDS ext_kcoreaddons ) if(APPLE) ExternalProject_Add( ext_ki18n DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} - URL http://download.kde.org/stable/frameworks/5.44/ki18n-5.44.0.zip - URL_MD5 333ab0a3f65a298e928d746144d4dc8e + URL http://download.kde.org/stable/frameworks/5.60/ki18n-5.60.0.zip + URL_MD5 e53f479f22ea17629319fec710dda036 INSTALL_DIR ${EXTPREFIX_frameworks} PATCH_COMMAND COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/ki18n-appdatalocation.diff CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} ${GLOBAL_PROFILE} -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} -DBUILD_TESTING=false UPDATE_COMMAND "" DEPENDS ext_kguiaddons ext_gettext ) else() ExternalProject_Add( ext_ki18n DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} - URL http://download.kde.org/stable/frameworks/5.44/ki18n-5.44.0.zip - URL_MD5 333ab0a3f65a298e928d746144d4dc8e + URL http://download.kde.org/stable/frameworks/5.60/ki18n-5.60.0.zip + URL_MD5 e53f479f22ea17629319fec710dda036 INSTALL_DIR ${EXTPREFIX_frameworks} PATCH_COMMAND COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/ki18n-appdatalocation.diff CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} ${GLOBAL_PROFILE} -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} -DBUILD_TESTING=false UPDATE_COMMAND "" DEPENDS ext_kguiaddons ) endif() ExternalProject_Add( ext_kitemmodels DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} - URL http://download.kde.org/stable/frameworks/5.44/kitemmodels-5.44.0.zip - URL_MD5 ea43a5e2cc7033eb672796b108d7403b + URL http://download.kde.org/stable/frameworks/5.60/kitemmodels-5.60.0.zip + URL_MD5 c8f02881a65d496d6114bb2155cdfc36 INSTALL_DIR ${EXTPREFIX_frameworks} CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} ${GLOBAL_PROFILE} -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} -DBUILD_TESTING=false UPDATE_COMMAND "" DEPENDS ext_ki18n ) ExternalProject_Add( ext_kitemviews DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} - URL http://download.kde.org/stable/frameworks/5.44/kitemviews-5.44.0.zip - URL_MD5 8b15c703313c7a790c7db897ef17de7d + URL http://download.kde.org/stable/frameworks/5.60/kitemviews-5.60.0.zip + URL_MD5 9d94b8da72f43fac39aa782f7efd941e INSTALL_DIR ${EXTPREFIX_frameworks} CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} ${GLOBAL_PROFILE} -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} -DBUILD_TESTING=false UPDATE_COMMAND "" DEPENDS ext_kitemmodels ) ExternalProject_Add( ext_kimageformats DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} - URL http://download.kde.org/stable/frameworks/5.44/kimageformats-5.44.0.zip - URL_MD5 02a98b682f9cb655592148d7ebcc05e7 + URL http://download.kde.org/stable/frameworks/5.60/kimageformats-5.60.0.zip + URL_MD5 a8b413560d12cd956d689784a056d6e0 INSTALL_DIR ${EXTPREFIX_frameworks} PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/kimageformats.diff CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} ${GLOBAL_PROFILE} -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} -DBUILD_TESTING=false UPDATE_COMMAND "" DEPENDS ext_kitemviews ) ExternalProject_Add( ext_kwindowsystem DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} - URL http://download.kde.org/stable/frameworks/5.44/kwindowsystem-5.44.0.zip - URL_MD5 75329f47cf8cd413fa1d15a57c298563 + URL http://download.kde.org/stable/frameworks/5.60/kwindowsystem-5.60.0.zip + URL_MD5 c15c29141b5edca67143b735a94d3f43 INSTALL_DIR ${EXTPREFIX_frameworks} PATCH_COMMAND ${PATCH_COMMAND} -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/kwindowsystem-x11.diff CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} ${GLOBAL_PROFILE} -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} -DBUILD_TESTING=false UPDATE_COMMAND "" DEPENDS ext_kimageformats ) ExternalProject_Add( ext_kcrash DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} - URL http://download.kde.org/stable/frameworks/5.44/kcrash-5.44.0.zip - URL_MD5 61adc0e125c65288968d958acf25f4aa + URL http://download.kde.org/stable/frameworks/5.60/kcrash-5.60.0.zip + URL_MD5 7449a6f2b314b944ab2bed00124fe69b INSTALL_DIR ${EXTPREFIX_frameworks} CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTPREFIX_frameworks} -DCMAKE_BUILD_TYPE=${GLOBAL_BUILD_TYPE} ${GLOBAL_PROFILE} -DCMAKE_SYSTEM_PREFIX_PATH=${EXTPREFIX} -DBUILD_TESTING=false UPDATE_COMMAND "" DEPENDS ext_kwindowsystem ) diff --git a/3rdparty/ext_frameworks/karchive.diff b/3rdparty/ext_frameworks/karchive.diff index 909d6beb59..e5ce615438 100644 --- a/3rdparty/ext_frameworks/karchive.diff +++ b/3rdparty/ext_frameworks/karchive.diff @@ -1,39 +1,21 @@ diff --git a/CMakeLists.txt b/CMakeLists.txt -index 2441977..2a20a13 100644 +index 45b3bf0..6afd3cb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -29,20 +29,20 @@ set_package_properties(ZLIB PROPERTIES - PURPOSE "Required by the core KDE libraries and some critical kioslaves" +@@ -33,7 +33,7 @@ find_package(BZip2) + set_package_properties(BZip2 PROPERTIES + URL "https://sourceware.org/bzip2/" + DESCRIPTION "Support for BZip2 compressed files and data streams" +- TYPE RECOMMENDED ++ TYPE OPTIONAL + PURPOSE "Support for BZip2 compressed files and data streams" ) --find_package(BZip2) --set_package_properties(BZip2 PROPERTIES -- URL "http://www.bzip.org" -- DESCRIPTION "Support for BZip2 compressed files and data streams" -- TYPE RECOMMENDED -- PURPOSE "Support for BZip2 compressed files and data streams" --) -- --find_package(LibLZMA) --set_package_properties(LibLZMA PROPERTIES -- URL "http://tukaani.org/xz/" -- DESCRIPTION "Support for xz compressed files and data streams" -- PURPOSE "Support for xz compressed files and data streams" --) -+#find_package(BZip2) -+#set_package_properties(BZip2 PROPERTIES -+# URL "http://www.bzip.org" -+# DESCRIPTION "Support for BZip2 compressed files and data streams" -+# TYPE RECOMMENDED -+# PURPOSE "Support for BZip2 compressed files and data streams" -+#) -+ -+#find_package(LibLZMA) -+#set_package_properties(LibLZMA PROPERTIES -+# URL "http://tukaani.org/xz/" -+# DESCRIPTION "Support for xz compressed files and data streams" -+# PURPOSE "Support for xz compressed files and data streams" -+#) - include_directories( - ${ZLIB_INCLUDE_DIR} +@@ -41,6 +41,7 @@ find_package(LibLZMA) + set_package_properties(LibLZMA PROPERTIES + URL "http://tukaani.org/xz/" + DESCRIPTION "Support for xz compressed files and data streams" ++ TYPE OPTIONAL + PURPOSE "Support for xz compressed files and data streams" ) + include_directories( diff --git a/3rdparty/ext_frameworks/kconfig.diff b/3rdparty/ext_frameworks/kconfig.diff index df589aa57b..6bbc38cf7b 100644 --- a/3rdparty/ext_frameworks/kconfig.diff +++ b/3rdparty/ext_frameworks/kconfig.diff @@ -1,144 +1,89 @@ -diff --git a/autotests/kconfigtest.cpp b/autotests/kconfigtest.cpp -index 3e0578f..6c4408d 100644 ---- a/autotests/kconfigtest.cpp -+++ b/autotests/kconfigtest.cpp -@@ -587,7 +587,7 @@ void KConfigTest::testPathQtHome() - qunsetenv("QT_CACHE_HOME"); - qunsetenv("QT_CONFIG_HOME"); - QVERIFY(group.hasKey("dataDir")); -- QCOMPARE(group.readEntry("dataDir", QString()), QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation).append(QStringLiteral("/kconfigtest"))); -+ QCOMPARE(group.readEntry("dataDir", QString()), QStandardPaths::writableLocation(QStandardPaths::AppDataLocation).append(QStringLiteral("/kconfigtest"))); - QVERIFY(group.hasKey("cacheDir")); - QCOMPARE(group.readEntry("cacheDir", QString()), QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation).append(QStringLiteral("/kconfigtest"))); - QVERIFY(group.hasKey("configDir")); -diff --git a/autotests/kdesktopfiletest.cpp b/autotests/kdesktopfiletest.cpp -index fd4a5c9..db08f22 100644 ---- a/autotests/kdesktopfiletest.cpp -+++ b/autotests/kdesktopfiletest.cpp -@@ -222,7 +222,7 @@ void KDesktopFileTest::testIsAuthorizedDesktopFile() - QVERIFY(QFile::exists(fileName)); - QVERIFY(!KDesktopFile::isAuthorizedDesktopFile(fileName)); - -- const QString installedFile = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("/kservices5/http_cache_cleaner.desktop")); -+ const QString installedFile = QStandardPaths::locate(QStandardPaths::AppDataLocation, QStringLiteral("/kservices5/http_cache_cleaner.desktop")); - if (!installedFile.isEmpty()) { - QVERIFY(KDesktopFile::isAuthorizedDesktopFile(installedFile)); - } else { -@@ -281,8 +281,8 @@ void KDesktopFileTest::testLocateLocal_data() - { - QString systemConfigLocation = QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation).last(); - QString writableConfigLocation = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation); -- QString systemDataLocation = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation).last(); -- QString writableDataLocation = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); -+ QString systemDataLocation = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation).last(); -+ QString writableDataLocation = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); - - QTest::addColumn("path"); - QTest::addColumn("result"); -diff --git a/autotests/test_kconf_update.cpp b/autotests/test_kconf_update.cpp -index 3353061..a80ae1e 100644 ---- a/autotests/test_kconf_update.cpp -+++ b/autotests/test_kconf_update.cpp -@@ -625,7 +625,7 @@ void TestKConfUpdate::testScript() - - QSharedPointer updFile(writeUpdFile(updContent)); - -- const QString scriptDir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/kconf_update"; -+ const QString scriptDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/kconf_update"; - QVERIFY(QDir().mkpath(scriptDir)); - QString scriptPath = scriptDir + "/test.sh"; - writeFile(scriptPath, updScript); diff --git a/docs/options.md b/docs/options.md -index fab22e1..8823818 100644 +index c634c00..5e59219 100644 --- a/docs/options.md +++ b/docs/options.md @@ -96,4 +96,4 @@ They are: * `$QT_CACHE_HOME` - QStandardPaths::GenericCacheLocation * `$QT_CONFIG_HOME` - QStandardPaths::GenericConfigLocation -* `$QT_DATA_HOME` - QStandardPaths::GenericDataLocation +* `$QT_DATA_HOME` - QStandardPaths::AppDataLocation diff --git a/src/core/kconfig.cpp b/src/core/kconfig.cpp -index c8eb90a..18d1b69 100644 +index e1b11ed..e3511cf 100644 --- a/src/core/kconfig.cpp +++ b/src/core/kconfig.cpp -@@ -229,7 +229,7 @@ QString KConfigPrivate::expandString(const QString &value) +@@ -237,7 +237,7 @@ QString KConfigPrivate::expandString(const QString &value) env = QString::fromLocal8Bit(pEnv.constData()); } else { if (aVarName == QStringLiteral("QT_DATA_HOME")) { - env = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation); + env = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); } else if (aVarName == QStringLiteral("QT_CONFIG_HOME")) { env = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation); } else if (aVarName == QStringLiteral("QT_CACHE_HOME")) { diff --git a/src/core/kdesktopfile.cpp b/src/core/kdesktopfile.cpp -index b0b6a87..daddd54 100644 +index d9283ce..f869fb0 100644 --- a/src/core/kdesktopfile.cpp +++ b/src/core/kdesktopfile.cpp -@@ -88,7 +88,7 @@ QString KDesktopFile::locateLocal(const QString &path) +@@ -89,8 +89,8 @@ QString KDesktopFile::locateLocal(const QString &path) } } // Relative to xdg data dir? (much more common) -- Q_FOREACH (const QString &dir, QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation)) { -+ Q_FOREACH (const QString &dir, QStandardPaths::standardLocations(QStandardPaths::AppDataLocation)) { +- const QStringList lstGenericDataLocation = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation); +- for (const QString &dir : lstGenericDataLocation) { ++ const QStringList lstAppDataLocation = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation); ++ for (const QString &dir : lstAppDataLocation) { if (path.startsWith(dir + plus)) { relativePath = path.mid(dir.length() + 1); } -@@ -97,7 +97,7 @@ QString KDesktopFile::locateLocal(const QString &path) +@@ -99,7 +99,7 @@ QString KDesktopFile::locateLocal(const QString &path) // What now? The desktop file doesn't come from XDG_DATA_DIRS. Use filename only and hope for the best. relativePath = path.mid(path.lastIndexOf(QLatin1Char('/')) + 1); } - return QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1Char('/') + relativePath; + return QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + QLatin1Char('/') + relativePath; } bool KDesktopFile::isDesktopFile(const QString &path) -@@ -134,7 +134,7 @@ bool KDesktopFile::isAuthorizedDesktopFile(const QString &path) +@@ -136,8 +136,8 @@ bool KDesktopFile::isAuthorizedDesktopFile(const QString &path) } } const QString servicesDir = QStringLiteral("kservices5/"); // KGlobal::dirs()->xdgDataRelativePath("services") -- Q_FOREACH (const QString &xdgDataPrefix, QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation)) { -+ Q_FOREACH (const QString &xdgDataPrefix, QStandardPaths::standardLocations(QStandardPaths::AppDataLocation)) { +- const QStringList lstGenericDataLocation = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation); +- for (const QString &xdgDataPrefix : lstGenericDataLocation) { ++ const QStringList lstAppDataLocation = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation); ++ for (const QString &xdgDataPrefix : lstAppDataLocation) { if (QDir(xdgDataPrefix).exists()) { const QString prefix = QFileInfo(xdgDataPrefix).canonicalFilePath(); if (realPath.startsWith(prefix + QLatin1Char('/') + servicesDir, sensitivity)) { diff --git a/src/kconf_update/kconf_update.cpp b/src/kconf_update/kconf_update.cpp -index ab7d946..eeaf6ca 100644 +index f6c7653..f9b83ac 100644 --- a/src/kconf_update/kconf_update.cpp +++ b/src/kconf_update/kconf_update.cpp -@@ -125,7 +125,7 @@ KonfUpdate::KonfUpdate(QCommandLineParser *parser) +@@ -145,7 +145,7 @@ KonfUpdate::KonfUpdate(QCommandLineParser *parser) m_bUseConfigInfo = false; if (parser->isSet(QStringLiteral("check"))) { m_bUseConfigInfo = true; - const QString file = QStandardPaths::locate(QStandardPaths::GenericDataLocation, "kconf_update/" + parser->value(QStringLiteral("check"))); + const QString file = QStandardPaths::locate(QStandardPaths::AppDataLocation, "kconf_update/" + parser->value(QStringLiteral("check"))); if (file.isEmpty()) { qWarning("File '%s' not found.", parser->value(QStringLiteral("check")).toLocal8Bit().data()); - log() << "File '" << parser->value(QStringLiteral("check")) << "' passed on command line not found" << endl; -@@ -177,7 +177,7 @@ KonfUpdate::log() - { - if (!m_textStream) { - #if 0 -- QString dir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1Char('/') + "kconf_update/log"; -+ QString dir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + QLatin1Char('/') + "kconf_update/log"; - QDir().mkpath(dir); - QString file = dir + "/update.log"; - m_file = new QFile(file); -@@ -206,7 +206,7 @@ QStringList KonfUpdate::findUpdateFiles(bool dirtyOnly) + qCDebug(KCONF_UPDATE_LOG) << "File" << parser->value(QStringLiteral("check")) << "passed on command line not found"; +@@ -190,7 +190,7 @@ QStringList KonfUpdate::findUpdateFiles(bool dirtyOnly) { QStringList result; - const QStringList dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("kconf_update"), QStandardPaths::LocateDirectory); + const QStringList dirs = QStandardPaths::locateAll(QStandardPaths::AppDataLocation, QStringLiteral("kconf_update"), QStandardPaths::LocateDirectory); - Q_FOREACH (const QString &d, dirs) { + for (const QString &d : dirs) { const QDir dir(d); -@@ -760,7 +760,7 @@ void KonfUpdate::gotScript(const QString &_script) +@@ -751,7 +751,7 @@ void KonfUpdate::gotScript(const QString &_script) return; } - QString path = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("kconf_update/") + script); + QString path = QStandardPaths::locate(QStandardPaths::AppDataLocation, QStringLiteral("kconf_update/") + script); if (path.isEmpty()) { if (interpreter.isEmpty()) { path = CMAKE_INSTALL_PREFIX "/" LIB_INSTALL_DIR "/kconf_update_bin/" + script; diff --git a/3rdparty/ext_frameworks/ki18n-appdatalocation.diff b/3rdparty/ext_frameworks/ki18n-appdatalocation.diff index 7b548ef1da..0f8aa68083 100644 --- a/3rdparty/ext_frameworks/ki18n-appdatalocation.diff +++ b/3rdparty/ext_frameworks/ki18n-appdatalocation.diff @@ -1,22 +1,48 @@ +diff --git a/docs/programmers-guide.md b/docs/programmers-guide.md +index 9505366..65fc9a5 100644 +--- a/docs/programmers-guide.md ++++ b/docs/programmers-guide.md +@@ -2246,7 +2246,7 @@ then a call to + + ~~~ + QString splashPath = QStandardPaths::locate( +- QStandardPaths::GenericDataLocation, "splash.png"); ++ QStandardPaths::AppDataLocation, "splash.png"); + splashPath = KLocalizedString::localizedFilePath(splashPath); + ~~~ + diff --git a/src/kcatalog.cpp b/src/kcatalog.cpp -index c18d40f..b0ed09d 100644 +index c47ffac..e24eb84 100644 --- a/src/kcatalog.cpp +++ b/src/kcatalog.cpp -@@ -128,7 +128,7 @@ QString KCatalog::catalogLocaleDir(const QByteArray &domain, - } +@@ -144,7 +144,7 @@ QString KCatalog::catalogLocaleDir(const QByteArray &domain, } + return file; + #else +- const QString file = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("locale/") + relpath); ++ const QString file = QStandardPaths::locate(QStandardPaths::AppDataLocation, QStringLiteral("locale/") + relpath); -- QString file = QStandardPaths::locate(QStandardPaths::GenericDataLocation, -+ QString file = QStandardPaths::locate(QStandardPaths::AppDataLocation, - QStringLiteral("locale/") + relpath); QString localeDir; - if (file.isEmpty()) { -@@ -143,7 +143,7 @@ QString KCatalog::catalogLocaleDir(const QByteArray &domain, + if (!file.isEmpty()) { +@@ -158,7 +158,7 @@ QString KCatalog::catalogLocaleDir(const QByteArray &domain, QSet KCatalog::availableCatalogLanguages(const QByteArray &domain_) { QString domain = QFile::decodeName(domain_); - QStringList localeDirPaths = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, + QStringList localeDirPaths = QStandardPaths::locateAll(QStandardPaths::AppDataLocation, QStringLiteral("locale"), QStandardPaths::LocateDirectory); +diff --git a/src/klocalizedstring.cpp b/src/klocalizedstring.cpp +index eb42c81..219bb51 100644 +--- a/src/klocalizedstring.cpp ++++ b/src/klocalizedstring.cpp +@@ -1363,7 +1363,7 @@ void KLocalizedStringPrivate::locateScriptingModule(const QByteArray &domain, + + // Try to find this module. + QString modapath = QStandardPaths::locate( +- QStandardPaths::GenericDataLocation, ++ QStandardPaths::AppDataLocation, + QLatin1String("locale") + QLatin1Char('/') + modrpath); + + // If the module exists and hasn't been already included. diff --git a/3rdparty/ext_frameworks/ki18n.diff b/3rdparty/ext_frameworks/ki18n.diff deleted file mode 100644 index fdf19a06a6..0000000000 --- a/3rdparty/ext_frameworks/ki18n.diff +++ /dev/null @@ -1,62 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 178117e..497395d 100755 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -54,11 +54,11 @@ if(MSVC) - endif() - - add_definitions(-DTRANSLATION_DOMAIN=\"ki18n5\") --if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/po") -- ki18n_install(po) --endif() -+#if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/po") -+# ki18n_install(po) -+#endif() - add_subdirectory(src) --add_subdirectory(autotests) -+#add_subdirectory(autotests) - - # create a Config.cmake and a ConfigVersion.cmake file and install them - set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5I18n") -diff --git a/cmake/KF5I18NMacros.cmake b/cmake/KF5I18NMacros.cmake -index 53ba812..db8ea98 100755 ---- a/cmake/KF5I18NMacros.cmake -+++ b/cmake/KF5I18NMacros.cmake -@@ -25,14 +25,9 @@ - # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - # SUCH DAMAGE. - --find_package(Gettext REQUIRED) --find_package(PythonInterp REQUIRED) -- --set(_ki18n_pmap_compile_script ${CMAKE_CURRENT_LIST_DIR}/ts-pmap-compile.py) --set(_ki18n_uic_script ${CMAKE_CURRENT_LIST_DIR}/kf5i18nuic.cmake) -- - #create the implementation files from the ui files and add them to the list of sources - #usage: KI18N_WRAP_UI(foo_SRCS ${ui_files}) -+set(_ki18n_uic_script ${CMAKE_CURRENT_LIST_DIR}/kf5i18nuic.cmake) - macro (KI18N_WRAP_UI _sources ) - foreach (_current_FILE ${ARGN}) - -@@ -57,6 +52,13 @@ macro (KI18N_WRAP_UI _sources ) - endforeach (_current_FILE) - endmacro (KI18N_WRAP_UI) - -+find_package(Gettext) -+find_package(PythonInterp) -+ -+if (Gettext_FOUND AND PythonInterp_FOUND) -+ -+set(_ki18n_pmap_compile_script ${CMAKE_CURRENT_LIST_DIR}/ts-pmap-compile.py) -+ - #install the scripts for a given language in the target folder - #usage: KI18N_INSTALL_TS_FILES("ja" ${scripts_dir}) - function(KI18N_INSTALL_TS_FILES lang scripts_dir) -@@ -225,3 +227,7 @@ function(_KI18N_GETTEXT_GET_UNIQUE_TARGET_NAME _name _unique_name) - set_property(GLOBAL PROPERTY ${propertyName} ${currentCounter} ) - endfunction() - # End of CMake copied code #################################################### -+ -+else() -+ message("Warning: Python and Gettext are needed for some functionality.") -+endif() # Python and gettext found diff --git a/3rdparty/ext_frameworks/kwindowsystem-x11.diff b/3rdparty/ext_frameworks/kwindowsystem-x11.diff index b3620e15d6..e7aa0a3399 100644 --- a/3rdparty/ext_frameworks/kwindowsystem-x11.diff +++ b/3rdparty/ext_frameworks/kwindowsystem-x11.diff @@ -1,53 +1,53 @@ diff --git a/src/kstartupinfo.cpp b/src/kstartupinfo.cpp -index a97b8b5..0ae7e5b 100644 +index 76ab3be..014ab36 100644 --- a/src/kstartupinfo.cpp +++ b/src/kstartupinfo.cpp -@@ -493,7 +493,7 @@ bool KStartupInfo::sendStartupX(Display *disp_P, const KStartupInfoId &id_P, +@@ -490,7 +490,7 @@ bool KStartupInfo::sendStartupX(Display *disp_P, const KStartupInfoId &id_P, #ifdef KSTARTUPINFO_ALL_DEBUG qCDebug(LOG_KWINDOWSYSTEM) << "sending " << msg; #endif - return KXMessages::broadcastMessageX(disp_P, NET_STARTUP_MSG, msg); + return true; // KXMessages::broadcastMessageX(disp_P, NET_STARTUP_MSG, msg); #else Q_UNUSED(disp_P) Q_UNUSED(data_P) -@@ -548,7 +548,7 @@ bool KStartupInfo::sendChangeX(Display *disp_P, const KStartupInfoId &id_P, +@@ -565,7 +565,7 @@ bool KStartupInfo::sendChangeX(Display *disp_P, const KStartupInfoId &id_P, #ifdef KSTARTUPINFO_ALL_DEBUG qCDebug(LOG_KWINDOWSYSTEM) << "sending " << msg; #endif - return KXMessages::broadcastMessageX(disp_P, NET_STARTUP_MSG, msg); + return true; //KXMessages::broadcastMessageX(disp_P, NET_STARTUP_MSG, msg); #else Q_UNUSED(disp_P) Q_UNUSED(data_P) -@@ -580,7 +580,7 @@ bool KStartupInfo::sendFinishX(Display *disp_P, const KStartupInfoId &id_P) +@@ -617,7 +617,7 @@ bool KStartupInfo::sendFinishX(Display *disp_P, const KStartupInfoId &id_P) #ifdef KSTARTUPINFO_ALL_DEBUG qCDebug(LOG_KWINDOWSYSTEM) << "sending " << msg; #endif - return KXMessages::broadcastMessageX(disp_P, NET_STARTUP_MSG, msg); + return true; //KXMessages::broadcastMessageX(disp_P, NET_STARTUP_MSG, msg); #else Q_UNUSED(disp_P) return true; -@@ -615,7 +615,7 @@ bool KStartupInfo::sendFinishX(Display *disp_P, const KStartupInfoId &id_P, +@@ -668,7 +668,7 @@ bool KStartupInfo::sendFinishX(Display *disp_P, const KStartupInfoId &id_P, #ifdef KSTARTUPINFO_ALL_DEBUG qCDebug(LOG_KWINDOWSYSTEM) << "sending " << msg; #endif - return KXMessages::broadcastMessageX(disp_P, NET_STARTUP_MSG, msg); + return true; //KXMessages::broadcastMessageX(disp_P, NET_STARTUP_MSG, msg); #else Q_UNUSED(disp_P) Q_UNUSED(id_P) diff --git a/src/platforms/xcb/kwindowsystem.cpp b/src/platforms/xcb/kwindowsystem.cpp -index 9d28704..603d9b2 100644 +index 6789b7c..84b6d4c 100644 --- a/src/platforms/xcb/kwindowsystem.cpp +++ b/src/platforms/xcb/kwindowsystem.cpp -@@ -196,7 +196,7 @@ bool NETEventFilter::nativeEventFilter(xcb_generic_event_t *ev) +@@ -234,7 +234,7 @@ bool NETEventFilter::nativeEventFilter(xcb_generic_event_t *ev) int old_number_of_desktops = numberOfDesktops(); bool old_showing_desktop = showingDesktop(); unsigned long m[ 5 ]; - NETRootInfo::event(ev, m, 5); + //NETRootInfo::event(ev, m, 5); if ((m[ PROTOCOLS ] & CurrentDesktop) && currentDesktop() != old_current_desktop) { emit s_q->currentDesktopChanged(currentDesktop()); diff --git a/3rdparty/ext_qt/CMakeLists.txt b/3rdparty/ext_qt/CMakeLists.txt index 717ba9a4a2..92226ef67f 100644 --- a/3rdparty/ext_qt/CMakeLists.txt +++ b/3rdparty/ext_qt/CMakeLists.txt @@ -1,273 +1,273 @@ SET(EXTPREFIX_qt "${EXTPREFIX}") if (WIN32) list(APPEND _QT_conf -skip qt3d -skip qtactiveqt -skip qtcanvas3d -skip qtconnectivity -skip qtdoc -skip qtgraphicaleffects -skip qtlocation -skip qtsensors -skip qtserialport -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwebsockets -skip qtwebview - -skip qtxmlpatterns -no-sql-sqlite -nomake examples -nomake tools + -skip qtxmlpatterns -no-sql-sqlite -nomake examples -no-compile-examples -no-dbus -no-iconv -no-qml-debug -no-libproxy -no-system-proxies -no-icu -no-mtdev -skip qtcharts -skip qtdatavis3d -skip qtgamepad -skip qtnetworkauth -skip qtpurchasing -skip qtremoteobjects -skip qtscxml -skip qtserialbus -skip qtspeech -skip qtvirtualkeyboard # -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -openssl-linked -I ${EXTPREFIX_qt}/include -L ${EXTPREFIX_qt}/lib # -opensource -confirm-license # -release -platform win32-g++ -prefix ${EXTPREFIX_qt} QMAKE_LFLAGS_APP+=${SECURITY_EXE_LINKER_FLAGS} QMAKE_LFLAGS_SHLIB+=${SECURITY_SHARED_LINKER_FLAGS} QMAKE_LFLAGS_SONAME+=${SECURITY_SHARED_LINKER_FLAGS} ) if (QT_ENABLE_DEBUG_INFO) # Set the option to build Qt with debugging info enabled list(APPEND _QT_conf -force-debug-info) endif(QT_ENABLE_DEBUG_INFO) if (QT_ENABLE_DYNAMIC_OPENGL) list(APPEND _QT_conf -opengl dynamic -angle) else (QT_ENABLE_DYNAMIC_OPENGL) list(APPEND _QT_conf -opengl desktop -no-angle) endif (QT_ENABLE_DYNAMIC_OPENGL) # MIME-type optimization patches set(ext_qt_PATCH_COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0001-Use-fast-path-for-unsupported-mime-types.patch COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0002-Hack-always-return-we-support-DIBV5.patch ) # Tablet support patches if (NOT USE_QT_TABLET_WINDOWS) set(ext_qt_PATCH_COMMAND ${ext_qt_PATCH_COMMAND} COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0001-disable-wintab.patch COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/disable-winink.patch ) else() set(ext_qt_PATCH_COMMAND ${ext_qt_PATCH_COMMAND} COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0020-Synthesize-Enter-LeaveEvent-for-accepted-QTabletEven.patch COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0023-Implement-a-switch-for-tablet-API-on-Windows.patch COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0024-Fetch-stylus-button-remapping-from-WinTab-driver.patch COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0025-Disable-tablet-relative-mode-in-Qt.patch COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0026-Fetch-mapped-screen-size-from-the-Wintab-driver.patch COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0027-Switch-stylus-pointer-type-when-the-tablet-is-in-the.patch COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0028-Fix-updating-tablet-pressure-resolution-on-every-pro.patch COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0050-Fix-using-tablet-on-QML-widgets.patch COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0051-Add-workaround-for-handling-table-press-correctly-in.patch ) endif() # HDR patches set(ext_qt_PATCH_COMMAND ${ext_qt_PATCH_COMMAND} COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0003-Implement-openGL-surface-color-space-selection-in-An.patch COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0004-Implement-color-space-selection-for-QSurfaceFormat.patch COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0005-Implement-color-conversion-for-the-backing-store-tex.patch COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0006-Return-QScreen-s-HMONITOR-handle-via-QPlatformNative.patch COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0007-Implement-a-manual-test-for-checking-is-HDR-features.patch COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0008-Fix-notification-of-QDockWidget-when-it-gets-undocke.patch ) # Other patches set(ext_qt_PATCH_COMMAND ${ext_qt_PATCH_COMMAND} COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0060-Windows-Add-a-default-setting-for-hasBorderInFullScr.patch COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0061-Hack-to-hide-1px-border-with-OpenGL-fullscreen-hack.patch COMMAND ${PATCH_COMMAND} -p1 -d qttools -i ${CMAKE_CURRENT_SOURCE_DIR}/windeployqt-force-allow-debug-info.patch # COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0031-Compute-logical-DPI-on-a-per-screen-basis.patch # COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0032-Update-Dpi-and-scale-factor-computation.patch # COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0033-Move-QT_FONT_DPI-to-cross-platform-code.patch # COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0034-Update-QT_SCREEN_SCALE_FACTORS.patch # COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0035-Deprecate-QT_AUTO_SCREEN_SCALE_FACTOR.patch # COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0036-Add-high-DPI-scale-factor-rounding-policy-C-API.patch ) ExternalProject_Add( ext_qt DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} URL https://download.qt.io/official_releases/qt/5.12/5.12.4/single/qt-everywhere-src-5.12.4.tar.xz URL_MD5 dda95b0239d13c5276834177af3a8588 PATCH_COMMAND ${ext_qt_PATCH_COMMAND} INSTALL_DIR ${EXTPREFIX_qt} CONFIGURE_COMMAND /configure.bat ${_QT_conf} BUILD_COMMAND mingw32-make -j${SUBMAKE_JOBS} INSTALL_COMMAND mingw32-make -j${SUBMAKE_JOBS} install UPDATE_COMMAND "" # Use a short name to reduce the chance of exceeding path length limit SOURCE_DIR s BINARY_DIR b DEPENDS ext_patch ext_openssl ) elseif (NOT APPLE) ExternalProject_Add( ext_qt DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} URL https://download.qt.io/official_releases/qt/5.12/5.12.4/single/qt-everywhere-src-5.12.4.tar.xz URL_MD5 dda95b0239d13c5276834177af3a8588 PATCH_COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0012-Synthesize-Enter-LeaveEvent-for-accepted-QTabletEven.patch COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0013-Poison-Qt-s-headers-with-a-mark-about-presence-of-En.patch CMAKE_ARGS -DOPENSSL_LIBS='-L${EXTPREFIX_qt}/lib -lssl -lcrypto' CONFIGURE_COMMAND /configure -prefix ${EXTPREFIX_qt} -opensource -confirm-license -openssl-linked -verbose -nomake examples -skip qt3d -skip qtactiveqt -skip qtcanvas3d -skip qtconnectivity -skip qtgraphicaleffects -skip qtlocation -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwebsockets -skip qtwebview -skip qtandroidextras -skip qtserialport -skip qtdatavis3d -skip qtvirtualkeyboard -skip qtspeech -skip qtsensors -skip qtgamepad -skip qtscxml -skip qtremoteobjects -skip qtxmlpatterns -skip qtnetworkauth -skip qtcharts -skip qtdatavis3d -skip qtgamepad -skip qtpurchasing -skip qtscxml -skip qtserialbus -skip qtspeech -skip qtvirtualkeyboard -skip qtmultimedia INSTALL_DIR ${EXTPREFIX_qt} BUILD_COMMAND $(MAKE) INSTALL_COMMAND $(MAKE) install UPDATE_COMMAND "" BUILD_IN_SOURCE 1 ) else( APPLE ) # XCODE_VERSION is set by CMake when using the Xcode generator, otherwise we need # to detect it manually here. if (NOT XCODE_VERSION) execute_process( COMMAND xcodebuild -version OUTPUT_VARIABLE xcodebuild_version OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_FILE /dev/null ) string(REGEX MATCH "Xcode ([0-9]+([.][0-9]+)*)" version_match ${xcodebuild_version}) if (version_match) message(STATUS "${EXTPREFIX_qt}:Identified Xcode Version: ${CMAKE_MATCH_1}") set(XCODE_VERSION ${CMAKE_MATCH_1}) else() # If detecting Xcode version failed, set a crazy high version so we default # to the newest. set(XCODE_VERSION 99) message(WARNING "${EXTPREFIX_qt}:Failed to detect the version of an installed copy of Xcode, falling back to highest supported version. Set XCODE_VERSION to override.") endif(version_match) endif(NOT XCODE_VERSION) # ------------------------------------------------------------------------------- # Verify the Xcode installation on Mac OS like Qt5.7 does/will # If not stop now, the system isn't configured correctly for Qt. # No reason to even proceed. # ------------------------------------------------------------------------------- set(XCSELECT_OUTPUT) find_program(XCSELECT_PROGRAM "xcode-select") if(XCSELECT_PROGRAM) message(STATUS "${EXTPREFIX_qt}:Found XCSELECT_PROGRAM as ${XCSELECT_PROGRAM}") set(XCSELECT_COMMAND ${XCSELECT_PROGRAM} "--print-path") execute_process( COMMAND ${XCSELECT_COMMAND} RESULT_VARIABLE XCSELECT_COMMAND_RESULT OUTPUT_VARIABLE XCSELECT_COMMAND_OUTPUT ERROR_FILE /dev/null ) if(NOT XCSELECT_COMMAND_RESULT) # returned 0, we're ok. string(REGEX REPLACE "[ \t]*[\r\n]+[ \t]*" ";" XCSELECT_COMMAND_OUTPUT ${XCSELECT_COMMAND_OUTPUT}) else() string(REPLACE ";" " " XCSELECT_COMMAND_STR "${XCSELECT_COMMAND}") # message(STATUS "${XCSELECT_COMMAND_STR}") message(FATAL_ERROR "${EXTPREFIX_qt}:${XCSELECT_PROGRAM} test failed with status ${XCSELECT_COMMAND_RESULT}") endif() else() message(FATAL_ERROR "${EXTPREFIX_qt}:${XCSELECT_PROGRAM} not found. No Xcode is selected. Use xcode-select -switch to choose an Xcode version") endif() # Belts and suspenders # Beyond all the Xcode and Qt version checking, the proof of the pudding # lies in the success/failure of this command: xcrun --find xcrun. # On failure a patch is necessary, otherwise we're ok # So hard check xcrun now... set(XCRUN_OUTPUT) find_program(XCRUN_PROGRAM "xcrun") if(XCRUN_PROGRAM) message(STATUS "${EXTPREFIX_qt}:Found XCRUN_PROGRAM as ${XCRUN_PROGRAM}") set(XCRUN_COMMAND ${XCRUN_PROGRAM} "--find xcrun") execute_process( COMMAND ${XCRUN_COMMAND} RESULT_VARIABLE XCRUN_COMMAND_RESULT OUTPUT_VARIABLE XCRUN_COMMAND_OUTPUT ERROR_FILE /dev/null ) if(NOT XCRUN_COMMAND_RESULT) # returned 0, we're ok. string(REGEX REPLACE "[ \t]*[\r\n]+[ \t]*" ";" XCRUN_COMMAND_OUTPUT ${XCRUN_COMMAND_OUTPUT}) else() string(REPLACE ";" " " XCRUN_COMMAND_STR "${XCRUN_COMMAND}") # message(STATUS "${XCRUN_COMMAND_STR}") message(STATUS "${EXTPREFIX_qt}:xcrun test failed with status ${XCRUN_COMMAND_RESULT}") endif() else() message(STATUS "${EXTPREFIX_qt}:xcrun not found -- ${XCRUN_PROGRAM}") endif() # # Now configure ext_qt accordingly # if ((XCRUN_COMMAND_RESULT) AND (NOT (XCODE_VERSION VERSION_LESS 8.0.0))) # Fix Xcode xcrun related issue. # NOTE: This should be fixed by Qt 5.7.1 see here: http://code.qt.io/cgit/qt/qtbase.git/commit/?h=dev&id=77a71c32c9d19b87f79b208929e71282e8d8b5d9 # NOTE: but no one's holding their breath. set(ext_qt_PATCH_COMMAND ${PATCH_COMMAND}} -p1 -b -d /qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/mac_standardpaths_qtbug-61159.diff COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0012-Synthesize-Enter-LeaveEvent-for-accepted-QTabletEven.patch COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0013-Poison-Qt-s-headers-with-a-mark-about-presence-of-En.patch #COMMAND ${PATCH_COMMAND} -p1 -b -d /qtbase/mkspecs/features/mac -i ${CMAKE_CURRENT_SOURCE_DIR}/mac-default.patch ) message(STATUS "${EXTPREFIX_qt}:Additional patches injected.") else() # No extra patches will be applied # NOTE: defaults for some untested scenarios like xcrun fails and xcode_version < 8. # NOTE: that is uncharted territory and (hopefully) a very unlikely scenario... set(ext_qt_PATCH_COMMAND ${PATCH_COMMAND} -p1 -d qtbase -i ${CMAKE_CURRENT_SOURCE_DIR}/0012-Synthesize-Enter-LeaveEvent-for-accepted-QTabletEven.patch ) endif() # Qt is big - try and parallelize if at all possible include(ProcessorCount) ProcessorCount(NUM_CORES) if(NOT NUM_CORES EQUAL 0) if (NUM_CORES GREATER 2) # be nice... MATH( EXPR NUM_CORES "${NUM_CORES} - 2" ) endif() set(PARALLEL_MAKE "make;-j${NUM_CORES}") message(STATUS "${EXTPREFIX_qt}:Parallelized make: ${PARALLEL_MAKE}") else() set(PARALLEL_MAKE "make") endif() ExternalProject_Add( ext_qt DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} LOG_DOWNLOAD ON LOG_UPDATE ON LOG_CONFIGURE ON LOG_BUILD ON LOG_TEST ON LOG_INSTALL ON BUILD_IN_SOURCE ON URL https://download.qt.io/archive/qt/5.12/5.12.3/single/qt-everywhere-src-5.12.3.tar.xz URL_MD5 38017e0ed88b9baba063bd723d9ca8b2 CMAKE_ARGS -DOPENSSL_LIBS='-L${EXTPREFIX_qt}/lib -lssl -lcrypto' INSTALL_DIR ${EXTPREFIX_qt} CONFIGURE_COMMAND /configure -skip qt3d -skip qtactiveqt -skip qtcanvas3d -skip qtconnectivity -skip qtdoc -skip qtgraphicaleffects -skip qtlocation -skip qtsensors -skip qtserialport -skip qtwayland -skip qtwebchannel -skip qtwebsockets -skip qtwebview -skip qtwebengine -skip qtxmlpatterns -no-sql-sqlite -skip qtcharts -skip qtdatavis3d -skip qtgamepad -skip qtnetworkauth - -skip qtpurchasing -skip qtremoteobjects -skip qtscxml -skip qtserialbus -skip qtspeech -skip qtvirtualkeyboard -nomake examples -nomake tools -no-compile-examples + -skip qtpurchasing -skip qtremoteobjects -skip qtscxml -skip qtserialbus -skip qtspeech -skip qtvirtualkeyboard -nomake examples -no-compile-examples -no-dbus -no-iconv -no-qml-debug -no-libproxy -no-system-proxies -no-icu -no-mtdev -system-zlib -qt-pcre -opensource -confirm-license -openssl-linked -prefix ${EXTPREFIX_qt} BUILD_COMMAND ${PARALLEL_MAKE} INSTALL_COMMAND make install UPDATE_COMMAND "" BUILD_IN_SOURCE 1 ) endif()