From 813836b84e411534478326e9a967e234d4a2e160 Mon Sep 17 00:00:00 2001 From: John Date: Sun, 10 May 2020 15:05:15 +0200 Subject: [PATCH 1/2] New package: electron8-8.2.5 [ci skip] --- .../musl-patches/chromium-musl-crashpad.patch | 23 ++ ...musl-default-pthread-stacksize.patch.patch | 31 ++ .../chromium-musl-sandbox.patch.patch | 176 +++++++++++ ...um-musl_canonicalize_file_name.patch.patch | 13 + .../chromium-musl_cdefs.patch.patch | 45 +++ ...musl_define_temp_failure_retry.patch.patch | 18 ++ .../chromium-musl_dns.patch.patch | 61 ++++ .../chromium-musl_exeinfo.patch.patch | 96 ++++++ .../chromium-musl_fpstate_t.patch.patch | 48 +++ .../chromium-musl_getcontext.patch.patch | 25 ++ .../chromium-musl_mallinfo.patch.patch | 61 ++++ .../chromium-musl_pread_pwrite64.patch.patch | 18 ++ .../chromium-musl_push_back.patch.patch | 13 + .../chromium-musl_si_fields.patch.patch | 13 + .../chromium-musl_stack_size.patch.patch | 41 +++ .../chromium-musl_stack_trace.patch.patch | 44 +++ .../chromium-musl_tcp_listen.patch.patch | 14 + .../chromium-musl_wordsize.patch.patch | 24 ++ ...chromium-chromium_atk_optional.patch.patch | 17 ++ ...m-fix-building-with-unbundled-libxml.patch | 127 ++++++++ .../chromium-fix-sucess-definition.patch | 15 + .../patches/chromium-gn_bootstrap_ninja.patch | 32 ++ .../files/patches/chromium-libc_malloc.patch | 26 ++ ...s-Implement-size-limit-for-user-logs.patch | 275 ++++++++++++++++++ ...a-script-to-list-patch-targets.patch.patch | 42 +++ .../patches/electron-Build-fixes.patch.patch | 47 +++ ...ectron-dont-assume-python-is-python2.patch | 17 ++ srcpkgs/electron8/template | 258 ++++++++++++++++ 28 files changed, 1620 insertions(+) create mode 100644 srcpkgs/electron8/files/musl-patches/chromium-musl-crashpad.patch create mode 100644 srcpkgs/electron8/files/musl-patches/chromium-musl-default-pthread-stacksize.patch.patch create mode 100644 srcpkgs/electron8/files/musl-patches/chromium-musl-sandbox.patch.patch create mode 100644 srcpkgs/electron8/files/musl-patches/chromium-musl_canonicalize_file_name.patch.patch create mode 100644 srcpkgs/electron8/files/musl-patches/chromium-musl_cdefs.patch.patch create mode 100644 srcpkgs/electron8/files/musl-patches/chromium-musl_define_temp_failure_retry.patch.patch create mode 100644 srcpkgs/electron8/files/musl-patches/chromium-musl_dns.patch.patch create mode 100644 srcpkgs/electron8/files/musl-patches/chromium-musl_exeinfo.patch.patch create mode 100644 srcpkgs/electron8/files/musl-patches/chromium-musl_fpstate_t.patch.patch create mode 100644 srcpkgs/electron8/files/musl-patches/chromium-musl_getcontext.patch.patch create mode 100644 srcpkgs/electron8/files/musl-patches/chromium-musl_mallinfo.patch.patch create mode 100644 srcpkgs/electron8/files/musl-patches/chromium-musl_pread_pwrite64.patch.patch create mode 100644 srcpkgs/electron8/files/musl-patches/chromium-musl_push_back.patch.patch create mode 100644 srcpkgs/electron8/files/musl-patches/chromium-musl_si_fields.patch.patch create mode 100644 srcpkgs/electron8/files/musl-patches/chromium-musl_stack_size.patch.patch create mode 100644 srcpkgs/electron8/files/musl-patches/chromium-musl_stack_trace.patch.patch create mode 100644 srcpkgs/electron8/files/musl-patches/chromium-musl_tcp_listen.patch.patch create mode 100644 srcpkgs/electron8/files/musl-patches/chromium-musl_wordsize.patch.patch create mode 100644 srcpkgs/electron8/files/patches/chromium-chromium_atk_optional.patch.patch create mode 100644 srcpkgs/electron8/files/patches/chromium-fix-building-with-unbundled-libxml.patch create mode 100644 srcpkgs/electron8/files/patches/chromium-fix-sucess-definition.patch create mode 100644 srcpkgs/electron8/files/patches/chromium-gn_bootstrap_ninja.patch create mode 100644 srcpkgs/electron8/files/patches/chromium-libc_malloc.patch create mode 100644 srcpkgs/electron8/files/patches/chromium-upstream-0001-logs-Implement-size-limit-for-user-logs.patch create mode 100644 srcpkgs/electron8/files/patches/electron-Add-a-script-to-list-patch-targets.patch.patch create mode 100644 srcpkgs/electron8/files/patches/electron-Build-fixes.patch.patch create mode 100644 srcpkgs/electron8/files/patches/electron-dont-assume-python-is-python2.patch create mode 100644 srcpkgs/electron8/template diff --git a/srcpkgs/electron8/files/musl-patches/chromium-musl-crashpad.patch b/srcpkgs/electron8/files/musl-patches/chromium-musl-crashpad.patch new file mode 100644 index 00000000000..70cffa3002b --- /dev/null +++ b/srcpkgs/electron8/files/musl-patches/chromium-musl-crashpad.patch @@ -0,0 +1,23 @@ +--- a/third_party/crashpad/crashpad/util/linux/ptracer.cc ++++ b/third_party/crashpad/crashpad/util/linux/ptracer.cc +@@ -26,6 +26,7 @@ + + #if defined(ARCH_CPU_X86_FAMILY) + #include ++#include + #endif + + namespace crashpad { + +--- a/third_party/crashpad/crashpad/compat/linux/sys/ptrace.h ++++ b/third_party/crashpad/crashpad/compat/linux/sys/ptrace.h +@@ -17,7 +17,9 @@ + + #include_next + ++#if defined(__GLIBC__) + #include ++#endif + + // https://sourceware.org/bugzilla/show_bug.cgi?id=22433 + #if !defined(PTRACE_GET_THREAD_AREA) && !defined(PT_GET_THREAD_AREA) && \ diff --git a/srcpkgs/electron8/files/musl-patches/chromium-musl-default-pthread-stacksize.patch.patch b/srcpkgs/electron8/files/musl-patches/chromium-musl-default-pthread-stacksize.patch.patch new file mode 100644 index 00000000000..d0c1361b8ed --- /dev/null +++ b/srcpkgs/electron8/files/musl-patches/chromium-musl-default-pthread-stacksize.patch.patch @@ -0,0 +1,31 @@ +diff --git a/base/threading/platform_thread_linux.cc b/base/threading/platform_thread_linux.cc +index 095c49b..5044bb8 100644 +--- a/base/threading/platform_thread_linux.cc ++++ b/base/threading/platform_thread_linux.cc +@@ -186,7 +186,7 @@ void TerminateOnThread() {} + + size_t GetDefaultThreadStackSize(const pthread_attr_t& attributes) { + #if !defined(THREAD_SANITIZER) +- return 0; ++ return (1 << 23); + #else + // ThreadSanitizer bloats the stack heavily. Evidence has been that the + // default stack size isn't enough for some browser tests. +diff --git a/chrome/app/shutdown_signal_handlers_posix.cc b/chrome/app/shutdown_signal_handlers_posix.cc +index 621d441..be21106 100644 +--- a/chrome/app/shutdown_signal_handlers_posix.cc ++++ b/chrome/app/shutdown_signal_handlers_posix.cc +@@ -187,11 +187,11 @@ void InstallShutdownSignalHandlers( + g_shutdown_pipe_read_fd = pipefd[0]; + g_shutdown_pipe_write_fd = pipefd[1]; + #if !defined(ADDRESS_SANITIZER) +- const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 2; ++ const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 2 *8; + #else + // ASan instrumentation bloats the stack frames, so we need to increase the + // stack size to avoid hitting the guard page. +- const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 4; ++ const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 4 *8; + #endif + ShutdownDetector* detector = new ShutdownDetector( + g_shutdown_pipe_read_fd, std::move(shutdown_callback), task_runner); diff --git a/srcpkgs/electron8/files/musl-patches/chromium-musl-sandbox.patch.patch b/srcpkgs/electron8/files/musl-patches/chromium-musl-sandbox.patch.patch new file mode 100644 index 00000000000..f485f6cc75a --- /dev/null +++ b/srcpkgs/electron8/files/musl-patches/chromium-musl-sandbox.patch.patch @@ -0,0 +1,176 @@ +diff --git a/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc b/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc +index 348ab6e..4550f9e 100644 +--- ./sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc ++++ ./sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc +@@ -139,21 +139,11 @@ namespace sandbox { + // present (as in newer versions of posix_spawn). + ResultExpr RestrictCloneToThreadsAndEPERMFork() { + const Arg flags(0); +- +- // TODO(mdempsky): Extend DSL to support (flags & ~mask1) == mask2. +- const uint64_t kAndroidCloneMask = CLONE_VM | CLONE_FS | CLONE_FILES | +- CLONE_SIGHAND | CLONE_THREAD | +- CLONE_SYSVSEM; +- const uint64_t kObsoleteAndroidCloneMask = kAndroidCloneMask | CLONE_DETACHED; +- +- const uint64_t kGlibcPthreadFlags = +- CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_THREAD | +- CLONE_SYSVSEM | CLONE_SETTLS | CLONE_PARENT_SETTID | CLONE_CHILD_CLEARTID; +- const BoolExpr glibc_test = flags == kGlibcPthreadFlags; +- +- const BoolExpr android_test = +- AnyOf(flags == kAndroidCloneMask, flags == kObsoleteAndroidCloneMask, +- flags == kGlibcPthreadFlags); ++ const int required = CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | ++ CLONE_THREAD | CLONE_SYSVSEM; ++ const int safe = CLONE_SETTLS | CLONE_PARENT_SETTID | CLONE_CHILD_CLEARTID | ++ CLONE_DETACHED; ++ const BoolExpr thread_clone_ok = (flags&~safe)==required; + + // The following two flags are the two important flags in any vfork-emulating + // clone call. EPERM any clone call that contains both of them. +@@ -163,7 +153,7 @@ ResultExpr RestrictCloneToThreadsAndEPERMFork() { + AnyOf((flags & (CLONE_VM | CLONE_THREAD)) == 0, + (flags & kImportantCloneVforkFlags) == kImportantCloneVforkFlags); + +- return If(IsAndroid() ? android_test : glibc_test, Allow()) ++ return If(thread_clone_ok, Allow()) + .ElseIf(is_fork_or_clone_vfork, Error(EPERM)) + .Else(CrashSIGSYSClone()); + } +diff --git a/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc b/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc +index 7dbcc87..589262f 100644 +--- ./sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc ++++ ./sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc +@@ -391,6 +391,7 @@ bool SyscallSets::IsAllowedProcessStartOrDeath(int sysno) { + #if defined(__i386__) + case __NR_waitpid: + #endif ++ case __NR_set_tid_address: + return true; + case __NR_clone: // Should be parameter-restricted. + case __NR_setns: // Privileged. +@@ -403,7 +404,6 @@ bool SyscallSets::IsAllowedProcessStartOrDeath(int sysno) { + #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) + case __NR_set_thread_area: + #endif +- case __NR_set_tid_address: + case __NR_unshare: + #if !defined(__mips__) && !defined(__aarch64__) + case __NR_vfork: +@@ -513,6 +513,8 @@ bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) { + case __NR_mlock: + case __NR_munlock: + case __NR_munmap: ++ case __NR_mremap: ++ case __NR_membarrier: + return true; + case __NR_madvise: + case __NR_mincore: +@@ -530,7 +532,6 @@ bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) { + case __NR_modify_ldt: + #endif + case __NR_mprotect: +- case __NR_mremap: + case __NR_msync: + case __NR_munlockall: + case __NR_readahead: +diff --git a/sandbox/linux/system_headers/arm64_linux_syscalls.h b/sandbox/linux/system_headers/arm64_linux_syscalls.h +index 59d0eab..7ae7002 100644 +--- ./sandbox/linux/system_headers/arm64_linux_syscalls.h ++++ ./sandbox/linux/system_headers/arm64_linux_syscalls.h +@@ -1063,4 +1063,8 @@ + #define __NR_memfd_create 279 + #endif + ++#if !defined(__NR_membarrier) ++#define __NR_membarrier 283 ++#endif ++ + #endif // SANDBOX_LINUX_SYSTEM_HEADERS_ARM64_LINUX_SYSCALLS_H_ +diff --git a/sandbox/linux/system_headers/arm_linux_syscalls.h b/sandbox/linux/system_headers/arm_linux_syscalls.h +index 1addd53..7843b5e 100644 +--- ./sandbox/linux/system_headers/arm_linux_syscalls.h ++++ ./sandbox/linux/system_headers/arm_linux_syscalls.h +@@ -1385,6 +1385,10 @@ + #define __NR_memfd_create (__NR_SYSCALL_BASE+385) + #endif + ++#if !defined(__NR_membarrier) ++#define __NR_membarrier (__NR_SYSCALL_BASE+389) ++#endif ++ + // ARM private syscalls. + #if !defined(__ARM_NR_BASE) + #define __ARM_NR_BASE (__NR_SYSCALL_BASE + 0xF0000) +diff --git a/sandbox/linux/system_headers/mips64_linux_syscalls.h b/sandbox/linux/system_headers/mips64_linux_syscalls.h +index ec75815..612fcfa 100644 +--- ./sandbox/linux/system_headers/mips64_linux_syscalls.h ++++ ./sandbox/linux/system_headers/mips64_linux_syscalls.h +@@ -1271,4 +1271,8 @@ + #define __NR_memfd_create (__NR_Linux + 314) + #endif + ++#if !defined(__NR_membarrier) ++#define __NR_membarrier (__NR_Linux + 318) ++#endif ++ + #endif // SANDBOX_LINUX_SYSTEM_HEADERS_MIPS64_LINUX_SYSCALLS_H_ +diff --git a/sandbox/linux/system_headers/mips_linux_syscalls.h b/sandbox/linux/system_headers/mips_linux_syscalls.h +index ddbf97f..1742acd 100644 +--- ./sandbox/linux/system_headers/mips_linux_syscalls.h ++++ ./sandbox/linux/system_headers/mips_linux_syscalls.h +@@ -1433,4 +1433,8 @@ + #define __NR_memfd_create (__NR_Linux + 354) + #endif + ++#if !defined(__NR_membarrier) ++#define __NR_membarrier (__NR_Linux + 358) ++#endif ++ + #endif // SANDBOX_LINUX_SYSTEM_HEADERS_MIPS_LINUX_SYSCALLS_H_ +diff --git a/sandbox/linux/system_headers/x86_32_linux_syscalls.h b/sandbox/linux/system_headers/x86_32_linux_syscalls.h +index a6afc62..7ed0a3b 100644 +--- ./sandbox/linux/system_headers/x86_32_linux_syscalls.h ++++ ./sandbox/linux/system_headers/x86_32_linux_syscalls.h +@@ -1422,5 +1422,9 @@ + #define __NR_memfd_create 356 + #endif + ++#if !defined(__NR_membarrier) ++#define __NR_membarrier 375 ++#endif ++ + #endif // SANDBOX_LINUX_SYSTEM_HEADERS_X86_32_LINUX_SYSCALLS_H_ + +diff --git a/sandbox/linux/system_headers/x86_64_linux_syscalls.h b/sandbox/linux/system_headers/x86_64_linux_syscalls.h +index 349504a..ea3c7c9 100644 +--- ./sandbox/linux/system_headers/x86_64_linux_syscalls.h ++++ ./sandbox/linux/system_headers/x86_64_linux_syscalls.h +@@ -1290,5 +1290,9 @@ + #define __NR_memfd_create 319 + #endif + ++#if !defined(__NR_membarrier) ++#define __NR_membarrier 324 ++#endif ++ + #endif // SANDBOX_LINUX_SYSTEM_HEADERS_X86_64_LINUX_SYSCALLS_H_ + +diff --git a/services/service_manager/sandbox/linux/bpf_renderer_policy_linux.cc b/services/service_manager/sandbox/linux/bpf_renderer_policy_linux.cc +index 017f13c..50aeec3 100644 +--- ./services/service_manager/sandbox/linux/bpf_renderer_policy_linux.cc ++++ ./services/service_manager/sandbox/linux/bpf_renderer_policy_linux.cc +@@ -88,10 +88,10 @@ ResultExpr RendererProcessPolicy::EvaluateSyscall(int sysno) const { + case __NR_sysinfo: + case __NR_times: + case __NR_uname: +- return Allow(); +- case __NR_sched_getaffinity: + case __NR_sched_getparam: + case __NR_sched_getscheduler: ++ return Allow(); ++ case __NR_sched_getaffinity: + case __NR_sched_setscheduler: + return sandbox::RestrictSchedTarget(GetPolicyPid(), sysno); + case __NR_prlimit64: diff --git a/srcpkgs/electron8/files/musl-patches/chromium-musl_canonicalize_file_name.patch.patch b/srcpkgs/electron8/files/musl-patches/chromium-musl_canonicalize_file_name.patch.patch new file mode 100644 index 00000000000..05614daa757 --- /dev/null +++ b/srcpkgs/electron8/files/musl-patches/chromium-musl_canonicalize_file_name.patch.patch @@ -0,0 +1,13 @@ +diff --git a/third_party/nasm/config/config-linux.h b/third_party/nasm/config/config-linux.h +index 7eb7c20..882b736 100644 +--- a/third_party/nasm/config/config-linux.h ++++ b/third_party/nasm/config/config-linux.h +@@ -117,7 +117,7 @@ + #define HAVE_ACCESS 1 + + /* Define to 1 if you have the `canonicalize_file_name' function. */ +-#define HAVE_CANONICALIZE_FILE_NAME 1 ++/* #undef HAVE_CANONICALIZE_FILE_NAME */ + + /* Define to 1 if you have the `cpu_to_le16' intrinsic function. */ + /* #undef HAVE_CPU_TO_LE16 */ diff --git a/srcpkgs/electron8/files/musl-patches/chromium-musl_cdefs.patch.patch b/srcpkgs/electron8/files/musl-patches/chromium-musl_cdefs.patch.patch new file mode 100644 index 00000000000..fc7dc06ff21 --- /dev/null +++ b/srcpkgs/electron8/files/musl-patches/chromium-musl_cdefs.patch.patch @@ -0,0 +1,45 @@ +diff --git a/base/allocator/allocator_shim_internals.h b/base/allocator/allocator_shim_internal +s.h +index 0196f89..bb42b5d 100644 +--- a/base/allocator/allocator_shim_internals.h ++++ b/base/allocator/allocator_shim_internals.h +@@ -7,7 +7,9 @@ + + #if defined(__GNUC__) + ++#if defined(__GLIBC__) + #include // for __THROW ++#endif + + #ifndef __THROW // Not a glibc system + #ifdef _NOEXCEPT // LLVM libc++ uses noexcept instead +diff --git a/third_party/libsync/src/include/sync/sync.h b/third_party/libsync/src/include/sync/sync.h +index 50ed0ac..7552a49 100644 +--- a/third_party/libsync/src/include/sync/sync.h ++++ b/third_party/libsync/src/include/sync/sync.h +@@ -19,12 +19,13 @@ + #ifndef __SYS_CORE_SYNC_H + #define __SYS_CORE_SYNC_H + +-#include + #include + + #include + +-__BEGIN_DECLS ++#ifdef __cplusplus ++extern "C" { ++#endif /* __cplusplus */ + + struct sync_legacy_merge_data { + int32_t fd2; +@@ -158,6 +159,8 @@ struct sync_pt_info *sync_pt_info(struct sync_fence_info_data *info, + struct sync_pt_info *itr); + void sync_fence_info_free(struct sync_fence_info_data *info); + +-__END_DECLS ++#ifdef __cplusplus ++} ++#endif /* __cplusplus */ + + #endif /* __SYS_CORE_SYNC_H */ diff --git a/srcpkgs/electron8/files/musl-patches/chromium-musl_define_temp_failure_retry.patch.patch b/srcpkgs/electron8/files/musl-patches/chromium-musl_define_temp_failure_retry.patch.patch new file mode 100644 index 00000000000..61db658f849 --- /dev/null +++ b/srcpkgs/electron8/files/musl-patches/chromium-musl_define_temp_failure_retry.patch.patch @@ -0,0 +1,18 @@ +--- a/sandbox/linux/suid/sandbox.c 2019-11-19 09:28:05.000000000 +0800 ++++ b/sandbox/linux/suid/sandbox.c 2020-04-24 11:50:12.719880728 +0800 +@@ -42,6 +42,15 @@ + #define CLONE_NEWNET 0x40000000 + #endif + ++#ifndef TEMP_FAILURE_RETRY ++#define TEMP_FAILURE_RETRY(expression) \ ++ (__extension__ \ ++ ({ long int __result; \ ++ do __result = (long int) (expression); \ ++ while (__result == -1L && errno == EINTR); \ ++ __result; })) ++#endif ++ + static bool DropRoot(); + + #define HANDLE_EINTR(x) TEMP_FAILURE_RETRY(x) diff --git a/srcpkgs/electron8/files/musl-patches/chromium-musl_dns.patch.patch b/srcpkgs/electron8/files/musl-patches/chromium-musl_dns.patch.patch new file mode 100644 index 00000000000..f49d8bd0afa --- /dev/null +++ b/srcpkgs/electron8/files/musl-patches/chromium-musl_dns.patch.patch @@ -0,0 +1,61 @@ +diff --git a/net/dns/dns_config_service_posix.cc b/net/dns/dns_config_service_posix.cc +index 2f94832..2dd1a98 100644 +--- a/net/dns/dns_config_service_posix.cc ++++ b/net/dns/dns_config_service_posix.cc +@@ -150,7 +150,7 @@ ConfigParsePosixResult ReadDnsConfig(DnsConfig* dns_config) { + #if !defined(OS_ANDROID) + ConfigParsePosixResult result; + // TODO(fuchsia): Use res_ninit() when it's implemented on Fuchsia. +-#if defined(OS_OPENBSD) || defined(OS_FUCHSIA) ++#if defined(OS_OPENBSD) || defined(OS_FUCHSIA) || (defined(OS_LINUX) && !defined(__GLIBC__)) + // Note: res_ninit in glibc always returns 0 and sets RES_INIT. + // res_init behaves the same way. + memset(&_res, 0, sizeof(_res)); +@@ -173,7 +173,7 @@ ConfigParsePosixResult ReadDnsConfig(DnsConfig* dns_config) { + #else + res_nclose(&res); + #endif // defined(OS_MACOSX) || defined(OS_FREEBSD) +-#endif // defined(OS_OPENBSD) ++#endif // defined(OS_OPENBSD) || defined(OS_FUCHSIA) || (defined(OS_LINUX) && !defined(__GLIBC__)) + + #if defined(OS_MACOSX) && !defined(OS_IOS) + ConfigParsePosixResult error = DnsConfigWatcher::CheckDnsConfig(); +diff --git a/net/dns/dns_reloader.cc b/net/dns/dns_reloader.cc +index 952cff4..4b366f4 100644 +--- a/net/dns/dns_reloader.cc ++++ b/net/dns/dns_reloader.cc +@@ -4,7 +4,7 @@ + + #include "net/dns/dns_reloader.h" + +-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \ ++#if defined(OS_POSIX) && defined(__GLIBC__) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \ + !defined(OS_ANDROID) && !defined(OS_FUCHSIA) + + #include +diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc +index e8dea46..c86a830 100644 +--- a/net/dns/host_resolver_manager.cc ++++ b/net/dns/host_resolver_manager.cc +@@ -2386,7 +2386,7 @@ HostResolverManager::HostResolverManager( + NetworkChangeNotifier::AddConnectionTypeObserver(this); + if (system_dns_config_notifier_) + system_dns_config_notifier_->AddObserver(this); +-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \ ++#if defined(OS_POSIX) && defined(__GLIBC__) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \ + !defined(OS_ANDROID) + EnsureDnsReloaderInit(); + #endif +diff --git a/net/dns/host_resolver_proc.cc b/net/dns/host_resolver_proc.cc +index 0824540..3384978 100644 +--- a/net/dns/host_resolver_proc.cc ++++ b/net/dns/host_resolver_proc.cc +@@ -197,7 +197,7 @@ int SystemHostResolverCall(const std::string& host, + base::ScopedBlockingCall scoped_blocking_call(FROM_HERE, + base::BlockingType::WILL_BLOCK); + +-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \ ++#if defined(OS_POSIX) && defined(__GLIBC__) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \ + !defined(OS_ANDROID) && !defined(OS_FUCHSIA) + DnsReloaderMaybeReload(); + #endif diff --git a/srcpkgs/electron8/files/musl-patches/chromium-musl_exeinfo.patch.patch b/srcpkgs/electron8/files/musl-patches/chromium-musl_exeinfo.patch.patch new file mode 100644 index 00000000000..f1afc7c1b17 --- /dev/null +++ b/srcpkgs/electron8/files/musl-patches/chromium-musl_exeinfo.patch.patch @@ -0,0 +1,96 @@ +diff --git a/base/debug/stack_trace_posix.cc b/base/debug/stack_trace_posix.cc +index de2f356..f697c66 100644 +--- a/base/debug/stack_trace_posix.cc ++++ b/base/debug/stack_trace_posix.cc +@@ -27,7 +27,7 @@ + #if !defined(USE_SYMBOLIZE) + #include + #endif +-#if !defined(__UCLIBC__) && !defined(_AIX) ++#if defined(__GLIBC__) && !defined(__UCLIBC__) && !defined(_AIX) + #include + #endif + +@@ -86,7 +86,7 @@ void DemangleSymbols(std::string* text) { + // Note: code in this function is NOT async-signal safe (std::string uses + // malloc internally). + +-#if !defined(__UCLIBC__) && !defined(_AIX) ++#if defined(__GLIBC__) && !defined(__UCLIBC__) && !defined(_AIX) + std::string::size_type search_from = 0; + while (search_from < text->size()) { + // Look for the start of a mangled symbol, from search_from. +@@ -121,7 +121,7 @@ void DemangleSymbols(std::string* text) { + search_from = mangled_start + 2; + } + } +-#endif // !defined(__UCLIBC__) && !defined(_AIX) ++#endif // defined(__GLIBC__) && !defined(__UCLIBC__) && !defined(_AIX) + } + #endif // !defined(USE_SYMBOLIZE) + +@@ -133,7 +133,7 @@ class BacktraceOutputHandler { + virtual ~BacktraceOutputHandler() = default; + }; + +-#if !defined(__UCLIBC__) && !defined(_AIX) ++#if defined(__GLIBC__) && !defined(__UCLIBC__) && !defined(_AIX) + void OutputPointer(void* pointer, BacktraceOutputHandler* handler) { + // This should be more than enough to store a 64-bit number in hex: + // 16 hex digits + 1 for null-terminator. +@@ -216,7 +216,7 @@ void ProcessBacktrace(void* const* trace, + } + #endif // defined(USE_SYMBOLIZE) + } +-#endif // !defined(__UCLIBC__) && !defined(_AIX) ++#endif // defined(__GLIBC__) && !defined(__UCLIBC__) && !defined(_AIX) + + void PrintToStderr(const char* output) { + // NOTE: This code MUST be async-signal safe (it's used by in-process +@@ -828,7 +828,7 @@ size_t CollectStackTrace(void** trace, size_t count) { + // NOTE: This code MUST be async-signal safe (it's used by in-process + // stack dumping signal handler). NO malloc or stdio is allowed here. + +-#if !defined(__UCLIBC__) && !defined(_AIX) ++#if defined(__GLIBC__) && !defined(__UCLIBC__) && !defined(_AIX) + // Though the backtrace API man page does not list any possible negative + // return values, we take no chance. + return base::saturated_cast(backtrace(trace, count)); +@@ -841,13 +841,13 @@ void StackTrace::PrintWithPrefix(const char* prefix_string) const { + // NOTE: This code MUST be async-signal safe (it's used by in-process + // stack dumping signal handler). NO malloc or stdio is allowed here. + +-#if !defined(__UCLIBC__) && !defined(_AIX) ++#if defined(__GLIBC__) && !defined(__UCLIBC__) && !defined(_AIX) + PrintBacktraceOutputHandler handler; + ProcessBacktrace(trace_, count_, prefix_string, &handler); + #endif + } + +-#if !defined(__UCLIBC__) && !defined(_AIX) ++#if defined(__GLIBC__) && !defined(__UCLIBC__) && !defined(_AIX) + void StackTrace::OutputToStreamWithPrefix(std::ostream* os, + const char* prefix_string) const { + StreamBacktraceOutputHandler handler(os); +diff --git a/third_party/swiftshader/third_party/llvm-subzero/build/Linux/include/llvm/Config/config.h b/third_party/swiftshader/third_party/llvm-subzero/build/Linux/include/llvm/Config/config.h +index 798f150..97acc7c 100644 +--- a/third_party/swiftshader/third_party/llvm-subzero/build/Linux/include/llvm/Config/config.h ++++ b/third_party/swiftshader/third_party/llvm-subzero/build/Linux/include/llvm/Config/config.h +@@ -14,7 +14,7 @@ + #define ENABLE_CRASH_OVERRIDES 1 + + /* Define to 1 if you have the `backtrace' function. */ +-#define HAVE_BACKTRACE 1 ++/* #undef HAVE_BACKTRACE */ + + /* Define to 1 if you have the header file. */ + /* #undef HAVE_CRASHREPORTERCLIENT_H */ +@@ -55,7 +55,7 @@ + #define HAVE_ERRNO_H 1 + + /* Define to 1 if you have the header file. */ +-#define HAVE_EXECINFO_H 1 ++/* #undef HAVE_EXECINFO_H */ + + /* Define to 1 if you have the header file. */ + #define HAVE_FCNTL_H 1 diff --git a/srcpkgs/electron8/files/musl-patches/chromium-musl_fpstate_t.patch.patch b/srcpkgs/electron8/files/musl-patches/chromium-musl_fpstate_t.patch.patch new file mode 100644 index 00000000000..d8c41ccd9a0 --- /dev/null +++ b/srcpkgs/electron8/files/musl-patches/chromium-musl_fpstate_t.patch.patch @@ -0,0 +1,48 @@ +diff --git a/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc b/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc +index 6ee6cc1..a8f9ccc 100644 +--- a/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc ++++ b/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc +@@ -49,7 +49,7 @@ uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + } + + void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc, +- const struct _libc_fpstate* fp) { ++ const struct _fpstate* fp) { + const greg_t* regs = uc->uc_mcontext.gregs; + + out->context_flags = MD_CONTEXT_X86_FULL | +@@ -97,7 +97,7 @@ uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { + } + + void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc, +- const struct _libc_fpstate* fpregs) { ++ const struct _fpstate* fpregs) { + const greg_t* regs = uc->uc_mcontext.gregs; + + out->context_flags = MD_CONTEXT_AMD64_FULL; +diff --git a/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.h b/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.h +index f830618..f3dde1f 100644 +--- a/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.h ++++ b/third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.h +@@ -50,7 +50,7 @@ struct UContextReader { + // info: the collection of register structures. + #if defined(__i386__) || defined(__x86_64) + static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc, +- const struct _libc_fpstate* fp); ++ const struct _fpstate* fp); + #elif defined(__aarch64__) + static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc, + const struct fpsimd_context* fpregs); +diff --git a/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer.h b/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer.h +index d1dc331..d1cc562 100644 +--- a/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer.h ++++ b/third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer.h +@@ -48,7 +48,7 @@ class ExceptionHandler; + #if defined(__aarch64__) + typedef struct fpsimd_context fpstate_t; + #elif !defined(__ARM_EABI__) && !defined(__mips__) +-typedef struct _libc_fpstate fpstate_t; ++typedef struct _fpstate fpstate_t; + #endif + + // These entries store a list of memory regions that the client wants included diff --git a/srcpkgs/electron8/files/musl-patches/chromium-musl_getcontext.patch.patch b/srcpkgs/electron8/files/musl-patches/chromium-musl_getcontext.patch.patch new file mode 100644 index 00000000000..7697243a910 --- /dev/null +++ b/srcpkgs/electron8/files/musl-patches/chromium-musl_getcontext.patch.patch @@ -0,0 +1,25 @@ +diff --git a/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc b/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc +index b895f6d..4f13352 100644 +--- a/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc ++++ b/third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc +@@ -490,7 +490,9 @@ bool ExceptionHandler::SimulateSignalDelivery(int sig) { + siginfo.si_code = SI_USER; + siginfo.si_pid = getpid(); + ucontext_t context; ++#if defined(__GLIBC__) + getcontext(&context); ++#endif + return HandleSignal(sig, &siginfo, &context); + } + +@@ -675,8 +677,10 @@ bool ExceptionHandler::WriteMinidump() { + sys_prctl(PR_SET_DUMPABLE, 1, 0, 0, 0); + + CrashContext context; ++#if defined(__GLIBC__) + int getcontext_result = getcontext(&context.context); + if (getcontext_result) ++#endif + return false; + + #if defined(__i386__) diff --git a/srcpkgs/electron8/files/musl-patches/chromium-musl_mallinfo.patch.patch b/srcpkgs/electron8/files/musl-patches/chromium-musl_mallinfo.patch.patch new file mode 100644 index 00000000000..941313e4939 --- /dev/null +++ b/srcpkgs/electron8/files/musl-patches/chromium-musl_mallinfo.patch.patch @@ -0,0 +1,61 @@ +diff --git a/base/process/process_metrics_posix.cc b/base/process/process_metrics_posix.cc +index 044bd8d..0521321 100644 +--- a/base/process/process_metrics_posix.cc ++++ b/base/process/process_metrics_posix.cc +@@ -110,14 +110,14 @@ size_t ProcessMetrics::GetMallocUsage() { + malloc_statistics_t stats = {0}; + malloc_zone_statistics(nullptr, &stats); + return stats.size_in_use; +-#elif defined(OS_LINUX) || defined(OS_ANDROID) ++#elif (defined(OS_LINUX) && defined(__GLIBC__)) || defined(OS_ANDROID) + struct mallinfo minfo = mallinfo(); + #if BUILDFLAG(USE_TCMALLOC) + return minfo.uordblks; + #else + return minfo.hblkhd + minfo.arena; + #endif +-#elif defined(OS_FUCHSIA) ++#else + // TODO(fuchsia): Not currently exposed. https://crbug.com/735087. + return 0; + #endif +diff --git a/base/trace_event/malloc_dump_provider.cc b/base/trace_event/malloc_dump_provider.cc +index e89597c..eca258c 100644 +--- a/base/trace_event/malloc_dump_provider.cc ++++ b/base/trace_event/malloc_dump_provider.cc +@@ -132,7 +132,7 @@ bool MallocDumpProvider::OnMemoryDump(const MemoryDumpArgs& args, + } + #elif defined(OS_FUCHSIA) + // TODO(fuchsia): Port, see https://crbug.com/706592. +-#else ++#elif defined(OS_LINUX) && defined(__GLIBC__) + struct mallinfo info = mallinfo(); + DCHECK_GE(info.arena + info.hblkhd, info.uordblks); + +diff --git a/third_party/swiftshader/third_party/llvm-subzero/build/Linux/include/llvm/Config/config.h b/third_party/swiftshader/third_party/llvm-subzero/build/Linux/include/llvm/Config/config.h +index aa98242..97acc7c 100644 +--- a/third_party/swiftshader/third_party/llvm-subzero/build/Linux/include/llvm/Config/config.h ++++ b/third_party/swiftshader/third_party/llvm-subzero/build/Linux/include/llvm/Config/config.h +@@ -130,7 +130,7 @@ + /* #undef HAVE_MALLCTL */ + + /* Define to 1 if you have the `mallinfo' function. */ +-#define HAVE_MALLINFO 1 ++/* #undef HAVE_MALLINFO */ + + /* Define to 1 if you have the header file. */ + #define HAVE_MALLOC_H 1 +diff --git a/third_party/swiftshader/third_party/llvm-7.0/configs/linux/include/llvm/Config/config.h b/third_party/swiftshader/third_party/llvm-7.0/configs/linux/include/llvm/Config/config.h +index 6e17020..d4a9ed0 100644 +--- a/third_party/swiftshader/third_party/llvm-7.0/configs/linux/include/llvm/Config/config.h ++++ b/third_party/swiftshader/third_party/llvm-7.0/configs/linux/include/llvm/Config/config.h +@@ -122,7 +122,7 @@ + /* #undef HAVE_MALLCTL */ + + /* Define to 1 if you have the `mallinfo' function. */ +-#define HAVE_MALLINFO 1 ++/* #undef HAVE_MALLINFO */ + + /* Define to 1 if you have the header file. */ + #define HAVE_MALLOC_H 1 + diff --git a/srcpkgs/electron8/files/musl-patches/chromium-musl_pread_pwrite64.patch.patch b/srcpkgs/electron8/files/musl-patches/chromium-musl_pread_pwrite64.patch.patch new file mode 100644 index 00000000000..2aeaaeb7593 --- /dev/null +++ b/srcpkgs/electron8/files/musl-patches/chromium-musl_pread_pwrite64.patch.patch @@ -0,0 +1,18 @@ +diff --git a/third_party/lss/linux_syscall_support.h b/third_party/lss/linux_syscall_support.h +index 5d9c2e8..2682349 100644 +--- a/third_party/lss/linux_syscall_support.h ++++ b/third_party/lss/linux_syscall_support.h +@@ -166,6 +166,13 @@ extern "C" { + # undef __NR_waitpid + #endif + ++#ifdef pread64 ++#undef pread64 ++#endif ++#ifdef pwrite64 ++#undef pwrite64 ++#endif ++ + /* As glibc often provides subtly incompatible data structures (and implicit + * wrapper functions that convert them), we provide our own kernel data + * structures for use by the system calls. diff --git a/srcpkgs/electron8/files/musl-patches/chromium-musl_push_back.patch.patch b/srcpkgs/electron8/files/musl-patches/chromium-musl_push_back.patch.patch new file mode 100644 index 00000000000..cff340287da --- /dev/null +++ b/srcpkgs/electron8/files/musl-patches/chromium-musl_push_back.patch.patch @@ -0,0 +1,13 @@ +diff --git a/net/socket/udp_socket_posix.cc b/net/socket/udp_socket_posix.cc +index 08bf79c..3ee5353 100644 +--- a/net/socket/udp_socket_posix.cc ++++ b/net/socket/udp_socket_posix.cc +@@ -1194,7 +1194,7 @@ SendResult UDPSocketPosixSender::InternalSendmmsgBuffers( + msg_iov->push_back({const_cast(buffer->data()), buffer->length()}); + msgvec->reserve(buffers.size()); + for (size_t j = 0; j < buffers.size(); j++) +- msgvec->push_back({{nullptr, 0, &msg_iov[j], 1, nullptr, 0, 0}, 0}); ++ msgvec->push_back({{nullptr, 0, &msg_iov[j], 1, 0, nullptr, 0, 0, 0}, 0}); + int result = HANDLE_EINTR(Sendmmsg(fd, &msgvec[0], buffers.size(), 0)); + SendResult send_result(0, 0, std::move(buffers)); + if (result < 0) { diff --git a/srcpkgs/electron8/files/musl-patches/chromium-musl_si_fields.patch.patch b/srcpkgs/electron8/files/musl-patches/chromium-musl_si_fields.patch.patch new file mode 100644 index 00000000000..fdbefd27e2b --- /dev/null +++ b/srcpkgs/electron8/files/musl-patches/chromium-musl_si_fields.patch.patch @@ -0,0 +1,13 @@ +diff --git a/sandbox/linux/seccomp-bpf/trap.cc b/sandbox/linux/seccomp-bpf/trap.cc +index 003708d..b21414f 100644 +--- a/sandbox/linux/seccomp-bpf/trap.cc ++++ b/sandbox/linux/seccomp-bpf/trap.cc +@@ -168,7 +168,7 @@ void Trap::SigSys(int nr, LinuxSigInfo* info, ucontext_t* ctx) { + // most versions of glibc don't include this information in siginfo_t. So, + // we need to explicitly copy it into a arch_sigsys structure. + struct arch_sigsys sigsys; +- memcpy(&sigsys, &info->_sifields, sizeof(sigsys)); ++ memcpy(&sigsys, &info->__si_fields, sizeof(sigsys)); + + #if defined(__mips__) + // When indirect syscall (syscall(__NR_foo, ...)) is made on Mips, the diff --git a/srcpkgs/electron8/files/musl-patches/chromium-musl_stack_size.patch.patch b/srcpkgs/electron8/files/musl-patches/chromium-musl_stack_size.patch.patch new file mode 100644 index 00000000000..a4df7a3729b --- /dev/null +++ b/srcpkgs/electron8/files/musl-patches/chromium-musl_stack_size.patch.patch @@ -0,0 +1,41 @@ +diff --git a/third_party/blink/renderer/platform/wtf/stack_util.cc b/third_party/blink/renderer/platform/wtf/stack_util.cc +index b242164..1a0b519 100644 +--- a/third_party/blink/renderer/platform/wtf/stack_util.cc ++++ b/third_party/blink/renderer/platform/wtf/stack_util.cc +@@ -29,7 +29,7 @@ size_t GetUnderestimatedStackSize() { + // FIXME: On Mac OSX and Linux, this method cannot estimate stack size + // correctly for the main thread. + +-#if defined(__GLIBC__) || defined(OS_ANDROID) || defined(OS_FREEBSD) || \ ++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FREEBSD) || \ + defined(OS_FUCHSIA) + // pthread_getattr_np() can fail if the thread is not invoked by + // pthread_create() (e.g., the main thread of blink_unittests). +@@ -55,6 +55,9 @@ size_t GetUnderestimatedStackSize() { + pthread_attr_destroy(&attr); + #endif + ++#if defined(OS_LINUX) && !defined(__GLIBC__) ++ return 0; ++#else + // Return a 512k stack size, (conservatively) assuming the following: + // - that size is much lower than the pthreads default (x86 pthreads has a 2M + // default.) +@@ -62,6 +65,8 @@ size_t GetUnderestimatedStackSize() { + // low as 512k. + // + return 512 * 1024; ++#endif ++ + #elif defined(OS_MACOSX) + // pthread_get_stacksize_np() returns too low a value for the main thread on + // OSX 10.9, +@@ -97,7 +102,7 @@ return Threading::ThreadStackSize(); + } + + void* GetStackStart() { +-#if defined(__GLIBC__) || defined(OS_ANDROID) || defined(OS_FREEBSD) || \ ++#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_FREEBSD) || \ + defined(OS_FUCHSIA) + pthread_attr_t attr; + int error; diff --git a/srcpkgs/electron8/files/musl-patches/chromium-musl_stack_trace.patch.patch b/srcpkgs/electron8/files/musl-patches/chromium-musl_stack_trace.patch.patch new file mode 100644 index 00000000000..9a1f2b04458 --- /dev/null +++ b/srcpkgs/electron8/files/musl-patches/chromium-musl_stack_trace.patch.patch @@ -0,0 +1,44 @@ +diff --git a/base/debug/stack_trace.cc b/base/debug/stack_trace.cc +index d8ca822..ffe1f08 100644 +--- a/base/debug/stack_trace.cc ++++ b/base/debug/stack_trace.cc +@@ -225,7 +225,9 @@ void StackTrace::Print() const { + } + + void StackTrace::OutputToStream(std::ostream* os) const { ++#if defined(__GLIBC__) && !defined(__UCLIBC__) && !defined(_AIX) + OutputToStreamWithPrefix(os, nullptr); ++#endif + } + + std::string StackTrace::ToString() const { +@@ -233,14 +233,14 @@ std::string StackTrace::ToString() const { + } + std::string StackTrace::ToStringWithPrefix(const char* prefix_string) const { + std::stringstream stream; +-#if !defined(__UCLIBC__) && !defined(_AIX) ++#if defined(__GLIBC__) && !defined(__UCLIBC__) && !defined(_AIX) + OutputToStreamWithPrefix(&stream, prefix_string); + #endif + return stream.str(); + } + + std::ostream& operator<<(std::ostream& os, const StackTrace& s) { +-#if !defined(__UCLIBC__) & !defined(_AIX) ++#if defined(__GLIBC__) && !defined(__UCLIBC__) & !defined(_AIX) + s.OutputToStream(&os); + #else + os << "StackTrace::OutputToStream not implemented."; +diff --git a/base/logging.cc b/base/logging.cc +index 36b8bfc..dd830fe 100644 +--- a/base/logging.cc ++++ b/base/logging.cc +@@ -607,7 +607,7 @@ LogMessage::LogMessage(const char* file, int line, LogSeverity severity, + LogMessage::~LogMessage() { + size_t stack_start = stream_.tellp(); + #if !defined(OFFICIAL_BUILD) && !defined(OS_NACL) && !defined(__UCLIBC__) && \ +- !defined(OS_AIX) ++ !defined(OS_AIX) && defined(__GLIBC__) + if (severity_ == LOG_FATAL && !base::debug::BeingDebugged()) { + // Include a stack trace on a fatal, unless a debugger is attached. + base::debug::StackTrace stack_trace; diff --git a/srcpkgs/electron8/files/musl-patches/chromium-musl_tcp_listen.patch.patch b/srcpkgs/electron8/files/musl-patches/chromium-musl_tcp_listen.patch.patch new file mode 100644 index 00000000000..fa62317b11a --- /dev/null +++ b/srcpkgs/electron8/files/musl-patches/chromium-musl_tcp_listen.patch.patch @@ -0,0 +1,14 @@ +diff --git a/content/public/common/socket_permission_request.h b/content/public/common/socket_permission_request.h +index 7316621..6171219 100644 +--- a/content/public/common/socket_permission_request.h ++++ b/content/public/common/socket_permission_request.h +@@ -9,6 +9,9 @@ + + #include + ++#ifdef TCP_LISTEN ++#undef TCP_LISTEN ++#endif + + namespace content { + diff --git a/srcpkgs/electron8/files/musl-patches/chromium-musl_wordsize.patch.patch b/srcpkgs/electron8/files/musl-patches/chromium-musl_wordsize.patch.patch new file mode 100644 index 00000000000..6208cffafbe --- /dev/null +++ b/srcpkgs/electron8/files/musl-patches/chromium-musl_wordsize.patch.patch @@ -0,0 +1,24 @@ +diff --git a/third_party/breakpad/breakpad/src/common/linux/elf_core_dump.h b/third_party/breakpad/breakpad/src/common/linux/elf_core_dump.h +index d03c7a8..78ca9dd 100644 +--- a/third_party/breakpad/breakpad/src/common/linux/elf_core_dump.h ++++ b/third_party/breakpad/breakpad/src/common/linux/elf_core_dump.h +@@ -36,6 +36,7 @@ + #include + #include + #include ++#include + + #include "common/memory_range.h" + +@@ -51,9 +52,9 @@ class ElfCoreDump { + typedef ElfW(Phdr) Phdr; + typedef ElfW(Word) Word; + typedef ElfW(Addr) Addr; +-#if __WORDSIZE == 32 ++#if ULONG_MAX == 0xffffffff + static const int kClass = ELFCLASS32; +-#elif __WORDSIZE == 64 ++#elif ULONG_MAX == 0xffffffffffffffff + static const int kClass = ELFCLASS64; + #else + #error "Unsupported __WORDSIZE for ElfCoreDump." diff --git a/srcpkgs/electron8/files/patches/chromium-chromium_atk_optional.patch.patch b/srcpkgs/electron8/files/patches/chromium-chromium_atk_optional.patch.patch new file mode 100644 index 00000000000..27b56251ec3 --- /dev/null +++ b/srcpkgs/electron8/files/patches/chromium-chromium_atk_optional.patch.patch @@ -0,0 +1,17 @@ +diff --git a/build/config/ui.gni b/build/config/ui.gni +index 547b42f..966b00c 100644 +--- a/build/config/ui.gni ++++ b/build/config/ui.gni +@@ -51,8 +51,10 @@ if (use_ozone) { + use_glib = false + } + +-# Whether to use atk, the Accessibility ToolKit library +-use_atk = is_desktop_linux && use_x11 ++declare_args() { ++ # Whether to use atk, the Accessibility ToolKit library ++ use_atk = is_desktop_linux && use_x11 ++} + # ============================================= + # PLEASE DO NOT ADD MORE FLAGS TO THIS FILE + # ============================================= diff --git a/srcpkgs/electron8/files/patches/chromium-fix-building-with-unbundled-libxml.patch b/srcpkgs/electron8/files/patches/chromium-fix-building-with-unbundled-libxml.patch new file mode 100644 index 00000000000..7b934376e6e --- /dev/null +++ b/srcpkgs/electron8/files/patches/chromium-fix-building-with-unbundled-libxml.patch @@ -0,0 +1,127 @@ +From d3afade220ddb307e16a6dd4f2b0ec88b2af91e7 Mon Sep 17 00:00:00 2001 +From: Stephan Hartmann +Date: Tue, 28 Jan 2020 18:16:54 +0000 +Subject: [PATCH] Fix building with unbundled libxml + +Add new targets to libxml.gn that were added in + https://chromium-review.googlesource.com/c/chromium/src/+/1894877 +Adjust includes to use system libxml headers too + +Bug: 1043042 +Change-Id: I948c063e212e49b9e7f42fed2b8bf7f4af042ca7 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2007110 +Reviewed-by: Robert Sesek +Reviewed-by: Daniel Cheng +Reviewed-by: Nico Weber +Commit-Queue: Robert Sesek +Cr-Commit-Position: refs/heads/master@{#735957} +--- + build/linux/unbundle/libxml.gn | 41 ++++++++++++++++++++-- + third_party/libxml/chromium/libxml_utils.h | 4 +-- + third_party/libxml/chromium/xml_reader.cc | 3 +- + third_party/libxml/chromium/xml_writer.cc | 3 +- + 4 files changed, 45 insertions(+), 6 deletions(-) + +diff --git a/build/linux/unbundle/libxml.gn b/build/linux/unbundle/libxml.gn +index c481bd3547b..3587881eea8 100644 +--- a/build/linux/unbundle/libxml.gn ++++ b/build/linux/unbundle/libxml.gn +@@ -8,11 +8,48 @@ pkg_config("system_libxml") { + packages = [ "libxml-2.0" ] + } + +-static_library("libxml") { ++source_set("libxml") { ++ public_configs = [ ":system_libxml" ] ++} ++ ++static_library("libxml_utils") { ++ # Do not expand this visibility list without first consulting with the ++ # Security Team. ++ visibility = [ ++ ":xml_reader", ++ ":xml_writer", ++ "//base/test:test_support", ++ "//services/data_decoder:xml_parser_fuzzer", ++ ] + sources = [ + "chromium/libxml_utils.cc", + "chromium/libxml_utils.h", + ] +- + public_configs = [ ":system_libxml" ] + } ++ ++static_library("xml_reader") { ++ # Do not expand this visibility list without first consulting with the ++ # Security Team. ++ visibility = [ ++ "//base/test:test_support", ++ "//components/policy/core/common:unit_tests", ++ "//services/data_decoder:*", ++ "//tools/traffic_annotation/auditor:auditor_sources", ++ ] ++ sources = [ ++ "chromium/xml_reader.cc", ++ "chromium/xml_reader.h", ++ ] ++ deps = [ ":libxml_utils" ] ++} ++ ++static_library("xml_writer") { ++ # The XmlWriter is considered safe to use from any target. ++ visibility = [ "*" ] ++ sources = [ ++ "chromium/xml_writer.cc", ++ "chromium/xml_writer.h", ++ ] ++ deps = [ ":libxml_utils" ] ++} +diff --git a/third_party/libxml/chromium/libxml_utils.h b/third_party/libxml/chromium/libxml_utils.h +index ff969fab540..8b2383f9c8b 100644 +--- a/third_party/libxml/chromium/libxml_utils.h ++++ b/third_party/libxml/chromium/libxml_utils.h +@@ -5,9 +5,9 @@ + #ifndef THIRD_PARTY_LIBXML_CHROMIUM_LIBXML_UTILS_H_ + #define THIRD_PARTY_LIBXML_CHROMIUM_LIBXML_UTILS_H_ + +-#include ++#include + +-#include "third_party/libxml/src/include/libxml/xmlreader.h" ++#include + + // libxml uses a global error function pointer for reporting errors. + // A ScopedXmlErrorFunc object lets you change the global error pointer +diff --git a/third_party/libxml/chromium/xml_reader.cc b/third_party/libxml/chromium/xml_reader.cc +index 92464f4cbcc..899ccefb7c8 100644 +--- a/third_party/libxml/chromium/xml_reader.cc ++++ b/third_party/libxml/chromium/xml_reader.cc +@@ -4,10 +4,11 @@ + + #include "third_party/libxml/chromium/xml_reader.h" + ++#include ++ + #include + + #include "third_party/libxml/chromium/libxml_utils.h" +-#include "third_party/libxml/src/include/libxml/xmlreader.h" + + using internal::XmlStringToStdString; + +diff --git a/third_party/libxml/chromium/xml_writer.cc b/third_party/libxml/chromium/xml_writer.cc +index 51fce8ebeb1..7c58031fe2d 100644 +--- a/third_party/libxml/chromium/xml_writer.cc ++++ b/third_party/libxml/chromium/xml_writer.cc +@@ -4,8 +4,9 @@ + + #include "third_party/libxml/chromium/xml_writer.h" + ++#include ++ + #include "third_party/libxml/chromium/libxml_utils.h" +-#include "third_party/libxml/src/include/libxml/xmlwriter.h" + + XmlWriter::XmlWriter() : writer_(nullptr), buffer_(nullptr) {} + diff --git a/srcpkgs/electron8/files/patches/chromium-fix-sucess-definition.patch b/srcpkgs/electron8/files/patches/chromium-fix-sucess-definition.patch new file mode 100644 index 00000000000..4dc024693e6 --- /dev/null +++ b/srcpkgs/electron8/files/patches/chromium-fix-sucess-definition.patch @@ -0,0 +1,15 @@ +X11.h defines a macro called "Success", which is 0. This breaks an enum +that is generated in Chromium that has a member "Success", so undefine +it. +--- a/chrome/browser/ui/libgtkui/select_file_dialog_impl_kde.cc.orig 2020-04-27 18:42:15.457297544 +0200 ++++ b/chrome/browser/ui/libgtkui/select_file_dialog_impl_kde.cc 2020-04-27 18:42:21.760454304 +0200 +@@ -24,7 +24,9 @@ + #include "base/task/post_task.h" + #include "base/task/task_traits.h" + #include "base/threading/thread_restrictions.h" ++#undef Success + #include "chrome/browser/ui/libgtkui/select_file_dialog_impl.h" ++#define Success 0 + #include "content/public/browser/browser_thread.h" + #include "ui/aura/window_tree_host.h" + #include "ui/base/l10n/l10n_util.h" diff --git a/srcpkgs/electron8/files/patches/chromium-gn_bootstrap_ninja.patch b/srcpkgs/electron8/files/patches/chromium-gn_bootstrap_ninja.patch new file mode 100644 index 00000000000..e9f95f09cae --- /dev/null +++ b/srcpkgs/electron8/files/patches/chromium-gn_bootstrap_ninja.patch @@ -0,0 +1,32 @@ +Patch by Michael Forney + +Already merged https://chromium-review.googlesource.com/c/chromium/src/+/1975453 + +--- a/tools/gn/bootstrap/bootstrap.py ++++ b/tools/gn/bootstrap/bootstrap.py +@@ -70,6 +70,7 @@ + out_dir = os.path.join(SRC_ROOT, build_rel) + gn_path = options.output or os.path.join(out_dir, 'gn') + gn_build_dir = os.path.join(out_dir, 'gn_build') ++ ninja_binary = os.environ.get('NINJA', 'ninja') + + # TODO(thomasanderson): Remove this once Ubuntu Trusty reaches EOL, or when + # Chromium's infrastructure is upgraded from Trusty to Xenial, whichever comes +@@ -90,7 +91,7 @@ + os.environ.get('CFLAGS', '').split() + + os.environ.get('CXXFLAGS', '').split()), + ]) + '\n') +- subprocess.check_call(['ninja', '-C', libcxx_dir]) ++ subprocess.check_call([ninja_binary, '-C', libcxx_dir]) + shutil.copy2(os.path.join(gn_build_dir, 'libc++.gn.so'), out_dir) + + def append_to_env(var, vals): +@@ -120,7 +121,7 @@ + shutil.copy2( + os.path.join(BOOTSTRAP_DIR, 'last_commit_position.h'), gn_build_dir) + subprocess.check_call( +- ['ninja', '-C', gn_build_dir, 'gn', '-w', 'dupbuild=err']) ++ [ninja_binary, '-C', gn_build_dir, '-w', 'dupbuild=err', 'gn']) + shutil.copy2(os.path.join(gn_build_dir, 'gn'), gn_path) + + if not options.skip_generate_buildfiles: diff --git a/srcpkgs/electron8/files/patches/chromium-libc_malloc.patch b/srcpkgs/electron8/files/patches/chromium-libc_malloc.patch new file mode 100644 index 00000000000..27cd2cefc46 --- /dev/null +++ b/srcpkgs/electron8/files/patches/chromium-libc_malloc.patch @@ -0,0 +1,26 @@ +--- a/base/process/memory_linux.cc.orig 2017-09-15 08:41:43.000000000 +0000 ++++ b/base/process/memory_linux.cc 2017-09-15 08:44:39.804995469 +0000 +@@ -21,6 +21,12 @@ + #include "third_party/tcmalloc/chromium/src/gperftools/tcmalloc.h" + #endif + ++#if defined(LIBC_GLIBC) ++extern "C" { ++extern void *__libc_malloc(size_t size); ++} ++#endif ++ + namespace base { + + size_t g_oom_size = 0U; +--- a/base/process/memory_linux.cc.orig 2017-09-15 08:46:55.000000000 +0000 ++++ b/base/process/memory_linux.cc 2017-09-15 08:51:34.422016858 +0000 +@@ -107,7 +107,7 @@ + (!defined(LIBC_GLIBC) && !defined(USE_TCMALLOC)) + *result = malloc(size); + #elif defined(LIBC_GLIBC) && !defined(USE_TCMALLOC) +- *result = __libc_malloc(size); ++ *result = ::__libc_malloc(size); + #elif defined(USE_TCMALLOC) + *result = tc_malloc_skip_new_handler(size); + #endif diff --git a/srcpkgs/electron8/files/patches/chromium-upstream-0001-logs-Implement-size-limit-for-user-logs.patch b/srcpkgs/electron8/files/patches/chromium-upstream-0001-logs-Implement-size-limit-for-user-logs.patch new file mode 100644 index 00000000000..2dd727be7a8 --- /dev/null +++ b/srcpkgs/electron8/files/patches/chromium-upstream-0001-logs-Implement-size-limit-for-user-logs.patch @@ -0,0 +1,275 @@ +From 599754e17c97b75d1d7ac4aab37da4484aed0024 Mon Sep 17 00:00:00 2001 +From: Joon Ahn +Date: Sat, 18 Apr 2020 20:03:12 +0000 +Subject: [PATCH] logs: Implement size limit for user logs + +Impose 1MiB size limit for user logs and read the logs from back. + +(cherry picked from commit a0b2e0f8bba28943253e6b3ac4d11824219b6178) + +Bug: chromium:1066205 +Change-Id: I4c7a2de6f93d87ee0a5a2295dd25b32ec372ac46 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2133427 +Reviewed-by: Ahmed Fakhry +Reviewed-by: Ian Barkley-Yeung +Commit-Queue: Joon Ahn +Cr-Original-Commit-Position: refs/heads/master@{#757693} +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2155364 +Reviewed-by: Bernie Thompson +Commit-Queue: Kyle Williams +Cr-Commit-Position: refs/branch-heads/3987_158@{#3} +Cr-Branched-From: af496874d27c92a13415a3a776cc29f9f5ee4e3e-refs/branch-heads/3987@{#1019} +Cr-Branched-From: c4e8da9871cc266be74481e212f3a5252972509d-refs/heads/master@{#722274} +--- + chrome/browser/chromeos/BUILD.gn | 1 + + .../system_logs/debug_daemon_log_source.cc | 77 ++++++++++++++- + .../system_logs/debug_daemon_log_source.h | 9 ++ + .../debug_daemon_log_source_unittest.cc | 95 +++++++++++++++++++ + 4 files changed, 178 insertions(+), 4 deletions(-) + create mode 100644 chrome/browser/chromeos/system_logs/debug_daemon_log_source_unittest.cc + +diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn +index 7e17fab96c1..327ffa0ea4e 100644 +--- a/chrome/browser/chromeos/BUILD.gn ++++ b/chrome/browser/chromeos/BUILD.gn +@@ -2970,6 +2970,7 @@ source_set("unit_tests") { + "system/device_disabling_manager_unittest.cc", + "system/procfs_util_unittest.cc", + "system/user_removal_manager_unittest.cc", ++ "system_logs/debug_daemon_log_source_unittest.cc", + "system_logs/single_debug_daemon_log_source_unittest.cc", + "system_logs/single_log_file_log_source_unittest.cc", + "tether/tether_service_unittest.cc", +diff --git a/chrome/browser/chromeos/system_logs/debug_daemon_log_source.cc b/chrome/browser/chromeos/system_logs/debug_daemon_log_source.cc +index 7cd7e81f01d..3853718fef3 100644 +--- a/chrome/browser/chromeos/system_logs/debug_daemon_log_source.cc ++++ b/chrome/browser/chromeos/system_logs/debug_daemon_log_source.cc +@@ -31,6 +31,7 @@ namespace { + constexpr char kNotAvailable[] = ""; + constexpr char kRoutesKeyName[] = "routes"; + constexpr char kNetworkStatusKeyName[] = "network-status"; ++constexpr char kLogTruncated[] = "\n"; + + // List of user log files that Chrome reads directly as these logs are generated + // by Chrome itself. +@@ -48,6 +49,68 @@ constexpr struct UserLogs { + {"logout-times", "logout-times"}, + }; + ++// Buffer size for user logs in bytes. Given that maximum feedback report size ++// is ~7M and that majority of log files are under 1M, we set a per-file limit ++// of 1MiB. ++const int64_t kMaxLogSize = 1024 * 1024; ++ ++} // namespace ++ ++bool ReadEndOfFile(const base::FilePath& path, ++ std::string* contents, ++ size_t max_size) { ++ if (!contents) { ++ LOG(ERROR) << "contents buffer is null."; ++ return false; ++ } ++ ++ if (path.ReferencesParent()) { ++ LOG(ERROR) << "ReadEndOfFile can't be called on file paths with parent " ++ "references."; ++ return false; ++ } ++ ++ base::ScopedFILE fp(base::OpenFile(path, "r")); ++ if (!fp) { ++ PLOG(ERROR) << "Failed to open file " << path.value(); ++ return false; ++ } ++ ++ std::unique_ptr chunk(new char[max_size]); ++ std::unique_ptr last_chunk(new char[max_size]); ++ chunk[0] = '\0'; ++ last_chunk[0] = '\0'; ++ ++ size_t bytes_read = 0; ++ ++ // Since most logs are not seekable, read until the end keeping tracking of ++ // last two chunks. ++ while ((bytes_read = fread(chunk.get(), 1, max_size, fp.get())) == max_size) { ++ last_chunk.swap(chunk); ++ chunk[0] = '\0'; ++ } ++ ++ if (last_chunk[0] == '\0') { ++ // File is smaller than max_size ++ contents->assign(chunk.get(), bytes_read); ++ } else if (bytes_read == 0) { ++ // File is exactly max_size or a multiple of max_size ++ contents->assign(last_chunk.get(), max_size); ++ } else { ++ // Number of bytes to keep from last_chunk ++ size_t bytes_from_last = max_size - bytes_read; ++ ++ // Shift left last_chunk by size of chunk and fit it in the back of ++ // last_chunk. ++ memmove(last_chunk.get(), last_chunk.get() + bytes_read, bytes_from_last); ++ memcpy(last_chunk.get() + bytes_from_last, chunk.get(), bytes_read); ++ ++ contents->assign(last_chunk.get(), max_size); ++ } ++ ++ return true; ++} ++ + // Reads the contents of the user log files listed in |kUserLogs| and adds them + // to the |response| parameter. + void ReadUserLogFiles(const std::vector& profile_dirs, +@@ -56,8 +119,16 @@ void ReadUserLogFiles(const std::vector& profile_dirs, + std::string profile_prefix = "Profile[" + base::NumberToString(i) + "] "; + for (const auto& log : kUserLogs) { + std::string value; +- const bool read_success = base::ReadFileToString( +- profile_dirs[i].Append(log.log_file_relative_path), &value); ++ const bool read_success = ++ ReadEndOfFile(profile_dirs[i].Append(log.log_file_relative_path), ++ &value, kMaxLogSize); ++ ++ if (read_success && value.length() == kMaxLogSize) { ++ value.replace(0, strlen(kLogTruncated), kLogTruncated); ++ ++ LOG(WARNING) << "Large log file was likely truncated: " ++ << log.log_file_relative_path; ++ } + + response->emplace( + profile_prefix + log.log_key, +@@ -66,8 +137,6 @@ void ReadUserLogFiles(const std::vector& profile_dirs, + } + } + +-} // namespace +- + DebugDaemonLogSource::DebugDaemonLogSource(bool scrub) + : SystemLogsSource("DebugDemon"), + response_(new SystemLogsResponse()), +diff --git a/chrome/browser/chromeos/system_logs/debug_daemon_log_source.h b/chrome/browser/chromeos/system_logs/debug_daemon_log_source.h +index 008fc04cfb0..b4229833f52 100644 +--- a/chrome/browser/chromeos/system_logs/debug_daemon_log_source.h ++++ b/chrome/browser/chromeos/system_logs/debug_daemon_log_source.h +@@ -18,6 +18,15 @@ + + namespace system_logs { + ++// Reads the file at |path| into |contents| and returns true on success and ++// false on error. For security reasons a |path| containing path traversal ++// components ('..') is treated as a read error and |contents| is not changed. ++// When the file exceeds |max_size| function returns true with the last ++// |max_size| bytes from the file. ++bool ReadEndOfFile(const base::FilePath& path, ++ std::string* contents, ++ size_t max_size); ++ + // Gathers log data from Debug Daemon. + class DebugDaemonLogSource : public SystemLogsSource { + public: +diff --git a/chrome/browser/chromeos/system_logs/debug_daemon_log_source_unittest.cc b/chrome/browser/chromeos/system_logs/debug_daemon_log_source_unittest.cc +new file mode 100644 +index 00000000000..2116b9cc2b3 +--- /dev/null ++++ b/chrome/browser/chromeos/system_logs/debug_daemon_log_source_unittest.cc +@@ -0,0 +1,95 @@ ++// Copyright (c) 2020 The Chromium Authors. All rights reserved. ++// Use of this source code is governed by a BSD-style license that can be ++// found in the LICENSE file. ++ ++#include "chrome/browser/chromeos/system_logs/debug_daemon_log_source.h" ++ ++#include ++ ++#include "base/files/file_util.h" ++#include "base/files/scoped_file.h" ++#include "base/files/scoped_temp_dir.h" ++#include "base/rand_util.h" ++#include "testing/gtest/include/gtest/gtest.h" ++ ++namespace system_logs { ++ ++class DebugDaemonLogSourceTest : public ::testing::Test { ++ public: ++ void SetUp() override { ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); } ++ ++ base::ScopedTempDir temp_dir_; ++}; ++ ++TEST_F(DebugDaemonLogSourceTest, ReadEndOfFileEmpty) { ++ std::string read_data("should be erased"); ++ ++ base::FilePath file_path = temp_dir_.GetPath().Append("test_empty.txt"); ++ ++ WriteFile(file_path, "", 0); ++ ++ EXPECT_TRUE(ReadEndOfFile(file_path, &read_data, 10)); ++ EXPECT_EQ(0u, read_data.length()); ++} ++ ++TEST_F(DebugDaemonLogSourceTest, ReadEndOfFileSmall) { ++ const char kTestData[] = "0123456789"; // Length of 10 ++ std::string read_data; ++ ++ base::FilePath file_path = temp_dir_.GetPath().Append("test.txt"); ++ ++ WriteFile(file_path, kTestData, strlen(kTestData)); ++ ++ read_data.clear(); ++ EXPECT_TRUE(ReadEndOfFile(file_path, &read_data, 15)); ++ EXPECT_EQ(kTestData, read_data); ++ ++ read_data.clear(); ++ EXPECT_TRUE(ReadEndOfFile(file_path, &read_data, 10)); ++ EXPECT_EQ(kTestData, read_data); ++ ++ read_data.clear(); ++ EXPECT_TRUE(ReadEndOfFile(file_path, &read_data, 2)); ++ EXPECT_EQ("89", read_data); ++ ++ read_data.clear(); ++ EXPECT_TRUE(ReadEndOfFile(file_path, &read_data, 3)); ++ EXPECT_EQ("789", read_data); ++ ++ read_data.clear(); ++ EXPECT_TRUE(ReadEndOfFile(file_path, &read_data, 5)); ++ EXPECT_EQ("56789", read_data); ++} ++ ++TEST_F(DebugDaemonLogSourceTest, ReadEndOfFileMedium) { ++ std::string test_data = base::RandBytesAsString(10000); // 10KB data ++ std::string read_data; ++ ++ const size_t test_size = test_data.length(); ++ ++ base::FilePath file_path = temp_dir_.GetPath().Append("test_med.txt"); ++ ++ WriteFile(file_path, test_data.data(), test_size); ++ ++ read_data.clear(); ++ EXPECT_TRUE(ReadEndOfFile(file_path, &read_data, 15000)); ++ EXPECT_EQ(test_data, read_data); ++ ++ read_data.clear(); ++ EXPECT_TRUE(ReadEndOfFile(file_path, &read_data, 10000)); ++ EXPECT_EQ(test_data, read_data); ++ ++ read_data.clear(); ++ EXPECT_TRUE(ReadEndOfFile(file_path, &read_data, 1000)); ++ EXPECT_EQ(test_data.substr(test_size - 1000, 1000), read_data); ++ ++ read_data.clear(); ++ EXPECT_TRUE(ReadEndOfFile(file_path, &read_data, 300)); ++ EXPECT_EQ(test_data.substr(test_size - 300, 300), read_data); ++ ++ read_data.clear(); ++ EXPECT_TRUE(ReadEndOfFile(file_path, &read_data, 175)); ++ EXPECT_EQ(test_data.substr(test_size - 175, 175), read_data); ++} ++ ++} // namespace system_logs +-- +2.26.2 + diff --git a/srcpkgs/electron8/files/patches/electron-Add-a-script-to-list-patch-targets.patch.patch b/srcpkgs/electron8/files/patches/electron-Add-a-script-to-list-patch-targets.patch.patch new file mode 100644 index 00000000000..916dba9dc3b --- /dev/null +++ b/srcpkgs/electron8/files/patches/electron-Add-a-script-to-list-patch-targets.patch.patch @@ -0,0 +1,42 @@ +From ff4122f236b70c272c746d0c336cdbd588d78cd1 Mon Sep 17 00:00:00 2001 +From: Elvis Pranskevichus +Date: Thu, 12 Dec 2019 16:12:18 -0500 +Subject: [PATCH] Add a script to list patch targets + +--- + script/list_patch_targets.py | 23 +++++++++++++++++++++++ + 1 file changed, 23 insertions(+) + create mode 100755 script/list_patch_targets.py + +diff --git a/script/list_patch_targets.py b/script/list_patch_targets.py +new file mode 100755 +index 000000000..55173bac9 +--- /dev/null ++++ b/script/list_patch_targets.py +@@ -0,0 +1,23 @@ ++#!/usr/bin/env python ++ ++import argparse ++import json ++ ++ ++def parse_args(): ++ parser = argparse.ArgumentParser(description='Apply Electron patches') ++ parser.add_argument('config', nargs='+', ++ type=argparse.FileType('r'), ++ help='patches\' config(s) in the JSON format') ++ return parser.parse_args() ++ ++ ++def main(): ++ configs = parse_args().config ++ for config_json in configs: ++ for patch_dir, repo in json.load(config_json).iteritems(): ++ print(repo) ++ ++ ++if __name__ == '__main__': ++ main() +-- +2.23.0 + diff --git a/srcpkgs/electron8/files/patches/electron-Build-fixes.patch.patch b/srcpkgs/electron8/files/patches/electron-Build-fixes.patch.patch new file mode 100644 index 00000000000..298bfa9bcb2 --- /dev/null +++ b/srcpkgs/electron8/files/patches/electron-Build-fixes.patch.patch @@ -0,0 +1,47 @@ +diff --git a/build/args/release.gn b/build/args/release.gn +index e5017f6e1..59207b389 100644 +--- a/build/args/release.gn ++++ b/build/args/release.gn +@@ -1,6 +1,4 @@ + import("all.gn") +-is_component_build = false +-is_official_build = true + + # This may be guarded behind is_chrome_branded alongside + # proprietary_codecs https://webrtc-review.googlesource.com/c/src/+/36321, +@@ -8,9 +6,3 @@ is_official_build = true + # The initialization of the decoder depends on whether ffmpeg has + # been built with H.264 support. + rtc_use_h264 = proprietary_codecs +- +-# By default, Electron builds ffmpeg with proprietary codecs enabled. In order +-# to facilitate users who don't want to ship proprietary codecs in ffmpeg, or +-# who have an LGPL requirement to ship ffmpeg as a dynamically linked library, +-# we build ffmpeg as a shared library. +-is_component_ffmpeg = true +diff --git a/build/npm.gni b/build/npm.gni +index a1987d095..fb33a14c3 100644 +--- a/build/npm.gni ++++ b/build/npm.gni +@@ -35,7 +35,6 @@ template("npm_action") { + if (!defined(deps)) { + deps = [] + } +- deps += [ ":npm_pre_flight_" + target_name ] + + script = "//electron/build/npm-run.py" + args = [ +diff --git a/patches/node/fix_add_default_values_for_enable_lto_and_build_v8_with_gn_in.patch b/patches/node/fix_add_default_values_for_enable_lto_and_build_v8_with_gn_in.patch +index 0dc9916be..7eaa46bf5 100644 +--- a/patches/node/fix_add_default_values_for_enable_lto_and_build_v8_with_gn_in.patch ++++ b/patches/node/fix_add_default_values_for_enable_lto_and_build_v8_with_gn_in.patch +@@ -30,7 +30,7 @@ + + # these values being accurate. + + 'build_v8_with_gn': 'false', + + 'enable_lto%': 'false', +-+ +++ 'openssl_fips': '', + 'conditions': [ + ['target_arch=="arm64"', { + # Disabled pending https://github.com/nodejs/node/issues/23913. + diff --git a/srcpkgs/electron8/files/patches/electron-dont-assume-python-is-python2.patch b/srcpkgs/electron8/files/patches/electron-dont-assume-python-is-python2.patch new file mode 100644 index 00000000000..fb134748025 --- /dev/null +++ b/srcpkgs/electron8/files/patches/electron-dont-assume-python-is-python2.patch @@ -0,0 +1,17 @@ +--- a/build/zip.py.orig 2020-04-27 17:59:53.499281667 +0200 ++++ b/build/zip.py 2020-04-27 17:59:57.655839143 +0200 +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python2 + from __future__ import print_function + import os + import subprocess + +--- a/build/npm-run.py.orig 2020-04-27 17:59:50.829351807 +0200 ++++ b/build/npm-run.py 2020-04-27 18:00:02.702373256 +0200 +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python2 + from __future__ import print_function + import os + import subprocess diff --git a/srcpkgs/electron8/template b/srcpkgs/electron8/template new file mode 100644 index 00000000000..54a1f85c484 --- /dev/null +++ b/srcpkgs/electron8/template @@ -0,0 +1,258 @@ +# Template file for 'electron8' +pkgname=electron8 +version=8.2.5 +_nodever=12.13.0 +_chromiumver=80.0.3987.158 +revision=1 +archs="x86_64*" +build_wrksrc="src" +create_wrksrc=yes +hostmakedepends="clang yasm python pkgconf perl gperf bison ninja nodejs hwids + which git libatomic-devel libevent-devel libglib-devel yarn openjdk" +makedepends="libpng-devel gtk+-devel gtk+3-devel nss-devel pciutils-devel + libXi-devel libgcrypt-devel libgnome-keyring-devel cups-devel elfutils-devel + libXcomposite-devel speech-dispatcher-devel libXrandr-devel mit-krb5-devel + libXScrnSaver-devel alsa-lib-devel snappy-devel libdrm-devel + libxml2-devel libxslt-devel pulseaudio-devel libexif-devel + libXcursor-devel libflac-devel speex-devel libmtp-devel libwebp-devel + libjpeg-turbo-devel libevent-devel json-c-devel harfbuzz-devel + minizip-devel jsoncpp-devel zlib-devel libcap-devel libXdamage-devel + re2-devel fontconfig-devel freetype-devel opus-devel + ffmpeg-devel libva-devel libuv-devel c-ares-devel libnotify-devel" +depends="" +short_desc="Cross platform application development framework based on web technologies" +maintainer="John " +license="BSD-3-Clause" +homepage="https://electronjs.org" +distfiles="https://github.com/electron/electron/archive/v$version.tar.gz>electron-${version}.tar.gz + https://commondatastorage.googleapis.com/chromium-browser-official/chromium-$_chromiumver.tar.xz + https://github.com/nodejs/node/archive/v$_nodever.tar.gz>node-$_nodever.tar.gz" +checksum="b48cc1ea380a553c8eccfb1b5b163b6f6039efb5b36c8f32a7497042aff5ec34 + 84c1126ce51e3ac90c70ba97a51eb9970566c531694fbd8b17f1c1047b750978 + 91518dc2506e33d3ac919ed781661082c620b888fa79c2483f4f902584d0e1d9" + +lib32disabled=yes +nodebug=yes +nopie=yes # contains tools that are not PIE, enables PIE itself + +build_options="pulseaudio" +build_options_default="pulseaudio" + +_buildtype=Release +_is_debug=false + +CFLAGS="-Wno-unknown-warning-option -fPIC" +CXXFLAGS="-Wno-unknown-warning-option -fPIC" + +post_extract() { + ln -s chromium-$_chromiumver src + mkdir -p src/third_party/ + ln -s ../../node-$_nodever src/third_party/electron_node + ln -s ../electron-${version} src/electron + +} +post_patch() { + cd $wrksrc + for x in $FILESDIR/patches/*; do + case "${x##*/}" in + chromium*.patch) + cd src + echo Patching $x + patch -p1 -i "$x" + cd "$wrksrc" + ;; + electron*.patch) + cd src/electron + echo Patching $x + patch -p1 -i "$x" + cd "$wrksrc" + esac + done + + if [ "$XBPS_TARGET_LIBC" = "musl" ]; then + for x in $FILESDIR/musl-patches/*; do + case "${x##*/}" in + chromium*.patch) + cd src + echo Patching $x + patch -p1 -i "$x" + cd "$wrksrc" + ;; + electron*.patch) + cd src/electron + echo Patching $x + patch -p1 -i "$x" + cd "$wrksrc" + esac + done + fi +} + +pre_configure() { + cd $wrksrc + # Sigh, electron uses git am... + python2 src/electron/script/list_patch_targets.py src/electron/patches/config.json | while read -r repopath; do + cd "$wrksrc"/"$repopath" + git init -q + git config "gc.auto" 0 + if [ "$repopath" != "src" ]; then + echo "/${repopath#src/}" >> "$wrksrc/$build_wrksrc/.gitignore" + fi + git add . + git -c 'user.name=Electron build' -c 'user.email=electron@ebuild' \ + commit -q -m "." || true + done + + python2 src/electron/script/apply_all_patches.py src/electron/patches/config.json + + cd "$build_wrksrc" + + # https://groups.google.com/a/chromium.org/d/topic/chromium-packagers/9JX1N2nf4PU/discussion + touch chrome/test/data/webui/i18n_process_css_test.html + # Use the file at run time instead of effectively compiling it in + sed 's|//third_party/usb_ids/usb.ids|/usr/share/hwdata/usb.ids|g' \ + -i services/device/public/cpp/usb/BUILD.gn + + mkdir -p third_party/node/linux/node-linux-x64/bin + ln -s /usr/bin/node third_party/node/linux/node-linux-x64/bin/ + + # reusable system library settings + local use_system=" + ffmpeg + flac + fontconfig + freetype + harfbuzz-ng + libdrm + libevent + libjpeg + libpng + libwebp + libxml + libxslt + opus + re2 + snappy + yasm + " + for _lib in $use_system libjpeg_turbo; do + msg_normal "Removing buildscripts for system provided $_lib\n" + find -type f -path "*third_party/$_lib/*" \ + \! -path "*third_party/$_lib/chromium/*" \ + \! -path "*third_party/$_lib/google/*" \ + \! -path './base/third_party/icu/*' \ + \! -path './third_party/pdfium/third_party/freetype/include/pstables.h' \ + \! -path './third_party/yasm/run_yasm.py' \ + \! -regex '.*\.\(gn\|gni\|isolate\|py\)' \ + -delete + done + + + msg_normal "Replacing gn files\n" + python2 build/linux/unbundle/replace_gn_files.py --system-libraries \ + $use_system + third_party/libaddressinput/chromium/tools/update-strings.py +} + +do_configure() { + local conf=() + cd third_party/electron_node + + ./configure --prefix=/usr \ + --shared-zlib \ + --shared-libuv \ + --shared-openssl \ + --shared-cares \ + --openssl-use-def-ca-store \ + --without-npm \ + --without-dtrace \ + --without-bundled-v8 + + cd "$wrksrc/$build_wrksrc"/electron + yarn install + echo $wrksrc/$build_wrksrc + cd "$wrksrc/$build_wrksrc" + + # Google API keys (see http://www.chromium.org/developers/how-tos/api-keys) + # Note: These are for Void Linux use ONLY. + conf+=( + 'google_api_key="AIzaSyA9gWazKaHaNIPPg2hrMj6_ZSG8AFmq738"' + 'google_default_client_id="126659149423-hoo6ickbk3p1u2qjsdsp0ddciurfvb4t.apps.googleusercontent.com"' + 'google_default_client_secret="_ozIx2D-DKm_se_2NPwV4l5b"' + ) + + conf+=( + 'blink_symbol_level=0' + 'clang_use_chrome_plugins=false' + 'closure_compile=true' + 'custom_toolchain="//build/toolchain/linux/unbundle:default"' + 'host_toolchain="//build/toolchain/linux/unbundle:default"' + 'enable_hangout_services_extension=true' + 'enable_nacl_nonsfi=false' + 'enable_nacl=false' + 'enable_precompiled_headers=false' + 'fatal_linker_warnings=false' + 'ffmpeg_branding="Chrome"' + 'fieldtrial_testing_like_official_build=true' + 'gold_path="/usr/bin/ld.gold"' + 'icu_use_data_file=true' + 'is_clang=true' + 'is_component_build=false' + "is_debug=$_is_debug" + 'is_desktop_linux=true' + 'linux_use_bundled_binutils=false' + 'proprietary_codecs=true' + 'symbol_level=0' + 'treat_warnings_as_errors=false' + 'use_allocator_shim=false' + 'use_allocator="none"' + 'use_cups=true' + 'use_custom_libcxx=false' + 'use_gnome_keyring=false' + 'use_gold=false' + 'use_lld=false' + "use_pulseaudio=$(vopt_if pulseaudio 'true' 'false')" + "link_pulseaudio=$(vopt_if pulseaudio 'true' 'false')" + 'use_sysroot=false' + 'use_system_harfbuzz=true' + 'import("//electron/build/args/release.gn")' + ) + + msg_normal "Bootstrapping GN\n" +# AR="ar" CC="${CC:-gcc}" CXX="${CXX:-g++}" LD="${CXX:-g++}" \ + CC="${CC:-clang}" CXX="${CXX:-clang++}" LD="${CXX:-clang++}" \ + python2 tools/gn/bootstrap/bootstrap.py -s -v --gn-gen-args "${conf[*]}" + + + msg_normal "Configuring build\n" + AR="ar" CC="clang" CXX="clang++" LD="clang++" NM=/usr/bin/nm \ + out/Release/gn gen out/$_buildtype --args="${conf[*]}" +} + +do_build() { + msg_normal "Ninja turtles GO!\n" + ninja ${makejobs} -C out/Release third_party/electron_node:headers + + + ninja ${makejobs} -C out/$_buildtype electron + # finish rest of the build + strip -s out/$_buildtype/electron + ninja ${makejobs} -C out/$_buildtype electron_dist_zip +} + +do_install() { + vmkdir /usr/lib/$pkgname + vmkdir /usr/include/$pkgname + bsdtar -xf out/$_buildtype/dist.zip -C "$DESTDIR/usr/lib/$pkgname" + + chmod u+s "$DESTDIR/usr/lib/$pkgname/chrome-sandbox" + + cp out/$_buildtype/gen/node_headers.tar.gz "$DESTDIR"/usr/include/$pkgname + + vlicense ${wrksrc}/src/LICENSE chromium.LICENSE + vlicense ${wrksrc}/src/electron/LICENSE electron.LICENSE + vlicense ${wrksrc}/src/third_party/electron_node/LICENSE node.LICENSE + + vmkdir /usr/bin + ln -s ../lib/$pkgname/electron "$DESTDIR"/usr/bin/$pkgname +} From a70cb3fd582f96a1826e84a8880f93203708c153 Mon Sep 17 00:00:00 2001 From: John Date: Thu, 14 May 2020 01:46:33 +0200 Subject: [PATCH 2/2] electron8: add sndio patches [ci skip] --- .../sndio-files/audio_manager_openbsd.cc | 148 +++++++++++++ .../files/sndio-files/audio_manager_openbsd.h | 65 ++++++ .../files/sndio-files/sndio_input.cc | 201 ++++++++++++++++++ .../electron8/files/sndio-files/sndio_input.h | 91 ++++++++ .../files/sndio-files/sndio_output.cc | 183 ++++++++++++++++ .../files/sndio-files/sndio_output.h | 86 ++++++++ ...a_audio_linux_audio_manager_linux.cc.patch | 43 ++++ ...src_3rdparty_chromium_media_BUILD.gn.patch | 12 ++ ...dparty_chromium_media_audio_BUILD.gn.patch | 23 ++ ...ty_chromium_media_media__options.gni.patch | 12 ++ srcpkgs/electron8/template | 31 ++- srcpkgs/electron8/update | 2 + 12 files changed, 888 insertions(+), 9 deletions(-) create mode 100644 srcpkgs/electron8/files/sndio-files/audio_manager_openbsd.cc create mode 100644 srcpkgs/electron8/files/sndio-files/audio_manager_openbsd.h create mode 100644 srcpkgs/electron8/files/sndio-files/sndio_input.cc create mode 100644 srcpkgs/electron8/files/sndio-files/sndio_input.h create mode 100644 srcpkgs/electron8/files/sndio-files/sndio_output.cc create mode 100644 srcpkgs/electron8/files/sndio-files/sndio_output.h create mode 100644 srcpkgs/electron8/files/sndio-patches/media_audio_linux_audio_manager_linux.cc.patch create mode 100644 srcpkgs/electron8/files/sndio-patches/src_3rdparty_chromium_media_BUILD.gn.patch create mode 100644 srcpkgs/electron8/files/sndio-patches/src_3rdparty_chromium_media_audio_BUILD.gn.patch create mode 100644 srcpkgs/electron8/files/sndio-patches/src_3rdparty_chromium_media_media__options.gni.patch create mode 100644 srcpkgs/electron8/update diff --git a/srcpkgs/electron8/files/sndio-files/audio_manager_openbsd.cc b/srcpkgs/electron8/files/sndio-files/audio_manager_openbsd.cc new file mode 100644 index 00000000000..2c7aa8efa66 --- /dev/null +++ b/srcpkgs/electron8/files/sndio-files/audio_manager_openbsd.cc @@ -0,0 +1,148 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/metrics/histogram_macros.h" +#include "base/memory/ptr_util.h" + +#include "media/audio/openbsd/audio_manager_openbsd.h" + +#include "media/audio/audio_device_description.h" +#include "media/audio/audio_output_dispatcher.h" +#include "media/audio/sndio/sndio_input.h" +#include "media/audio/sndio/sndio_output.h" +#include "media/base/limits.h" +#include "media/base/media_switches.h" + +namespace media { + +// Maximum number of output streams that can be open simultaneously. +static const int kMaxOutputStreams = 4; + +// Default sample rate for input and output streams. +static const int kDefaultSampleRate = 48000; + +void AddDefaultDevice(AudioDeviceNames* device_names) { + DCHECK(device_names->empty()); + device_names->push_front(AudioDeviceName::CreateDefault()); +} + +bool AudioManagerOpenBSD::HasAudioOutputDevices() { + return true; +} + +bool AudioManagerOpenBSD::HasAudioInputDevices() { + return true; +} + +void AudioManagerOpenBSD::GetAudioInputDeviceNames( + AudioDeviceNames* device_names) { + DCHECK(device_names->empty()); + AddDefaultDevice(device_names); +} + +void AudioManagerOpenBSD::GetAudioOutputDeviceNames( + AudioDeviceNames* device_names) { + AddDefaultDevice(device_names); +} + +const char* AudioManagerOpenBSD::GetName() { + return "SNDIO"; +} + +AudioParameters AudioManagerOpenBSD::GetInputStreamParameters( + const std::string& device_id) { + static const int kDefaultInputBufferSize = 1024; + + int user_buffer_size = GetUserBufferSize(); + int buffer_size = user_buffer_size ? + user_buffer_size : kDefaultInputBufferSize; + + return AudioParameters( + AudioParameters::AUDIO_PCM_LOW_LATENCY, CHANNEL_LAYOUT_STEREO, + kDefaultSampleRate, buffer_size); +} + +AudioManagerOpenBSD::AudioManagerOpenBSD(std::unique_ptr audio_thread, + AudioLogFactory* audio_log_factory) + : AudioManagerBase(std::move(audio_thread), + audio_log_factory) { + DLOG(WARNING) << "AudioManagerOpenBSD"; + SetMaxOutputStreamsAllowed(kMaxOutputStreams); +} + +AudioManagerOpenBSD::~AudioManagerOpenBSD() { + Shutdown(); +} + +AudioOutputStream* AudioManagerOpenBSD::MakeLinearOutputStream( + const AudioParameters& params, + const LogCallback& log_callback) { + DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format()); + return MakeOutputStream(params); +} + +AudioOutputStream* AudioManagerOpenBSD::MakeLowLatencyOutputStream( + const AudioParameters& params, + const std::string& device_id, + const LogCallback& log_callback) { + DLOG_IF(ERROR, !device_id.empty()) << "Not implemented!"; + DCHECK_EQ(AudioParameters::AUDIO_PCM_LOW_LATENCY, params.format()); + return MakeOutputStream(params); +} + +AudioInputStream* AudioManagerOpenBSD::MakeLinearInputStream( + const AudioParameters& params, + const std::string& device_id, + const LogCallback& log_callback) { + DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format()); + return MakeInputStream(params); +} + +AudioInputStream* AudioManagerOpenBSD::MakeLowLatencyInputStream( + const AudioParameters& params, + const std::string& device_id, + const LogCallback& log_callback) { + DCHECK_EQ(AudioParameters::AUDIO_PCM_LOW_LATENCY, params.format()); + return MakeInputStream(params); +} + +AudioParameters AudioManagerOpenBSD::GetPreferredOutputStreamParameters( + const std::string& output_device_id, + const AudioParameters& input_params) { + // TODO(tommi): Support |output_device_id|. + DLOG_IF(ERROR, !output_device_id.empty()) << "Not implemented!"; + static const int kDefaultOutputBufferSize = 2048; + + ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; + int sample_rate = kDefaultSampleRate; + int buffer_size = kDefaultOutputBufferSize; + if (input_params.IsValid()) { + sample_rate = input_params.sample_rate(); + channel_layout = input_params.channel_layout(); + buffer_size = std::min(buffer_size, input_params.frames_per_buffer()); + } + + int user_buffer_size = GetUserBufferSize(); + if (user_buffer_size) + buffer_size = user_buffer_size; + + return AudioParameters( + AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, + sample_rate, buffer_size); +} + +AudioInputStream* AudioManagerOpenBSD::MakeInputStream( + const AudioParameters& params) { + DLOG(WARNING) << "MakeInputStream"; + return new SndioAudioInputStream(this, + AudioDeviceDescription::kDefaultDeviceId, params); +} + +AudioOutputStream* AudioManagerOpenBSD::MakeOutputStream( + const AudioParameters& params) { + DLOG(WARNING) << "MakeOutputStream"; + return new SndioAudioOutputStream(params, this); +} + +} // namespace media diff --git a/srcpkgs/electron8/files/sndio-files/audio_manager_openbsd.h b/srcpkgs/electron8/files/sndio-files/audio_manager_openbsd.h new file mode 100644 index 00000000000..8c99db966d6 --- /dev/null +++ b/srcpkgs/electron8/files/sndio-files/audio_manager_openbsd.h @@ -0,0 +1,65 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MEDIA_AUDIO_OPENBSD_AUDIO_MANAGER_OPENBSD_H_ +#define MEDIA_AUDIO_OPENBSD_AUDIO_MANAGER_OPENBSD_H_ + +#include + +#include "base/compiler_specific.h" +#include "base/macros.h" +#include "base/memory/ref_counted.h" +#include "base/threading/thread.h" +#include "media/audio/audio_manager_base.h" + +namespace media { + +class MEDIA_EXPORT AudioManagerOpenBSD : public AudioManagerBase { + public: + AudioManagerOpenBSD(std::unique_ptr audio_thread, + AudioLogFactory* audio_log_factory); + ~AudioManagerOpenBSD() override; + + // Implementation of AudioManager. + bool HasAudioOutputDevices() override; + bool HasAudioInputDevices() override; + void GetAudioInputDeviceNames(AudioDeviceNames* device_names) override; + void GetAudioOutputDeviceNames(AudioDeviceNames* device_names) override; + AudioParameters GetInputStreamParameters( + const std::string& device_id) override; + const char* GetName() override; + + // Implementation of AudioManagerBase. + AudioOutputStream* MakeLinearOutputStream( + const AudioParameters& params, + const LogCallback& log_callback) override; + AudioOutputStream* MakeLowLatencyOutputStream( + const AudioParameters& params, + const std::string& device_id, + const LogCallback& log_callback) override; + AudioInputStream* MakeLinearInputStream( + const AudioParameters& params, + const std::string& device_id, + const LogCallback& log_callback) override; + AudioInputStream* MakeLowLatencyInputStream( + const AudioParameters& params, + const std::string& device_id, + const LogCallback& log_callback) override; + + protected: + AudioParameters GetPreferredOutputStreamParameters( + const std::string& output_device_id, + const AudioParameters& input_params) override; + + private: + // Called by MakeLinearOutputStream and MakeLowLatencyOutputStream. + AudioOutputStream* MakeOutputStream(const AudioParameters& params); + AudioInputStream* MakeInputStream(const AudioParameters& params); + + DISALLOW_COPY_AND_ASSIGN(AudioManagerOpenBSD); +}; + +} // namespace media + +#endif // MEDIA_AUDIO_OPENBSD_AUDIO_MANAGER_OPENBSD_H_ diff --git a/srcpkgs/electron8/files/sndio-files/sndio_input.cc b/srcpkgs/electron8/files/sndio-files/sndio_input.cc new file mode 100644 index 00000000000..6c7bc8b8025 --- /dev/null +++ b/srcpkgs/electron8/files/sndio-files/sndio_input.cc @@ -0,0 +1,201 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/bind.h" +#include "base/logging.h" +#include "base/macros.h" +#include "base/message_loop/message_loop.h" +#include "media/base/audio_timestamp_helper.h" +#include "media/audio/openbsd/audio_manager_openbsd.h" +#include "media/audio/audio_manager.h" +#include "media/audio/sndio/sndio_input.h" + +namespace media { + +static const SampleFormat kSampleFormat = kSampleFormatS16; + +void SndioAudioInputStream::OnMoveCallback(void *arg, int delta) +{ + SndioAudioInputStream* self = static_cast(arg); + + self->hw_delay += delta; +} + +void *SndioAudioInputStream::ThreadEntry(void *arg) { + SndioAudioInputStream* self = static_cast(arg); + + self->ThreadLoop(); + return NULL; +} + +SndioAudioInputStream::SndioAudioInputStream(AudioManagerBase* manager, + const std::string& device_name, + const AudioParameters& params) + : manager(manager), + params(params), + audio_bus(AudioBus::Create(params)), + state(kClosed) { +} + +SndioAudioInputStream::~SndioAudioInputStream() { + if (state != kClosed) + Close(); +} + +bool SndioAudioInputStream::Open() { + struct sio_par par; + int sig; + + if (state != kClosed) + return false; + + if (params.format() != AudioParameters::AUDIO_PCM_LINEAR && + params.format() != AudioParameters::AUDIO_PCM_LOW_LATENCY) { + LOG(WARNING) << "Unsupported audio format."; + return false; + } + + sio_initpar(&par); + par.rate = params.sample_rate(); + par.rchan = params.channels(); + par.bits = SampleFormatToBitsPerChannel(kSampleFormat); + par.bps = par.bits / 8; + par.sig = sig = par.bits != 8 ? 1 : 0; + par.le = SIO_LE_NATIVE; + par.appbufsz = params.frames_per_buffer(); + + hdl = sio_open(SIO_DEVANY, SIO_REC, 0); + + if (hdl == NULL) { + LOG(ERROR) << "Couldn't open audio device."; + return false; + } + + if (!sio_setpar(hdl, &par) || !sio_getpar(hdl, &par)) { + LOG(ERROR) << "Couldn't set audio parameters."; + goto bad_close; + } + + if (par.rate != (unsigned int)params.sample_rate() || + par.rchan != (unsigned int)params.channels() || + par.bits != (unsigned int)SampleFormatToBitsPerChannel(kSampleFormat) || + par.sig != (unsigned int)sig || + (par.bps > 1 && par.le != SIO_LE_NATIVE) || + (par.bits != par.bps * 8)) { + LOG(ERROR) << "Unsupported audio parameters."; + goto bad_close; + } + state = kStopped; + buffer = new char[audio_bus->frames() * params.GetBytesPerFrame(kSampleFormat)]; + sio_onmove(hdl, &OnMoveCallback, this); + return true; +bad_close: + sio_close(hdl); + return false; +} + +void SndioAudioInputStream::Start(AudioInputCallback* cb) { + + StartAgc(); + + state = kRunning; + hw_delay = 0; + callback = cb; + sio_start(hdl); + if (pthread_create(&thread, NULL, &ThreadEntry, this) != 0) { + LOG(ERROR) << "Failed to create real-time thread for recording."; + sio_stop(hdl); + state = kStopped; + } +} + +void SndioAudioInputStream::Stop() { + + if (state == kStopped) + return; + + state = kStopWait; + pthread_join(thread, NULL); + sio_stop(hdl); + state = kStopped; + + StopAgc(); +} + +void SndioAudioInputStream::Close() { + + if (state == kClosed) + return; + + if (state == kRunning) + Stop(); + + state = kClosed; + delete [] buffer; + sio_close(hdl); + + manager->ReleaseInputStream(this); +} + +double SndioAudioInputStream::GetMaxVolume() { + // Not supported + return 0.0; +} + +void SndioAudioInputStream::SetVolume(double volume) { + // Not supported. Do nothing. +} + +double SndioAudioInputStream::GetVolume() { + // Not supported. + return 0.0; +} + +bool SndioAudioInputStream::IsMuted() { + // Not supported. + return false; +} + +void SndioAudioInputStream::SetOutputDeviceForAec( + const std::string& output_device_id) { + // Not supported. +} + +void SndioAudioInputStream::ThreadLoop(void) { + size_t todo, n; + char *data; + unsigned int nframes; + double normalized_volume = 0.0; + + nframes = audio_bus->frames(); + + while (state == kRunning && !sio_eof(hdl)) { + + GetAgcVolume(&normalized_volume); + + // read one block + todo = nframes * params.GetBytesPerFrame(kSampleFormat); + data = buffer; + while (todo > 0) { + n = sio_read(hdl, data, todo); + if (n == 0) + return; // unrecoverable I/O error + todo -= n; + data += n; + } + hw_delay -= nframes; + + // convert frames count to TimeDelta + const base::TimeDelta delay = AudioTimestampHelper::FramesToTime(hw_delay, + params.sample_rate()); + + // push into bus + audio_bus->FromInterleaved(buffer, nframes, SampleFormatToBytesPerChannel(kSampleFormat)); + + // invoke callback + callback->OnData(audio_bus.get(), base::TimeTicks::Now() - delay, 1.); + } +} + +} // namespace media diff --git a/srcpkgs/electron8/files/sndio-files/sndio_input.h b/srcpkgs/electron8/files/sndio-files/sndio_input.h new file mode 100644 index 00000000000..d868e0469db --- /dev/null +++ b/srcpkgs/electron8/files/sndio-files/sndio_input.h @@ -0,0 +1,91 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MEDIA_AUDIO_SNDIO_SNDIO_INPUT_H_ +#define MEDIA_AUDIO_SNDIO_SNDIO_INPUT_H_ + +#include +#include +#include + +#include "base/compiler_specific.h" +#include "base/macros.h" +#include "base/memory/weak_ptr.h" +#include "base/time/time.h" +#include "media/audio/agc_audio_stream.h" +#include "media/audio/audio_io.h" +#include "media/audio/audio_device_description.h" +#include "media/base/audio_parameters.h" + +namespace media { + +class AudioManagerBase; + +// Implementation of AudioOutputStream using sndio(7) +class SndioAudioInputStream : public AgcAudioStream { + public: + // Pass this to the constructor if you want to attempt auto-selection + // of the audio recording device. + static const char kAutoSelectDevice[]; + + // Create a PCM Output stream for the SNDIO device identified by + // |device_name|. If unsure of what to use for |device_name|, use + // |kAutoSelectDevice|. + SndioAudioInputStream(AudioManagerBase* audio_manager, + const std::string& device_name, + const AudioParameters& params); + + ~SndioAudioInputStream() override; + + // Implementation of AudioInputStream. + bool Open() override; + void Start(AudioInputCallback* callback) override; + void Stop() override; + void Close() override; + double GetMaxVolume() override; + void SetVolume(double volume) override; + double GetVolume() override; + bool IsMuted() override; + void SetOutputDeviceForAec(const std::string& output_device_id) override; + + private: + + enum StreamState { + kClosed, // Not opened yet + kStopped, // Device opened, but not started yet + kRunning, // Started, device playing + kStopWait // Stopping, waiting for the real-time thread to exit + }; + + // C-style call-backs + static void OnMoveCallback(void *arg, int delta); + static void* ThreadEntry(void *arg); + + // Continuously moves data from the device to the consumer + void ThreadLoop(); + // Our creator, the audio manager needs to be notified when we close. + AudioManagerBase* manager; + // Parameters of the source + AudioParameters params; + // We store data here for consumer + std::unique_ptr audio_bus; + // Call-back that consumes recorded data + AudioInputCallback* callback; // Valid during a recording session. + // Handle of the audio device + struct sio_hdl* hdl; + // Current state of the stream + enum StreamState state; + // High priority thread running ThreadLoop() + pthread_t thread; + // Number of frames buffered in the hardware + int hw_delay; + // Temporary buffer where data is stored sndio-compatible format + char* buffer; + + DISALLOW_COPY_AND_ASSIGN(SndioAudioInputStream); +}; + +} // namespace media + +#endif // MEDIA_AUDIO_SNDIO_SNDIO_INPUT_H_ diff --git a/srcpkgs/electron8/files/sndio-files/sndio_output.cc b/srcpkgs/electron8/files/sndio-files/sndio_output.cc new file mode 100644 index 00000000000..a6719f9aac8 --- /dev/null +++ b/srcpkgs/electron8/files/sndio-files/sndio_output.cc @@ -0,0 +1,183 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/logging.h" +#include "base/time/time.h" +#include "base/time/default_tick_clock.h" +#include "media/audio/audio_manager_base.h" +#include "media/base/audio_timestamp_helper.h" +#include "media/audio/sndio/sndio_output.h" + +namespace media { + +static const SampleFormat kSampleFormat = kSampleFormatS16; + +void SndioAudioOutputStream::OnMoveCallback(void *arg, int delta) { + SndioAudioOutputStream* self = static_cast(arg); + + self->hw_delay -= delta; +} + +void SndioAudioOutputStream::OnVolCallback(void *arg, unsigned int vol) { + SndioAudioOutputStream* self = static_cast(arg); + + self->vol = vol; +} + +void *SndioAudioOutputStream::ThreadEntry(void *arg) { + SndioAudioOutputStream* self = static_cast(arg); + + self->ThreadLoop(); + return NULL; +} + +SndioAudioOutputStream::SndioAudioOutputStream(const AudioParameters& params, + AudioManagerBase* manager) + : manager(manager), + params(params), + audio_bus(AudioBus::Create(params)), + state(kClosed), + mutex(PTHREAD_MUTEX_INITIALIZER) { +} + +SndioAudioOutputStream::~SndioAudioOutputStream() { + if (state != kClosed) + Close(); +} + +bool SndioAudioOutputStream::Open() { + struct sio_par par; + int sig; + + if (params.format() != AudioParameters::AUDIO_PCM_LINEAR && + params.format() != AudioParameters::AUDIO_PCM_LOW_LATENCY) { + LOG(WARNING) << "Unsupported audio format."; + return false; + } + sio_initpar(&par); + par.rate = params.sample_rate(); + par.pchan = params.channels(); + par.bits = SampleFormatToBitsPerChannel(kSampleFormat); + par.bps = par.bits / 8; + par.sig = sig = par.bits != 8 ? 1 : 0; + par.le = SIO_LE_NATIVE; + par.appbufsz = params.frames_per_buffer(); + + hdl = sio_open(SIO_DEVANY, SIO_PLAY, 0); + if (hdl == NULL) { + LOG(ERROR) << "Couldn't open audio device."; + return false; + } + if (!sio_setpar(hdl, &par) || !sio_getpar(hdl, &par)) { + LOG(ERROR) << "Couldn't set audio parameters."; + goto bad_close; + } + if (par.rate != (unsigned int)params.sample_rate() || + par.pchan != (unsigned int)params.channels() || + par.bits != (unsigned int)SampleFormatToBitsPerChannel(kSampleFormat) || + par.sig != (unsigned int)sig || + (par.bps > 1 && par.le != SIO_LE_NATIVE) || + (par.bits != par.bps * 8)) { + LOG(ERROR) << "Unsupported audio parameters."; + goto bad_close; + } + state = kStopped; + volpending = 0; + vol = 0; + buffer = new char[audio_bus->frames() * params.GetBytesPerFrame(kSampleFormat)]; + sio_onmove(hdl, &OnMoveCallback, this); + sio_onvol(hdl, &OnVolCallback, this); + return true; + bad_close: + sio_close(hdl); + return false; +} + +void SndioAudioOutputStream::Close() { + if (state == kClosed) + return; + if (state == kRunning) + Stop(); + state = kClosed; + delete [] buffer; + sio_close(hdl); + manager->ReleaseOutputStream(this); // Calls the destructor +} + +void SndioAudioOutputStream::Start(AudioSourceCallback* callback) { + state = kRunning; + hw_delay = 0; + source = callback; + sio_start(hdl); + if (pthread_create(&thread, NULL, &ThreadEntry, this) != 0) { + LOG(ERROR) << "Failed to create real-time thread."; + sio_stop(hdl); + state = kStopped; + } +} + +void SndioAudioOutputStream::Stop() { + if (state == kStopped) + return; + state = kStopWait; + pthread_join(thread, NULL); + sio_stop(hdl); + state = kStopped; +} + +void SndioAudioOutputStream::SetVolume(double v) { + pthread_mutex_lock(&mutex); + vol = v * SIO_MAXVOL; + volpending = 1; + pthread_mutex_unlock(&mutex); +} + +void SndioAudioOutputStream::GetVolume(double* v) { + pthread_mutex_lock(&mutex); + *v = vol * (1. / SIO_MAXVOL); + pthread_mutex_unlock(&mutex); +} + +// This stream is always used with sub second buffer sizes, where it's +// sufficient to simply always flush upon Start(). +void SndioAudioOutputStream::Flush() {} + +void SndioAudioOutputStream::ThreadLoop(void) { + int avail, count, result; + + while (state == kRunning) { + // Update volume if needed + pthread_mutex_lock(&mutex); + if (volpending) { + volpending = 0; + sio_setvol(hdl, vol); + } + pthread_mutex_unlock(&mutex); + + // Get data to play + const base::TimeDelta delay = AudioTimestampHelper::FramesToTime(hw_delay, + params.sample_rate()); + count = source->OnMoreData(delay, base::TimeTicks::Now(), 0, audio_bus.get()); + audio_bus->ToInterleaved(count, SampleFormatToBytesPerChannel(kSampleFormat), buffer); + if (count == 0) { + // We have to submit something to the device + count = audio_bus->frames(); + memset(buffer, 0, count * params.GetBytesPerFrame(kSampleFormat)); + LOG(WARNING) << "No data to play, running empty cycle."; + } + + // Submit data to the device + avail = count * params.GetBytesPerFrame(kSampleFormat); + result = sio_write(hdl, buffer, avail); + if (result == 0) { + LOG(WARNING) << "Audio device disconnected."; + break; + } + + // Update hardware pointer + hw_delay += count; + } +} + +} // namespace media diff --git a/srcpkgs/electron8/files/sndio-files/sndio_output.h b/srcpkgs/electron8/files/sndio-files/sndio_output.h new file mode 100644 index 00000000000..ead220ca96e --- /dev/null +++ b/srcpkgs/electron8/files/sndio-files/sndio_output.h @@ -0,0 +1,86 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef MEDIA_AUDIO_SNDIO_SNDIO_OUTPUT_H_ +#define MEDIA_AUDIO_SNDIO_SNDIO_OUTPUT_H_ + +#include +#include + +#include "base/time/tick_clock.h" +#include "base/time/time.h" +#include "media/audio/audio_io.h" + +namespace media { + +class AudioManagerBase; + +// Implementation of AudioOutputStream using sndio(7) +class SndioAudioOutputStream : public AudioOutputStream { + public: + // The manager is creating this object + SndioAudioOutputStream(const AudioParameters& params, + AudioManagerBase* manager); + virtual ~SndioAudioOutputStream(); + + // Implementation of AudioOutputStream. + bool Open() override; + void Close() override; + void Start(AudioSourceCallback* callback) override; + void Stop() override; + void SetVolume(double volume) override; + void GetVolume(double* volume) override; + void Flush() override; + + friend void sndio_onmove(void *arg, int delta); + friend void sndio_onvol(void *arg, unsigned int vol); + friend void *sndio_threadstart(void *arg); + + private: + enum StreamState { + kClosed, // Not opened yet + kStopped, // Device opened, but not started yet + kRunning, // Started, device playing + kStopWait // Stopping, waiting for the real-time thread to exit + }; + + // C-style call-backs + static void OnMoveCallback(void *arg, int delta); + static void OnVolCallback(void *arg, unsigned int vol); + static void* ThreadEntry(void *arg); + + // Continuously moves data from the producer to the device + void ThreadLoop(void); + + // Our creator, the audio manager needs to be notified when we close. + AudioManagerBase* manager; + // Parameters of the source + AudioParameters params; + // Source stores data here + std::unique_ptr audio_bus; + // Call-back that produces data to play + AudioSourceCallback* source; + // Handle of the audio device + struct sio_hdl* hdl; + // Current state of the stream + enum StreamState state; + // High priority thread running ThreadLoop() + pthread_t thread; + // Protects vol, volpending and hw_delay + pthread_mutex_t mutex; + // Current volume in the 0..SIO_MAXVOL range + int vol; + // Set to 1 if volumes must be refreshed in the realtime thread + int volpending; + // Number of frames buffered in the hardware + int hw_delay; + // Temporary buffer where data is stored sndio-compatible format + char* buffer; + + DISALLOW_COPY_AND_ASSIGN(SndioAudioOutputStream); +}; + +} // namespace media + +#endif // MEDIA_AUDIO_SNDIO_SNDIO_OUTPUT_H_ diff --git a/srcpkgs/electron8/files/sndio-patches/media_audio_linux_audio_manager_linux.cc.patch b/srcpkgs/electron8/files/sndio-patches/media_audio_linux_audio_manager_linux.cc.patch new file mode 100644 index 00000000000..cf8e81b11d6 --- /dev/null +++ b/srcpkgs/electron8/files/sndio-patches/media_audio_linux_audio_manager_linux.cc.patch @@ -0,0 +1,43 @@ +diff --git a/chromium/media/audio/linux/audio_manager_linux.cc b/chromium/media/audio/linux/audio_manager_linux.cc +index 5d703549372..9e60b40c749 100644 +--- media/audio/linux/audio_manager_linux.cc ++++ media/audio/linux/audio_manager_linux.cc +@@ -20,6 +20,10 @@ + #include "media/audio/pulse/audio_manager_pulse.h" + #include "media/audio/pulse/pulse_util.h" + #endif ++#if defined(USE_SNDIO) ++#include ++#include "media/audio/openbsd/audio_manager_openbsd.h" ++#endif + + namespace media { + +@@ -27,7 +31,8 @@ enum LinuxAudioIO { + kPulse, + kAlsa, + kCras, +- kAudioIOMax = kCras // Must always be equal to largest logged entry. ++ kSndio, ++ kAudioIOMax = kSndio // Must always be equal to largest logged entry. + }; + + std::unique_ptr CreateAudioManager( +@@ -41,6 +46,17 @@ std::unique_ptr CreateAudioManager( + } + #endif + ++#if defined(USE_SNDIO) ++ struct sio_hdl * hdl = NULL; ++ if ((hdl=sio_open(SIO_DEVANY, SIO_PLAY, 1)) != NULL) { ++ sio_close(hdl); ++ UMA_HISTOGRAM_ENUMERATION("Media.LinuxAudioIO", kSndio, kAudioIOMax +1); ++ return std::make_unique(std::move(audio_thread), ++ audio_log_factory); ++ } ++ DVLOG(1) << "Sndio is not available on the OS"; ++#endif ++ + #if defined(USE_PULSEAUDIO) + pa_threaded_mainloop* pa_mainloop = nullptr; + pa_context* pa_context = nullptr; diff --git a/srcpkgs/electron8/files/sndio-patches/src_3rdparty_chromium_media_BUILD.gn.patch b/srcpkgs/electron8/files/sndio-patches/src_3rdparty_chromium_media_BUILD.gn.patch new file mode 100644 index 00000000000..ec604002668 --- /dev/null +++ b/srcpkgs/electron8/files/sndio-patches/src_3rdparty_chromium_media_BUILD.gn.patch @@ -0,0 +1,12 @@ +--- media/BUILD.gn 2020-03-24 10:16:30.000000000 +0100 ++++ - 2020-04-06 14:32:27.960817513 +0200 +@@ -65,6 +65,9 @@ + if (use_cras) { + defines += [ "USE_CRAS" ] + } ++ if (use_sndio) { ++ defines += [ "USE_SNDIO" ] ++ } + } + + # Internal grouping of the configs necessary to support sub-folders having their diff --git a/srcpkgs/electron8/files/sndio-patches/src_3rdparty_chromium_media_audio_BUILD.gn.patch b/srcpkgs/electron8/files/sndio-patches/src_3rdparty_chromium_media_audio_BUILD.gn.patch new file mode 100644 index 00000000000..b3700eef898 --- /dev/null +++ b/srcpkgs/electron8/files/sndio-patches/src_3rdparty_chromium_media_audio_BUILD.gn.patch @@ -0,0 +1,23 @@ +--- media/audio/BUILD.gn 2020-03-24 10:16:30.000000000 +0100 ++++ - 2020-04-06 14:31:28.871450217 +0200 +@@ -232,9 +232,19 @@ + deps += [ "//media/base/android:media_jni_headers" ] + } + +- if (is_linux) { ++ if (is_linux && use_sndio) { + sources += [ "linux/audio_manager_linux.cc" ] + } ++ if (use_sndio) { ++ libs += [ "sndio" ] ++ sources += [ ++ "openbsd/audio_manager_openbsd.cc", ++ "sndio/sndio_input.cc", ++ "sndio/sndio_input.h", ++ "sndio/sndio_output.cc", ++ "sndio/sndio_output.h" ++ ] ++ } + + if (use_alsa) { + libs += [ "asound" ] diff --git a/srcpkgs/electron8/files/sndio-patches/src_3rdparty_chromium_media_media__options.gni.patch b/srcpkgs/electron8/files/sndio-patches/src_3rdparty_chromium_media_media__options.gni.patch new file mode 100644 index 00000000000..14807d8e1d3 --- /dev/null +++ b/srcpkgs/electron8/files/sndio-patches/src_3rdparty_chromium_media_media__options.gni.patch @@ -0,0 +1,12 @@ +--- media/media_options.gni 2020-03-24 10:16:30.000000000 +0100 ++++ - 2020-04-06 14:29:22.958630783 +0200 +@@ -114,6 +114,9 @@ + # Enables runtime selection of ALSA library for audio. + use_alsa = false + ++ # Enables runtime selection of sndio library for audio. ++ use_sndio = false ++ + # Alsa should be used on non-Android, non-Mac POSIX systems. + # Alsa should be used on desktop Chromecast and audio-only Chromecast builds. + if (is_posix && !is_android && !is_mac && diff --git a/srcpkgs/electron8/template b/srcpkgs/electron8/template index 54a1f85c484..1713e8c250a 100644 --- a/srcpkgs/electron8/template +++ b/srcpkgs/electron8/template @@ -35,8 +35,8 @@ lib32disabled=yes nodebug=yes nopie=yes # contains tools that are not PIE, enables PIE itself -build_options="pulseaudio" -build_options_default="pulseaudio" +build_options="pulseaudio sndio" +build_options_default="pulseaudio sndio" _buildtype=Release _is_debug=false @@ -57,13 +57,13 @@ post_patch() { case "${x##*/}" in chromium*.patch) cd src - echo Patching $x + echo Applying $x patch -p1 -i "$x" cd "$wrksrc" ;; electron*.patch) cd src/electron - echo Patching $x + echo Applying $x patch -p1 -i "$x" cd "$wrksrc" esac @@ -74,18 +74,31 @@ post_patch() { case "${x##*/}" in chromium*.patch) cd src - echo Patching $x + echo Applying $x patch -p1 -i "$x" cd "$wrksrc" ;; electron*.patch) cd src/electron - echo Patching $x + echo Applying $x patch -p1 -i "$x" cd "$wrksrc" esac done fi + if [ "$build_option_sndio" ]; then + mkdir -p ${wrksrc}/${build_wrksrc}/media/audio/{sndio,openbsd} + cp ${FILESDIR}/sndio-files/sndio_*put.* \ + ${wrksrc}/${build_wrksrc}/media/audio/sndio + cp ${FILESDIR}/sndio-files/audio_manager_openbsd.* \ + ${wrksrc}/${build_wrksrc}/media/audio/openbsd + for f in "${FILESDIR}"/sndio-patches/*.patch; do + cd src + echo "Applying $f" + patch -Np0 -i "$f" + cd "$wrksrc" + done + fi } pre_configure() { @@ -168,9 +181,8 @@ do_configure() { --without-dtrace \ --without-bundled-v8 - cd "$wrksrc/$build_wrksrc"/electron - yarn install - echo $wrksrc/$build_wrksrc + cd "$wrksrc/$build_wrksrc/electron" + yarn install --frozen-lockfile cd "$wrksrc/$build_wrksrc" # Google API keys (see http://www.chromium.org/developers/how-tos/api-keys) @@ -213,6 +225,7 @@ do_configure() { 'use_lld=false' "use_pulseaudio=$(vopt_if pulseaudio 'true' 'false')" "link_pulseaudio=$(vopt_if pulseaudio 'true' 'false')" + "use_sndio=$(vopt_if sndio 'true' 'false')" 'use_sysroot=false' 'use_system_harfbuzz=true' 'import("//electron/build/args/release.gn")' diff --git a/srcpkgs/electron8/update b/srcpkgs/electron8/update new file mode 100644 index 00000000000..3af8e58b535 --- /dev/null +++ b/srcpkgs/electron8/update @@ -0,0 +1,2 @@ +site=https://www.electronjs.org/releases/stable?version=${version%%.*} +pattern='tag/v\K[\d\.]+(?=")'