From bae50ce8cf278a37034499ce552fc4d7b28ec9ff Mon Sep 17 00:00:00 2001 From: termux-pacman-bot Date: Mon, 24 Nov 2025 09:41:28 +0000 Subject: [PATCH] new package: qt6-qtwebengine --- ...ride-more-cmake-flags-for-host-build.patch | 27 +++++ .../0002-use-dummy-sysroot.patch | 11 ++ .../0003-chromium-use-android-target.patch | 24 +++++ .../0004-pa-use-syscall-memfd_create.patch | 28 +++++ .../0005-chromium-no-futimes.patch | 11 ++ ...romium-no-priority-inheritance-locks.patch | 11 ++ .../0007-chromium-impl-dns.patch | 92 ++++++++++++++++ ...08-crashpad-use-syscall-memfd_create.patch | 21 ++++ .../0009-crashpad-no-getdtablesize.patch | 11 ++ .../0010-chromium-disable-shm.patch | 11 ++ .../0011-chromium-no-set-process-title.patch | 11 ++ .../0012-egl-fix-include.patch | 23 ++++ .../0013-disable-sandbox.patch | 21 ++++ .../0014-v8-trap-handler.patch | 26 +++++ .../0015-v8-memfd_create.patch | 14 +++ .../0016-dav1d-no-get-affinity.patch | 11 ++ .../0017-crashpad-no-spawn.patch | 28 +++++ .../0018-cpuinfo-android-arm.patch | 13 +++ .../0019-mix-no-execinfo.patch | 50 +++++++++ .../0020-chromium-impl-scoped-file.patch | 40 +++++++ .../0021-chromium-no-landlock.patch | 11 ++ x11-packages/qt6-qtwebengine/build.sh | 101 ++++++++++++++++++ 22 files changed, 596 insertions(+) create mode 100644 x11-packages/qt6-qtwebengine/0001-override-more-cmake-flags-for-host-build.patch create mode 100644 x11-packages/qt6-qtwebengine/0002-use-dummy-sysroot.patch create mode 100644 x11-packages/qt6-qtwebengine/0003-chromium-use-android-target.patch create mode 100644 x11-packages/qt6-qtwebengine/0004-pa-use-syscall-memfd_create.patch create mode 100644 x11-packages/qt6-qtwebengine/0005-chromium-no-futimes.patch create mode 100644 x11-packages/qt6-qtwebengine/0006-chromium-no-priority-inheritance-locks.patch create mode 100644 x11-packages/qt6-qtwebengine/0007-chromium-impl-dns.patch create mode 100644 x11-packages/qt6-qtwebengine/0008-crashpad-use-syscall-memfd_create.patch create mode 100644 x11-packages/qt6-qtwebengine/0009-crashpad-no-getdtablesize.patch create mode 100644 x11-packages/qt6-qtwebengine/0010-chromium-disable-shm.patch create mode 100644 x11-packages/qt6-qtwebengine/0011-chromium-no-set-process-title.patch create mode 100644 x11-packages/qt6-qtwebengine/0012-egl-fix-include.patch create mode 100644 x11-packages/qt6-qtwebengine/0013-disable-sandbox.patch create mode 100644 x11-packages/qt6-qtwebengine/0014-v8-trap-handler.patch create mode 100644 x11-packages/qt6-qtwebengine/0015-v8-memfd_create.patch create mode 100644 x11-packages/qt6-qtwebengine/0016-dav1d-no-get-affinity.patch create mode 100644 x11-packages/qt6-qtwebengine/0017-crashpad-no-spawn.patch create mode 100644 x11-packages/qt6-qtwebengine/0018-cpuinfo-android-arm.patch create mode 100644 x11-packages/qt6-qtwebengine/0019-mix-no-execinfo.patch create mode 100644 x11-packages/qt6-qtwebengine/0020-chromium-impl-scoped-file.patch create mode 100644 x11-packages/qt6-qtwebengine/0021-chromium-no-landlock.patch create mode 100644 x11-packages/qt6-qtwebengine/build.sh diff --git a/x11-packages/qt6-qtwebengine/0001-override-more-cmake-flags-for-host-build.patch b/x11-packages/qt6-qtwebengine/0001-override-more-cmake-flags-for-host-build.patch new file mode 100644 index 0000000000..4c7e706d12 --- /dev/null +++ b/x11-packages/qt6-qtwebengine/0001-override-more-cmake-flags-for-host-build.patch @@ -0,0 +1,27 @@ +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -133,6 +133,10 @@ + -DGN_TARGET_CPU=${TEST_architecture_arch} + -DCMAKE_C_FLAGS= + -DCMAKE_CXX_FLAGS= ++ -DCMAKE_EXE_LINKER_FLAGS= ++ -DCMAKE_MODULE_LINKER_FLAGS= ++ -DCMAKE_SHARED_LINKER_FLAGS= ++ -DDUMMY_SYSROOT= + -DQT_FEATURE_qtwebengine_build=${QT_FEATURE_qtwebengine_build} + -DQT_FEATURE_qtpdf_build=${QT_FEATURE_qtpdf_build} + -DGCC_LEGACY_SUPPORT=${QT_FEATURE_webengine_gcc_legacy_support} +--- a/src/host/CMakeLists.txt ++++ b/src/host/CMakeLists.txt +@@ -62,6 +62,11 @@ + "${CMAKE_CURRENT_BINARY_DIR}/config.tests/hostcompiler" + "${CMAKE_CURRENT_SOURCE_DIR}/config.tests/hostcompiler" + hostcompiler ++ CMAKE_FLAGS -DCMAKE_C_FLAGS= ++ -DCMAKE_CXX_FLAGS= ++ -DCMAKE_EXE_LINKER_FLAGS= ++ -DCMAKE_MODULE_LINKER_FLAGS= ++ -DCMAKE_SHARED_LINKER_FLAGS= + ) + if(NOT has32HostCompiler) + MESSAGE(FATAL_ERROR "Compiler does not support 32bit compilation") diff --git a/x11-packages/qt6-qtwebengine/0002-use-dummy-sysroot.patch b/x11-packages/qt6-qtwebengine/0002-use-dummy-sysroot.patch new file mode 100644 index 0000000000..6b093f77a9 --- /dev/null +++ b/x11-packages/qt6-qtwebengine/0002-use-dummy-sysroot.patch @@ -0,0 +1,11 @@ +--- a/cmake/QtToolchainHelpers.cmake ++++ b/cmake/QtToolchainHelpers.cmake +@@ -584,6 +584,8 @@ + endif() + if(CMAKE_SYSROOT) + list(APPEND gnArgArg target_sysroot="${CMAKE_SYSROOT}") ++ elseif(DUMMY_SYSROOT) ++ list(APPEND gnArgArg target_sysroot="${DUMMY_SYSROOT}") + endif() + elseif(MACOS) + get_gn_arch(cpu ${arch}) diff --git a/x11-packages/qt6-qtwebengine/0003-chromium-use-android-target.patch b/x11-packages/qt6-qtwebengine/0003-chromium-use-android-target.patch new file mode 100644 index 0000000000..4eefd0538c --- /dev/null +++ b/x11-packages/qt6-qtwebengine/0003-chromium-use-android-target.patch @@ -0,0 +1,24 @@ +--- a/src/3rdparty/chromium/build/config/compiler/BUILD.gn ++++ b/src/3rdparty/chromium/build/config/compiler/BUILD.gn +@@ -1306,8 +1306,8 @@ + } + } else if (current_cpu == "arm") { + if (is_clang && !is_android && !is_nacl && !is_chromeos_device) { +- cflags += [ "--target=arm-linux-gnueabihf" ] +- ldflags += [ "--target=arm-linux-gnueabihf" ] ++ cflags += [ "--target=armv7a-linux-androideabi24" ] ++ ldflags += [ "--target=armv7a-linux-androideabi24" ] + } + if (!is_nacl) { + cflags += ["-mfloat-abi=$arm_float_abi"] +@@ -1324,8 +1324,8 @@ + } else if (current_cpu == "arm64") { + if (is_clang && !is_android && !is_nacl && !is_fuchsia && + !is_chromeos_device) { +- cflags += [ "--target=aarch64-linux-gnu" ] +- ldflags += [ "--target=aarch64-linux-gnu" ] ++ cflags += [ "--target=aarch64-linux-android24" ] ++ ldflags += [ "--target=aarch64-linux-android24" ] + } + } else if (current_cpu == "mipsel" && !is_nacl) { + ldflags += [ "-Wl,--hash-style=sysv" ] diff --git a/x11-packages/qt6-qtwebengine/0004-pa-use-syscall-memfd_create.patch b/x11-packages/qt6-qtwebengine/0004-pa-use-syscall-memfd_create.patch new file mode 100644 index 0000000000..9351ff6735 --- /dev/null +++ b/x11-packages/qt6-qtwebengine/0004-pa-use-syscall-memfd_create.patch @@ -0,0 +1,28 @@ +--- a/src/3rdparty/chromium/base/allocator/partition_allocator/src/partition_alloc/partition_root.cc ++++ b/src/3rdparty/chromium/base/allocator/partition_allocator/src/partition_alloc/partition_root.cc +@@ -51,6 +51,11 @@ + #endif // PA_CONFIG(ENABLE_SHADOW_METADATA) + #endif // PA_BUILDFLAG(IS_LINUX) || PA_BUILDFLAG(IS_CHROMEOS) + ++#if defined(__ANDROID__) && __ANDROID_API__ < 30 ++#include ++#define memfd_create(name,flags) syscall(SYS_memfd_create,name,flags) ++#endif ++ + namespace partition_alloc::internal { + + #if PA_BUILDFLAG(RECORD_ALLOC_INFO) +--- a/src/3rdparty/chromium/base/allocator/partition_allocator/src/partition_alloc/partition_address_space.cc ++++ b/src/3rdparty/chromium/base/allocator/partition_allocator/src/partition_alloc/partition_address_space.cc +@@ -37,6 +37,11 @@ + #include + #endif + ++#if defined(__ANDROID__) && __ANDROID_API__ < 30 ++#include ++#define memfd_create(name,flags) syscall(SYS_memfd_create,name,flags) ++#endif ++ + namespace partition_alloc::internal { + + #if PA_BUILDFLAG(HAS_64_BIT_POINTERS) diff --git a/x11-packages/qt6-qtwebengine/0005-chromium-no-futimes.patch b/x11-packages/qt6-qtwebengine/0005-chromium-no-futimes.patch new file mode 100644 index 0000000000..fbd5912a75 --- /dev/null +++ b/x11-packages/qt6-qtwebengine/0005-chromium-no-futimes.patch @@ -0,0 +1,11 @@ +--- a/src/3rdparty/chromium/base/files/file_posix.cc ++++ b/src/3rdparty/chromium/base/files/file_posix.cc +@@ -91,7 +91,7 @@ + } + + int CallFutimes(PlatformFile file, const struct timeval times[2]) { +-#ifdef __USE_XOPEN2K8 ++#if defined(__USE_XOPEN2K8) || (defined(__ANDROID__) && __ANDROID_API__ < 26) + // futimens should be available, but futimes might not be + // http://pubs.opengroup.org/onlinepubs/9699919799/ + diff --git a/x11-packages/qt6-qtwebengine/0006-chromium-no-priority-inheritance-locks.patch b/x11-packages/qt6-qtwebengine/0006-chromium-no-priority-inheritance-locks.patch new file mode 100644 index 0000000000..420ad73cf5 --- /dev/null +++ b/x11-packages/qt6-qtwebengine/0006-chromium-no-priority-inheritance-locks.patch @@ -0,0 +1,11 @@ +--- a/src/3rdparty/chromium/base/synchronization/lock_impl_posix.cc ++++ b/src/3rdparty/chromium/base/synchronization/lock_impl_posix.cc +@@ -58,7 +58,7 @@ + // Lock::PriorityInheritanceAvailable still must be checked as the code may + // compile but the underlying platform still may not correctly support priority + // inheritance locks. +-#if BUILDFLAG(IS_NACL) || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_FUCHSIA) ++#if BUILDFLAG(IS_NACL) || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_FUCHSIA) || defined(__TERMUX__) + #define PRIORITY_INHERITANCE_LOCKS_POSSIBLE() 0 + #else + #define PRIORITY_INHERITANCE_LOCKS_POSSIBLE() 1 diff --git a/x11-packages/qt6-qtwebengine/0007-chromium-impl-dns.patch b/x11-packages/qt6-qtwebengine/0007-chromium-impl-dns.patch new file mode 100644 index 0000000000..0ea2857f7c --- /dev/null +++ b/x11-packages/qt6-qtwebengine/0007-chromium-impl-dns.patch @@ -0,0 +1,92 @@ +--- a/src/3rdparty/chromium/net/dns/dns_config_service_linux.cc ++++ b/src/3rdparty/chromium/net/dns/dns_config_service_linux.cc +@@ -7,6 +7,10 @@ + #pragma allow_unsafe_buffers + #endif + ++#include ++ ++#ifndef __TERMUX__ ++ + #include "net/dns/dns_config_service_linux.h" + + #include +@@ -528,3 +532,8 @@ + } + + } // namespace net ++ ++#else // __TERMUX__ ++// XXX: Actually, Termux has no DNS config, fallback to use the stub of fushsia. ++#include "./dns_config_service_fuchsia.cc" ++#endif // __TERMUX__ +--- a/src/3rdparty/chromium/net/dns/dns_reloader.cc ++++ b/src/3rdparty/chromium/net/dns/dns_reloader.cc +@@ -31,7 +31,7 @@ + // an old musl bug that was fixed by musl c8fdcfe5, but Fuchsia's SDK doesn't + // have that change. + #if defined(__RES) && __RES >= 19991006 && !BUILDFLAG(IS_APPLE) && \ +- !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_FUCHSIA) ++ !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_FUCHSIA) && !defined(__TERMUX__) + // We define this so we don't need to restate the complex condition here twice + // below - it would be easy for the copies below to get out of sync. + #define USE_RES_NINIT +--- a/src/3rdparty/chromium/net/dns/public/resolv_reader.cc ++++ b/src/3rdparty/chromium/net/dns/public/resolv_reader.cc +@@ -37,6 +37,8 @@ + const struct __res_state& res) { + std::vector nameservers; + ++#ifndef __TERMUX__ ++ + if (!(res.options & RES_INIT)) + return std::nullopt; + +@@ -93,6 +95,12 @@ + } + #endif + ++#else // __TERMUX__ ++ // From Android 8, getprop of net.dns%d has been invalid. So just ++ // assume the nameserver is 8.8.8.8. ++ nameservers.push_back(IPEndPoint(IPAddress(8, 8, 8, 8), 53)); ++#endif // __TERMUX__ ++ + return nameservers; + } + +--- a/src/3rdparty/chromium/net/dns/public/scoped_res_state.cc ++++ b/src/3rdparty/chromium/net/dns/public/scoped_res_state.cc +@@ -15,6 +15,15 @@ + #include "base/check.h" + #include "build/build_config.h" + ++#ifdef __TERMUX__ ++static int res_ninit(struct __res_state*) { ++ return 0; ++} ++static void res_nclose(struct __res_state*) { ++ return; ++} ++#endif ++ + namespace net { + + ScopedResState::ScopedResState() { +--- a/src/3rdparty/chromium/net/dns/public/scoped_res_state.h ++++ b/src/3rdparty/chromium/net/dns/public/scoped_res_state.h +@@ -12,6 +12,14 @@ + #include "build/build_config.h" + #include "net/base/net_export.h" + ++#ifdef __TERMUX__ ++// On Android NDK without JNI, there is no valid way to get nameservers. ++// So just provide a dummy struct and functions. ++struct __res_state { ++ int _dummy_state; ++}; ++#endif ++ + namespace net { + + // Helper class to open, read and close a __res_state. diff --git a/x11-packages/qt6-qtwebengine/0008-crashpad-use-syscall-memfd_create.patch b/x11-packages/qt6-qtwebengine/0008-crashpad-use-syscall-memfd_create.patch new file mode 100644 index 0000000000..be5a7cfa97 --- /dev/null +++ b/x11-packages/qt6-qtwebengine/0008-crashpad-use-syscall-memfd_create.patch @@ -0,0 +1,21 @@ +--- a/src/3rdparty/chromium/third_party/crashpad/crashpad/util/file/file_io_posix.cc ++++ b/src/3rdparty/chromium/third_party/crashpad/crashpad/util/file/file_io_posix.cc +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + #include + + #include +@@ -33,6 +34,10 @@ + #include "build/build_config.h" + #include "util/misc/random_string.h" + ++#if defined(__ANDROID__) && __ANDROID_API__ < 30 ++#define memfd_create(name,flags) syscall(SYS_memfd_create,name,flags) ++#endif ++ + namespace crashpad { + + namespace { diff --git a/x11-packages/qt6-qtwebengine/0009-crashpad-no-getdtablesize.patch b/x11-packages/qt6-qtwebengine/0009-crashpad-no-getdtablesize.patch new file mode 100644 index 0000000000..1d381ac5b1 --- /dev/null +++ b/x11-packages/qt6-qtwebengine/0009-crashpad-no-getdtablesize.patch @@ -0,0 +1,11 @@ +--- a/src/3rdparty/chromium/third_party/crashpad/crashpad/util/posix/close_multiple.cc ++++ b/src/3rdparty/chromium/third_party/crashpad/crashpad/util/posix/close_multiple.cc +@@ -135,7 +135,7 @@ + // bionic/libc/bionic/ndk_cruft.cpp getdtablesize(). + int max_fd = implicit_cast(sysconf(_SC_OPEN_MAX)); + +-#if !BUILDFLAG(IS_ANDROID) ++#if !BUILDFLAG(IS_ANDROID) && !defined(__TERMUX__) + // getdtablesize() was removed effective Android 5.0.0 (API 21). Since it + // returns the same thing as the sysconf() above, just skip it. See + // https://android.googlesource.com/platform/bionic/+/462abab12b074c62c0999859e65d5a32ebb41951. diff --git a/x11-packages/qt6-qtwebengine/0010-chromium-disable-shm.patch b/x11-packages/qt6-qtwebengine/0010-chromium-disable-shm.patch new file mode 100644 index 0000000000..7216df073c --- /dev/null +++ b/x11-packages/qt6-qtwebengine/0010-chromium-disable-shm.patch @@ -0,0 +1,11 @@ +--- a/src/3rdparty/chromium/base/files/file_util_posix.cc ++++ b/src/3rdparty/chromium/base/files/file_util_posix.cc +@@ -1314,7 +1314,7 @@ + #if !BUILDFLAG(IS_ANDROID) + // This is implemented in file_util_android.cc for that platform. + bool GetShmemTempDir(bool executable, FilePath* path) { +-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_AIX) ++#if (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_AIX)) && !defined(__TERMUX__) + bool disable_dev_shm = false; + #if !BUILDFLAG(IS_CHROMEOS) + disable_dev_shm = CommandLine::ForCurrentProcess()->HasSwitch( diff --git a/x11-packages/qt6-qtwebengine/0011-chromium-no-set-process-title.patch b/x11-packages/qt6-qtwebengine/0011-chromium-no-set-process-title.patch new file mode 100644 index 0000000000..31c1835591 --- /dev/null +++ b/x11-packages/qt6-qtwebengine/0011-chromium-no-set-process-title.patch @@ -0,0 +1,11 @@ +--- a/src/3rdparty/chromium/base/process/set_process_title.cc ++++ b/src/3rdparty/chromium/base/process/set_process_title.cc +@@ -44,7 +44,7 @@ + + // TODO(jrg): Find out if setproctitle or equivalent is available on Android. + #if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_SOLARIS) && \ +- !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_FUCHSIA) && !BUILDFLAG(IS_NACL) ++ !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_FUCHSIA) && !BUILDFLAG(IS_NACL) && !defined(__TERMUX__) + + void SetProcessTitleFromCommandLine(const char** main_argv) { + // Build a single string which consists of all the arguments separated diff --git a/x11-packages/qt6-qtwebengine/0012-egl-fix-include.patch b/x11-packages/qt6-qtwebengine/0012-egl-fix-include.patch new file mode 100644 index 0000000000..8171b67f4b --- /dev/null +++ b/x11-packages/qt6-qtwebengine/0012-egl-fix-include.patch @@ -0,0 +1,23 @@ +--- a/src/3rdparty/chromium/third_party/khronos/EGL/eglplatform.h ++++ b/src/3rdparty/chromium/third_party/khronos/EGL/eglplatform.h +@@ -88,7 +88,7 @@ + typedef struct gbm_bo *EGLNativePixmapType; + typedef void *EGLNativeWindowType; + +-#elif defined(__ANDROID__) || defined(ANDROID) ++#elif (defined(__ANDROID__) || defined(ANDROID)) && !defined(__TERMUX__) + + struct ANativeWindow; + struct egl_native_pixmap_t; + +--- a/src/3rdparty/chromium/third_party/angle/include/EGL/eglplatform.h ++++ b/src/3rdparty/chromium/third_party/angle/include/EGL/eglplatform.h +@@ -88,7 +88,7 @@ + typedef struct gbm_bo *EGLNativePixmapType; + typedef void *EGLNativeWindowType; + +-#elif defined(__ANDROID__) || defined(ANDROID) ++#elif (defined(__ANDROID__) || defined(ANDROID)) && !defined(__TERMUX__) + + struct ANativeWindow; + struct egl_native_pixmap_t; diff --git a/x11-packages/qt6-qtwebengine/0013-disable-sandbox.patch b/x11-packages/qt6-qtwebengine/0013-disable-sandbox.patch new file mode 100644 index 0000000000..9574890a62 --- /dev/null +++ b/x11-packages/qt6-qtwebengine/0013-disable-sandbox.patch @@ -0,0 +1,21 @@ +--- a/src/core/web_engine_context.cpp ++++ b/src/core/web_engine_context.cpp +@@ -866,6 +866,10 @@ + switches::kApplicationName, + QCoreApplication::applicationName().toUtf8().toPercentEncoding().toStdString()); + ++#ifdef __TERMUX__ ++ parsedCommandLine.AppendSwitch(sandbox::policy::switches::kNoSandbox); ++ qInfo() << "Sandboxing disabled."; ++#else + // Enable sandboxing on OS X and Linux (Desktop / Embedded) by default. + bool disable_sandbox = qEnvironmentVariableIsSet(kDisableSandboxEnv); + if (!disable_sandbox) { +@@ -876,6 +880,7 @@ + parsedCommandLine.AppendSwitch(sandbox::policy::switches::kNoSandbox); + qInfo("Sandboxing disabled by user."); + } ++#endif + + // Do not advertise a feature we have removed at compile time + parsedCommandLine.AppendSwitch(switches::kDisableSpeechAPI); diff --git a/x11-packages/qt6-qtwebengine/0014-v8-trap-handler.patch b/x11-packages/qt6-qtwebengine/0014-v8-trap-handler.patch new file mode 100644 index 0000000000..5016bf3755 --- /dev/null +++ b/x11-packages/qt6-qtwebengine/0014-v8-trap-handler.patch @@ -0,0 +1,26 @@ +--- a/src/3rdparty/chromium/v8/src/trap-handler/trap-handler.h ++++ b/src/3rdparty/chromium/v8/src/trap-handler/trap-handler.h +@@ -19,7 +19,7 @@ + + // X64 on Linux, Windows, MacOS, FreeBSD. + #if V8_HOST_ARCH_X64 && V8_TARGET_ARCH_X64 && \ +- ((V8_OS_LINUX && !V8_OS_ANDROID) || V8_OS_WIN || V8_OS_DARWIN || \ ++ (V8_OS_LINUX || V8_OS_WIN || V8_OS_DARWIN || \ + V8_OS_FREEBSD) + #define V8_TRAP_HANDLER_SUPPORTED true + // Arm64 (non-simulator) on Mac. +@@ -41,14 +41,6 @@ + #define V8_TRAP_HANDLER_SUPPORTED false + #endif + +-#if V8_OS_ANDROID && V8_TRAP_HANDLER_SUPPORTED +-// It would require some careful security review before the trap handler +-// can be enabled on Android. Android may do unexpected things with signal +-// handling and crash reporting that could open up security holes in V8's +-// trap handling. +-#error "The V8 trap handler should not be enabled on Android" +-#endif +- + // Setup for shared library export. + #if defined(BUILDING_V8_SHARED) && defined(V8_OS_WIN) + #define TH_EXPORT_PRIVATE __declspec(dllexport) diff --git a/x11-packages/qt6-qtwebengine/0015-v8-memfd_create.patch b/x11-packages/qt6-qtwebengine/0015-v8-memfd_create.patch new file mode 100644 index 0000000000..b5cbf953f8 --- /dev/null +++ b/x11-packages/qt6-qtwebengine/0015-v8-memfd_create.patch @@ -0,0 +1,14 @@ +--- a/src/3rdparty/chromium/v8/src/wasm/wasm-objects.cc ++++ b/src/3rdparty/chromium/v8/src/wasm/wasm-objects.cc +@@ -11,6 +11,11 @@ + #undef MAP_TYPE + #endif // V8_TARGET_OS_LINUX + ++#if defined __ANDROID__ && __ANDROID_API__ < 30 ++#include ++#define memfd_create(name,flags) syscall(SYS_memfd_create,name,flags) ++#endif ++ + #include "src/wasm/wasm-objects.h" + + #include diff --git a/x11-packages/qt6-qtwebengine/0016-dav1d-no-get-affinity.patch b/x11-packages/qt6-qtwebengine/0016-dav1d-no-get-affinity.patch new file mode 100644 index 0000000000..603054b80d --- /dev/null +++ b/x11-packages/qt6-qtwebengine/0016-dav1d-no-get-affinity.patch @@ -0,0 +1,11 @@ +--- a/src/3rdparty/chromium/third_party/dav1d/libdav1d/src/cpu.c ++++ b/src/3rdparty/chromium/third_party/dav1d/libdav1d/src/cpu.c +@@ -91,7 +91,7 @@ + GetNativeSystemInfo(&system_info); + return system_info.dwNumberOfProcessors; + #endif +-#elif HAVE_PTHREAD_GETAFFINITY_NP && defined(CPU_COUNT) ++#elif HAVE_PTHREAD_GETAFFINITY_NP && defined(CPU_COUNT) && !defined(__ANDROID__) + cpu_set_t affinity; + if (!pthread_getaffinity_np(pthread_self(), sizeof(affinity), &affinity)) + return CPU_COUNT(&affinity); diff --git a/x11-packages/qt6-qtwebengine/0017-crashpad-no-spawn.patch b/x11-packages/qt6-qtwebengine/0017-crashpad-no-spawn.patch new file mode 100644 index 0000000000..1d38ef6906 --- /dev/null +++ b/x11-packages/qt6-qtwebengine/0017-crashpad-no-spawn.patch @@ -0,0 +1,28 @@ +--- a/src/3rdparty/chromium/third_party/crashpad/crashpad/util/posix/spawn_subprocess.cc ++++ b/src/3rdparty/chromium/third_party/crashpad/crashpad/util/posix/spawn_subprocess.cc +@@ -15,12 +15,15 @@ + #include "util/posix/spawn_subprocess.h" + + #include +-#include + #include + #include + #include + #include + ++#ifndef __TERMUX__ ++#include ++#endif ++ + #include "base/check.h" + #include "base/check_op.h" + #include "base/logging.h" +@@ -171,7 +174,7 @@ + char* const* envp_for_spawn = + envp ? const_cast(envp_c.data()) : environ; + +-#if BUILDFLAG(IS_ANDROID) && __ANDROID_API__ < 28 ++#if (BUILDFLAG(IS_ANDROID) || defined(__TERMUX__)) && __ANDROID_API__ < 28 + pid = fork(); + if (pid < 0) { + PLOG(FATAL) << "fork"; diff --git a/x11-packages/qt6-qtwebengine/0018-cpuinfo-android-arm.patch b/x11-packages/qt6-qtwebengine/0018-cpuinfo-android-arm.patch new file mode 100644 index 0000000000..e695c82ed6 --- /dev/null +++ b/x11-packages/qt6-qtwebengine/0018-cpuinfo-android-arm.patch @@ -0,0 +1,13 @@ +--- a/src/3rdparty/chromium/third_party/cpuinfo/src/src/arm/linux/init.c ++++ b/src/3rdparty/chromium/third_party/cpuinfo/src/src/arm/linux/init.c +@@ -14,6 +14,10 @@ + #include + #include + ++#ifdef __TERMUX__ ++#include ++#endif ++ + struct cpuinfo_arm_isa cpuinfo_isa = {0}; + + static struct cpuinfo_package package = {{0}}; diff --git a/x11-packages/qt6-qtwebengine/0019-mix-no-execinfo.patch b/x11-packages/qt6-qtwebengine/0019-mix-no-execinfo.patch new file mode 100644 index 0000000000..1fdb433a20 --- /dev/null +++ b/x11-packages/qt6-qtwebengine/0019-mix-no-execinfo.patch @@ -0,0 +1,50 @@ +--- a/src/3rdparty/chromium/v8/src/codegen/external-reference-table.cc ++++ b/src/3rdparty/chromium/v8/src/codegen/external-reference-table.cc +@@ -12,7 +12,9 @@ + + #if defined(DEBUG) && defined(V8_OS_LINUX) && !defined(V8_OS_ANDROID) + #define SYMBOLIZE_FUNCTION ++#if defined(__GLIBC__) + #include ++#endif + + #include + +@@ -118,7 +120,7 @@ + } + + const char* ExternalReferenceTable::ResolveSymbol(void* address) { +-#ifdef SYMBOLIZE_FUNCTION ++#if defined(SYMBOLIZE_FUNCTION) && defined(__GLIBC__) + char** names = backtrace_symbols(&address, 1); + const char* name = names[0]; + // The array of names is malloc'ed. However, each name string is static +--- a/src/3rdparty/chromium/base/debug/stack_trace.cc ++++ b/src/3rdparty/chromium/base/debug/stack_trace.cc +@@ -249,7 +249,7 @@ + // Symbols are not expected to be reliable when gn args specifies + // symbol_level=0. + return false; +-#elif defined(__UCLIBC__) || defined(_AIX) ++#elif defined(__UCLIBC__) || defined(_AIX) || defined(__TERMUX__) + // StackTrace::OutputToStream() is not implemented under uclibc, nor AIX. + // See https://crbug.com/706728 + return false; +@@ -311,7 +311,7 @@ + + std::string StackTrace::ToStringWithPrefix(cstring_view prefix_string) const { + std::stringstream stream; +-#if !defined(__UCLIBC__) && !defined(_AIX) ++#if !defined(__UCLIBC__) && !defined(_AIX) && !defined(__TERMUX__) + OutputToStreamWithPrefix(&stream, prefix_string); + #endif + return stream.str(); +@@ -335,7 +335,7 @@ + } + + std::ostream& operator<<(std::ostream& os, const StackTrace& s) { +-#if !defined(__UCLIBC__) && !defined(_AIX) ++#if !defined(__UCLIBC__) && !defined(_AIX) && !defined(__TERMUX__) + s.OutputToStream(&os); + #else + os << "StackTrace::OutputToStream not implemented."; diff --git a/x11-packages/qt6-qtwebengine/0020-chromium-impl-scoped-file.patch b/x11-packages/qt6-qtwebengine/0020-chromium-impl-scoped-file.patch new file mode 100644 index 0000000000..01c5ae6e61 --- /dev/null +++ b/x11-packages/qt6-qtwebengine/0020-chromium-impl-scoped-file.patch @@ -0,0 +1,40 @@ +--- a/src/3rdparty/chromium/base/files/scoped_file_linux.cc ++++ b/src/3rdparty/chromium/base/files/scoped_file_linux.cc +@@ -14,6 +14,26 @@ + #include "base/logging.h" + #include "base/strings/string_piece.h" + ++#ifdef __TERMUX__ ++#include ++#include ++#include ++static inline void termux_disable_fdsan() { ++ typedef void (*android_fdsan_error_level_ptr_t)(enum android_fdsan_error_level); ++ // For Android 11+. ++ void *lib_handle = dlopen("libc.so", RTLD_LAZY); ++ if (lib_handle) { ++ android_fdsan_error_level_ptr_t set_fdsan_error_level = ++ reinterpret_cast( ++ dlsym(lib_handle, "android_fdsan_set_error_level")); ++ if (set_fdsan_error_level != nullptr) { ++ set_fdsan_error_level(ANDROID_FDSAN_ERROR_LEVEL_DISABLED); ++ } ++ dlclose(lib_handle); ++ } ++} ++#endif ++ + namespace { + + // We want to avoid any kind of allocations in our close() implementation, so we +@@ -65,6 +85,10 @@ + + void EnableFDOwnershipEnforcement(bool enabled) { + g_is_ownership_enforced = enabled; ++#ifdef __TERMUX__ ++ // Disable the Android native fdsan. ++ termux_disable_fdsan(); ++#endif + } + + void ResetFDOwnership() { diff --git a/x11-packages/qt6-qtwebengine/0021-chromium-no-landlock.patch b/x11-packages/qt6-qtwebengine/0021-chromium-no-landlock.patch new file mode 100644 index 0000000000..2073c77727 --- /dev/null +++ b/x11-packages/qt6-qtwebengine/0021-chromium-no-landlock.patch @@ -0,0 +1,11 @@ +--- a/src/3rdparty/chromium/content/app/content_main_runner_impl.cc ++++ b/src/3rdparty/chromium/content/app/content_main_runner_impl.cc +@@ -1059,7 +1059,7 @@ + } + #endif // BUILDFLAG(USE_ZYGOTE) + +-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) ++#if (BUILDFLAG(IS_LINUX) && !defined(__TERMUX__)) || BUILDFLAG(IS_CHROMEOS) + if (process_type.empty()) { + // Check if Landlock is supported. + sandbox::policy::SandboxLinux::ReportLandlockStatus(); diff --git a/x11-packages/qt6-qtwebengine/build.sh b/x11-packages/qt6-qtwebengine/build.sh new file mode 100644 index 0000000000..2dc660094f --- /dev/null +++ b/x11-packages/qt6-qtwebengine/build.sh @@ -0,0 +1,101 @@ +TERMUX_PKG_HOMEPAGE=https://www.qt.io/ +TERMUX_PKG_DESCRIPTION="Qt 6 WebEngine Library" +TERMUX_PKG_LICENSE="GPL-3.0" +TERMUX_PKG_MAINTAINER="@licy183" +TERMUX_PKG_VERSION="6.10.1" +TERMUX_PKG_SRCURL="https://download.qt.io/official_releases/qt/${TERMUX_PKG_VERSION%.*}/${TERMUX_PKG_VERSION}/submodules/qtwebengine-everywhere-src-${TERMUX_PKG_VERSION}.tar.xz" +TERMUX_PKG_SHA256=77b5ea6186a0429a6b8e656faedd5cd3e8019d33856ee59637698ab578ead1e3 +TERMUX_PKG_DEPENDS="dbus, fontconfig, libc++, libexpat, libjpeg-turbo, libminizip, libnspr, libnss, libopus, libpng, libsnappy, libvpx, libwebp, libx11, libxkbfile, qt6-qtbase (>= ${TERMUX_PKG_VERSION}), qt6-qtdeclarative (>= ${TERMUX_PKG_VERSION}), qt6-qtwebchannel (>= ${TERMUX_PKG_VERSION}), zlib" +TERMUX_PKG_BUILD_DEPENDS="qt6-qtbase-cross-tools, qt6-qtdeclarative-cross-tools" +TERMUX_PKG_HOSTBUILD=true +TERMUX_PKG_NO_STATICSPLIT=true +TERMUX_PKG_AUTO_UPDATE=true +TERMUX_PKG_EXTRA_CONFIGURE_ARGS=" +-DCMAKE_MESSAGE_LOG_LEVEL=STATUS +-DCMAKE_SYSTEM_NAME=Linux +-DTEST_glibc=ON +-DQT_GENERATE_SBOM=OFF +" + +termux_step_host_build() { + termux_setup_cmake + termux_setup_ninja + + mkdir -p host-gn-build + pushd host-gn-build + cmake \ + -G Ninja \ + -S ${TERMUX_PKG_SRCDIR}/src/gn \ + -DCMAKE_BUILD_TYPE=MinSizeRel + ninja -j $TERMUX_PKG_MAKE_PROCESSES + popd # host-gn-build +} + +termux_step_configure() { + termux_setup_cmake + termux_setup_ninja + termux_setup_nodejs + + export PATH="$TERMUX_PKG_HOSTBUILD_DIR/host-gn-build/MinSizeRel:$PATH" + + # Remove termux's dummy pkg-config + local _host_pkg_config="$(cat $(command -v pkg-config) | grep exec | awk '{print $2}')" + rm -rf $TERMUX_PKG_TMPDIR/host-pkg-config-bin + mkdir -p $TERMUX_PKG_TMPDIR/host-pkg-config-bin + ln -s $_host_pkg_config $TERMUX_PKG_TMPDIR/host-pkg-config-bin/pkg-config + ln -s $(command -v pkg-config) $TERMUX_PKG_TMPDIR/host-pkg-config-bin/$TERMUX_HOST_PLATFORM-pkg-config + export PATH="$TERMUX_PKG_TMPDIR/host-pkg-config-bin:$PATH" + + # Create dummy sysroot + if [ ! -d "$TERMUX_PKG_CACHEDIR/sysroot-$TERMUX_ARCH" ]; then + rm -rf $TERMUX_PKG_TMPDIR/sysroot + mkdir -p $TERMUX_PKG_TMPDIR/sysroot + pushd $TERMUX_PKG_TMPDIR/sysroot + mkdir -p usr/include usr/lib usr/bin + cp -R $TERMUX_STANDALONE_TOOLCHAIN/sysroot/usr/include/* usr/include + cp -R $TERMUX_STANDALONE_TOOLCHAIN/sysroot/usr/include/$TERMUX_HOST_PLATFORM/* usr/include + cp -R $TERMUX_STANDALONE_TOOLCHAIN/sysroot/usr/lib/$TERMUX_HOST_PLATFORM/$TERMUX_PKG_API_LEVEL/* usr/lib/ + cp "$TERMUX_STANDALONE_TOOLCHAIN/sysroot/usr/lib/$TERMUX_HOST_PLATFORM/libc++_shared.so" usr/lib/ + cp "$TERMUX_STANDALONE_TOOLCHAIN/sysroot/usr/lib/$TERMUX_HOST_PLATFORM/libc++_static.a" usr/lib/ + cp "$TERMUX_STANDALONE_TOOLCHAIN/sysroot/usr/lib/$TERMUX_HOST_PLATFORM/libc++abi.a" usr/lib/ + cp -Rf $TERMUX_PREFIX/include/* usr/include + cp -Rf $TERMUX_PREFIX/lib/* usr/lib + ln -sf /data ./data + popd + mv $TERMUX_PKG_TMPDIR/sysroot $TERMUX_PKG_CACHEDIR/sysroot-$TERMUX_ARCH + fi + + # Dummy pthread, rt and resolve + # TODO: Patch the building system and do not dummy `librt.so`. + echo "INPUT(-llog -liconv -landroid-shmem)" > "$TERMUX_PREFIX/lib/librt.so" + echo '!' > "$TERMUX_PREFIX/lib/libpthread.a" + echo '!' > "$TERMUX_PREFIX/lib/libresolv.a" + + TERMUX_PKG_EXTRA_CONFIGURE_ARGS+=" -DDUMMY_SYSROOT=$TERMUX_PKG_CACHEDIR/sysroot-$TERMUX_ARCH" + + : ${NINJAFLAGS:=""} + export NINJAFLAGS + + termux_step_configure_cmake +} + +termux_step_make_install() { + cmake \ + --install "${TERMUX_PKG_BUILDDIR}" \ + --prefix "${TERMUX_PREFIX}" \ + --verbose + + # Drop QMAKE_PRL_BUILD_DIR because reference the build dir + find "${TERMUX_PREFIX}/lib" -type f -name "libQt6Pdf*.prl" \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' "{}" \; + find "${TERMUX_PREFIX}/lib" -type f -name "libQt6WebEngine*.prl" \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' "{}" \; + + # Remove *.la files + find "${TERMUX_PREFIX}/lib" -iname \*.la -delete +} + +termux_step_post_make_install() { + # Remove the dummy files + rm $TERMUX_PREFIX/lib/lib{{pthread,resolv}.a,rt.so} +}