From 542ddceea26622cf71c771488177309a12e928c7 Mon Sep 17 00:00:00 2001 From: Juergen Buchmueller Date: Mon, 12 Dec 2016 08:33:50 +0100 Subject: [PATCH] webrtc-audio-processing: upstream patches + cross Add upstream patches since 0.3 and fix cross compiling for arm* by disabling neon. Inlining the neon wrappers fails with e.g. "error: inlining failed in call to always_inline 'vld1q_s16': target specific option mismatch" --- .../webrtc-audio-processing/patches/001.patch | 119 ++++ .../webrtc-audio-processing/patches/002.patch | 56 ++ .../webrtc-audio-processing/patches/003.patch | 27 + .../webrtc-audio-processing/patches/004.patch | 30 + .../webrtc-audio-processing/patches/005.patch | 76 +++ .../webrtc-audio-processing/patches/006.patch | 23 + .../webrtc-audio-processing/patches/007.patch | 601 ++++++++++++++++++ .../webrtc-audio-processing/patches/008.patch | 34 + .../webrtc-audio-processing/patches/009.patch | 24 + .../webrtc-audio-processing/patches/010.patch | 71 +++ .../webrtc-audio-processing/patches/011.patch | 22 + .../webrtc-audio-processing/patches/012.patch | 22 + .../webrtc-audio-processing/patches/013.patch | 25 + .../webrtc-audio-processing/patches/014.patch | 91 +++ .../webrtc-audio-processing/patches/015.patch | 23 + .../patches/musl.patch | 4 +- srcpkgs/webrtc-audio-processing/template | 13 +- 17 files changed, 1257 insertions(+), 4 deletions(-) create mode 100644 srcpkgs/webrtc-audio-processing/patches/001.patch create mode 100644 srcpkgs/webrtc-audio-processing/patches/002.patch create mode 100644 srcpkgs/webrtc-audio-processing/patches/003.patch create mode 100644 srcpkgs/webrtc-audio-processing/patches/004.patch create mode 100644 srcpkgs/webrtc-audio-processing/patches/005.patch create mode 100644 srcpkgs/webrtc-audio-processing/patches/006.patch create mode 100644 srcpkgs/webrtc-audio-processing/patches/007.patch create mode 100644 srcpkgs/webrtc-audio-processing/patches/008.patch create mode 100644 srcpkgs/webrtc-audio-processing/patches/009.patch create mode 100644 srcpkgs/webrtc-audio-processing/patches/010.patch create mode 100644 srcpkgs/webrtc-audio-processing/patches/011.patch create mode 100644 srcpkgs/webrtc-audio-processing/patches/012.patch create mode 100644 srcpkgs/webrtc-audio-processing/patches/013.patch create mode 100644 srcpkgs/webrtc-audio-processing/patches/014.patch create mode 100644 srcpkgs/webrtc-audio-processing/patches/015.patch diff --git a/srcpkgs/webrtc-audio-processing/patches/001.patch b/srcpkgs/webrtc-audio-processing/patches/001.patch new file mode 100644 index 0000000000..3c0ebeafad --- /dev/null +++ b/srcpkgs/webrtc-audio-processing/patches/001.patch @@ -0,0 +1,119 @@ +From bf25c45e540d7e961704c245e7be439b580c93c2 Mon Sep 17 00:00:00 2001 +From: Nicolas Dufresne +Date: Thu, 30 Jun 2016 15:08:17 -0400 +Subject: Add missing windows specific headers + +https://bugs.freedesktop.org/show_bug.cgi?id=96754 + +diff --git a/webrtc/base/win32.h b/webrtc/base/win32.h +new file mode 100644 +index 0000000..6969c10 +--- /dev/null ++++ b/webrtc/base/win32.h +@@ -0,0 +1,103 @@ ++/* ++ * Copyright 2004 The WebRTC Project Authors. All rights reserved. ++ * ++ * Use of this source code is governed by a BSD-style license ++ * that can be found in the LICENSE file in the root of the source ++ * tree. An additional intellectual property rights grant can be found ++ * in the file PATENTS. All contributing project authors may ++ * be found in the AUTHORS file in the root of the source tree. ++ */ ++#ifndef WEBRTC_BASE_WIN32_H_ ++#define WEBRTC_BASE_WIN32_H_ ++#if defined(WEBRTC_WIN) ++#ifndef WIN32_LEAN_AND_MEAN ++#define WIN32_LEAN_AND_MEAN ++#endif ++// Make sure we don't get min/max macros ++#ifndef NOMINMAX ++#define NOMINMAX ++#endif ++#include ++#include ++#ifndef SECURITY_MANDATORY_LABEL_AUTHORITY ++// Add defines that we use if we are compiling against older sdks ++#define SECURITY_MANDATORY_MEDIUM_RID (0x00002000L) ++#define TokenIntegrityLevel static_cast(0x19) ++typedef struct _TOKEN_MANDATORY_LABEL { ++ SID_AND_ATTRIBUTES Label; ++} TOKEN_MANDATORY_LABEL, *PTOKEN_MANDATORY_LABEL; ++#endif // SECURITY_MANDATORY_LABEL_AUTHORITY ++#undef SetPort ++#include ++#include "webrtc/base/stringutils.h" ++#include "webrtc/base/basictypes.h" ++namespace rtc { ++const char* win32_inet_ntop(int af, const void *src, char* dst, socklen_t size); ++int win32_inet_pton(int af, const char* src, void *dst); ++inline std::wstring ToUtf16(const char* utf8, size_t len) { ++ int len16 = ::MultiByteToWideChar(CP_UTF8, 0, utf8, static_cast(len), ++ NULL, 0); ++ wchar_t* ws = STACK_ARRAY(wchar_t, len16); ++ ::MultiByteToWideChar(CP_UTF8, 0, utf8, static_cast(len), ws, len16); ++ return std::wstring(ws, len16); ++} ++inline std::wstring ToUtf16(const std::string& str) { ++ return ToUtf16(str.data(), str.length()); ++} ++inline std::string ToUtf8(const wchar_t* wide, size_t len) { ++ int len8 = ::WideCharToMultiByte(CP_UTF8, 0, wide, static_cast(len), ++ NULL, 0, NULL, NULL); ++ char* ns = STACK_ARRAY(char, len8); ++ ::WideCharToMultiByte(CP_UTF8, 0, wide, static_cast(len), ns, len8, ++ NULL, NULL); ++ return std::string(ns, len8); ++} ++inline std::string ToUtf8(const wchar_t* wide) { ++ return ToUtf8(wide, wcslen(wide)); ++} ++inline std::string ToUtf8(const std::wstring& wstr) { ++ return ToUtf8(wstr.data(), wstr.length()); ++} ++// Convert FILETIME to time_t ++void FileTimeToUnixTime(const FILETIME& ft, time_t* ut); ++// Convert time_t to FILETIME ++void UnixTimeToFileTime(const time_t& ut, FILETIME * ft); ++// Convert a Utf8 path representation to a non-length-limited Unicode pathname. ++bool Utf8ToWindowsFilename(const std::string& utf8, std::wstring* filename); ++// Convert a FILETIME to a UInt64 ++inline uint64_t ToUInt64(const FILETIME& ft) { ++ ULARGE_INTEGER r = {{ft.dwLowDateTime, ft.dwHighDateTime}}; ++ return r.QuadPart; ++} ++enum WindowsMajorVersions { ++ kWindows2000 = 5, ++ kWindowsVista = 6, ++}; ++bool GetOsVersion(int* major, int* minor, int* build); ++inline bool IsWindowsVistaOrLater() { ++ int major; ++ return (GetOsVersion(&major, NULL, NULL) && major >= kWindowsVista); ++} ++inline bool IsWindowsXpOrLater() { ++ int major, minor; ++ return (GetOsVersion(&major, &minor, NULL) && ++ (major >= kWindowsVista || ++ (major == kWindows2000 && minor >= 1))); ++} ++inline bool IsWindows8OrLater() { ++ int major, minor; ++ return (GetOsVersion(&major, &minor, NULL) && ++ (major > kWindowsVista || ++ (major == kWindowsVista && minor >= 2))); ++} ++// Determine the current integrity level of the process. ++bool GetCurrentProcessIntegrityLevel(int* level); ++inline bool IsCurrentProcessLowIntegrity() { ++ int level; ++ return (GetCurrentProcessIntegrityLevel(&level) && ++ level < SECURITY_MANDATORY_MEDIUM_RID); ++} ++bool AdjustCurrentProcessPrivilege(const TCHAR* privilege, bool to_enable); ++} // namespace rtc ++#endif // WEBRTC_WIN ++#endif // WEBRTC_BASE_WIN32_H_ +-- +cgit v0.10.2 + diff --git a/srcpkgs/webrtc-audio-processing/patches/002.patch b/srcpkgs/webrtc-audio-processing/patches/002.patch new file mode 100644 index 0000000000..aa0ecb23e8 --- /dev/null +++ b/srcpkgs/webrtc-audio-processing/patches/002.patch @@ -0,0 +1,56 @@ +From 560f300a3d84bbd2b48173aaee5166584d917c44 Mon Sep 17 00:00:00 2001 +From: Nicolas Dufresne +Date: Thu, 30 Jun 2016 16:19:49 -0400 +Subject: build: Add cerbero gnustl support for Android + + +diff --git a/configure.ac b/configure.ac +index 6f9553b..f34be72 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -26,6 +26,21 @@ AS_CASE(["x${with_ns_mode}"], + [NS_FIXED=0]) + AM_CONDITIONAL(NS_FIXED, [test "x${NS_FIXED}" = "x1"]) + ++AC_ARG_WITH( ++ gnustl, ++ AC_HELP_STRING( ++ [--with-gnustl], ++ [use gnustl @<:@default=no@:>@]), ++ [AS_CASE( ++ [$withval], [no], [], [yes], [], ++ [AC_MSG_ERROR([bad value "$withval" for --with-gnustl])])], ++ [with_gnustl=no]) ++if test "x$with_gnustl" != "xno"; then ++ PKG_CHECK_MODULES(GNUSTL, gnustl) ++fi ++AC_SUBST(GNUSTL_LIBS) ++AC_SUBST(GNUSTL_CFLAGS) ++ + + # Borrowed from gst-plugins-bad + AC_CHECK_HEADER(MobileCoreServices/MobileCoreServices.h, HAVE_IOS="yes", HAVE_IOS="no", [-]) +@@ -104,7 +119,7 @@ AS_IF([test "x$enable_neon" != "xno"], + AM_CONDITIONAL([HAVE_NEON], [test "x$HAVE_NEON" = "x1"]) + + COMMON_CFLAGS="-DWEBRTC_AUDIO_PROCESSING_ONLY_BUILD ${PLATFORM_CFLAGS} ${OS_CFLAGS} ${ARCH_CFLAGS} -DNDEBUG -I\$(top_srcdir)" +-COMMON_CXXFLAGS="-std=c++11 -DWEBRTC_AUDIO_PROCESSING_ONLY_BUILD ${PLATFORM_CFLAGS} ${OS_CFLAGS} ${ARCH_CFLAGS} -DNDEBUG -I\$(top_srcdir)" ++COMMON_CXXFLAGS="-std=c++11 -DWEBRTC_AUDIO_PROCESSING_ONLY_BUILD ${PLATFORM_CFLAGS} ${OS_CFLAGS} ${ARCH_CFLAGS} ${GNUSTL_CFLAGS} -DNDEBUG -I\$(top_srcdir)" + AC_SUBST([COMMON_CFLAGS]) + AC_SUBST([COMMON_CXXFLAGS]) + +diff --git a/webrtc/modules/audio_processing/Makefile.am b/webrtc/modules/audio_processing/Makefile.am +index 30ca898..eb9bfc0 100644 +--- a/webrtc/modules/audio_processing/Makefile.am ++++ b/webrtc/modules/audio_processing/Makefile.am +@@ -173,6 +173,7 @@ libwebrtc_audio_processing_la_LIBADD = $(top_builddir)/webrtc/libwebrtc.la \ + $(top_builddir)/webrtc/common_audio/libcommon_audio.la \ + $(top_builddir)/webrtc/modules/audio_coding/libaudio_coding.la \ + $(LIBWEBRTC_PRIVATEARCH) \ ++ $(GNUSTL_LIBS) \ + -lpthread + libwebrtc_audio_processing_la_LDFLAGS = $(AM_LDFLAGS) \ + -Wl,--no-undefined \ +-- +cgit v0.10.2 + diff --git a/srcpkgs/webrtc-audio-processing/patches/003.patch b/srcpkgs/webrtc-audio-processing/patches/003.patch new file mode 100644 index 0000000000..ba24370da2 --- /dev/null +++ b/srcpkgs/webrtc-audio-processing/patches/003.patch @@ -0,0 +1,27 @@ +From 44cf7726cac66c88afa0a752aff461e0c2918ebd Mon Sep 17 00:00:00 2001 +From: Nicolas Dufresne +Date: Thu, 30 Jun 2016 16:49:16 -0400 +Subject: build: Don't blindly link to pthread + +This otherwise breaks the build on Android and Windows. The flag is +required on some Linux builds, and is readded in a subsequent commit. + +https://bugs.freedesktop.org/show_bug.cgi?id=96754 + +diff --git a/webrtc/modules/audio_processing/Makefile.am b/webrtc/modules/audio_processing/Makefile.am +index eb9bfc0..8e45e3d 100644 +--- a/webrtc/modules/audio_processing/Makefile.am ++++ b/webrtc/modules/audio_processing/Makefile.am +@@ -173,8 +173,7 @@ libwebrtc_audio_processing_la_LIBADD = $(top_builddir)/webrtc/libwebrtc.la \ + $(top_builddir)/webrtc/common_audio/libcommon_audio.la \ + $(top_builddir)/webrtc/modules/audio_coding/libaudio_coding.la \ + $(LIBWEBRTC_PRIVATEARCH) \ +- $(GNUSTL_LIBS) \ +- -lpthread ++ $(GNUSTL_LIBS) + libwebrtc_audio_processing_la_LDFLAGS = $(AM_LDFLAGS) \ + -Wl,--no-undefined \ + -version-info $(LIBWEBRTC_AUDIO_PROCESSING_VERSION_INFO) +-- +cgit v0.10.2 + diff --git a/srcpkgs/webrtc-audio-processing/patches/004.patch b/srcpkgs/webrtc-audio-processing/patches/004.patch new file mode 100644 index 0000000000..13c1cf253d --- /dev/null +++ b/srcpkgs/webrtc-audio-processing/patches/004.patch @@ -0,0 +1,30 @@ +From 12ac8441f75bab2a256278926fe32450a311af1b Mon Sep 17 00:00:00 2001 +From: Nicolas Dufresne +Date: Mon, 4 Jul 2016 15:07:48 -0400 +Subject: build: Add required define for Windows + +This will also add it to the .pc file as WEBRTC_WIN leaks into the +public interface and undefined __STRICT_ANSI__ so M_PI is available. + +https://bugs.freedesktop.org/show_bug.cgi?id=96754 + +diff --git a/configure.ac b/configure.ac +index f34be72..ccaa758 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -65,8 +65,11 @@ AS_CASE(["${host}"], + [OS_FLAGS="-DWEBRTC_MAC -DWEBRTC_IOS"], + [OS_FLAGS="-DWEBRTC_MAC"]) + PLATFORM_CFLAGS="-DWEBRTC_POSIX" ++ ], ++ [*-mingw32*], ++ [ ++ PLATFORM_CFLAGS="-DWEBRTC_WIN -U__STRICT_ANSI__" + ] +- # FIXME: Add Windows support + ) + AC_SUBST(PLATFORM_CFLAGS) + +-- +cgit v0.10.2 + diff --git a/srcpkgs/webrtc-audio-processing/patches/005.patch b/srcpkgs/webrtc-audio-processing/patches/005.patch new file mode 100644 index 0000000000..3fac04a556 --- /dev/null +++ b/srcpkgs/webrtc-audio-processing/patches/005.patch @@ -0,0 +1,76 @@ +From bf6b9de143edfe45ec6f40845510bdb655f866aa Mon Sep 17 00:00:00 2001 +From: Nicolas Dufresne +Date: Mon, 4 Jul 2016 16:02:29 -0400 +Subject: build: Properly select the right system wrappers + +This is needed for windows build to be usable. + +https://bugs.freedesktop.org/show_bug.cgi?id=96754 + +diff --git a/configure.ac b/configure.ac +index ccaa758..92706e7 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -53,11 +53,13 @@ AS_CASE(["${host}"], + [ + OS_CFLAGS="-DWEBRTC_ANDROID -DWEBRTC_LINUX" + PLATFORM_CFLAGS="-DWEBRTC_POSIX" ++ HAVE_POSIX=1 + ], + [*-*linux*], + [ + OS_CFLAGS="-DWEBRTC_LINUX" + PLATFORM_CFLAGS="-DWEBRTC_POSIX" ++ HAVE_POSIX=1 + ], + [*-*darwin*], + [ +@@ -65,13 +67,17 @@ AS_CASE(["${host}"], + [OS_FLAGS="-DWEBRTC_MAC -DWEBRTC_IOS"], + [OS_FLAGS="-DWEBRTC_MAC"]) + PLATFORM_CFLAGS="-DWEBRTC_POSIX" ++ HAVE_POSIX=1 + ], + [*-mingw32*], + [ + PLATFORM_CFLAGS="-DWEBRTC_WIN -U__STRICT_ANSI__" ++ HAVE_WIN=1 + ] + ) + AC_SUBST(PLATFORM_CFLAGS) ++AM_CONDITIONAL(HAVE_POSIX, [test "x${HAVE_POSIX}" = "x1"]) ++AM_CONDITIONAL(HAVE_WIN, [test "x${HAVE_WIN}" = "x1"]) + + AS_CASE(["${host_cpu}"], + [i?86|x86_64], +diff --git a/webrtc/system_wrappers/Makefile.am b/webrtc/system_wrappers/Makefile.am +index 6c9f4ee..8215013 100644 +--- a/webrtc/system_wrappers/Makefile.am ++++ b/webrtc/system_wrappers/Makefile.am +@@ -42,13 +42,21 @@ libsystem_wrappers_la_SOURCES = include/aligned_malloc.h \ + source/trace_impl.h \ + source/trace_posix.h \ + source/trace_win.h +-# This assumes that we want the POSIX implementation -- should eventually be +-# converted to a conditional to include Windows support ++if HAVE_POSIX + libsystem_wrappers_la_SOURCES += source/critical_section_posix.cc \ + source/event_timer_posix.cc \ + source/rw_lock_posix.cc \ + source/thread_posix.cc \ + source/trace_posix.cc ++endif ++if HAVE_WIN ++libsystem_wrappers_la_SOURCES += source/critical_section_win.cc \ ++ source/event_timer_win.cc \ ++ source/rw_lock_win.cc \ ++ source/rw_lock_generic.cc \ ++ source/thread_win.cc \ ++ source/trace_win.cc ++endif + libsystem_wrappers_la_CXXFLAGS = $(AM_CXXFLAGS) $(COMMON_CXXFLAGS) + + EXTRA_DIST = BUILD.gn \ +-- +cgit v0.10.2 + diff --git a/srcpkgs/webrtc-audio-processing/patches/006.patch b/srcpkgs/webrtc-audio-processing/patches/006.patch new file mode 100644 index 0000000000..6edabbdac2 --- /dev/null +++ b/srcpkgs/webrtc-audio-processing/patches/006.patch @@ -0,0 +1,23 @@ +From db2f422578140ba6aaf7a2a1d54caacf832fbee2 Mon Sep 17 00:00:00 2001 +From: Nicolas Dufresne +Date: Mon, 4 Jul 2016 17:54:45 -0400 +Subject: build: Define MSVC _WIN32 so we can build on mingw + +https://bugs.freedesktop.org/show_bug.cgi?id=96754 + +diff --git a/configure.ac b/configure.ac +index 92706e7..5ec8517 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -71,7 +71,7 @@ AS_CASE(["${host}"], + ], + [*-mingw32*], + [ +- PLATFORM_CFLAGS="-DWEBRTC_WIN -U__STRICT_ANSI__" ++ PLATFORM_CFLAGS="-DWEBRTC_WIN -D_WIN32 -U__STRICT_ANSI__" + HAVE_WIN=1 + ] + ) +-- +cgit v0.10.2 + diff --git a/srcpkgs/webrtc-audio-processing/patches/007.patch b/srcpkgs/webrtc-audio-processing/patches/007.patch new file mode 100644 index 0000000000..4eae5c3814 --- /dev/null +++ b/srcpkgs/webrtc-audio-processing/patches/007.patch @@ -0,0 +1,601 @@ +From 6ad2f51e9e94daf6b5925590c4cc08459a2e0833 Mon Sep 17 00:00:00 2001 +From: Nicolas Dufresne +Date: Mon, 4 Jul 2016 22:12:20 -0400 +Subject: Add missing windows conditions variable + +Those are used by generic RW lock implementation. + +https://bugs.freedesktop.org/show_bug.cgi?id=96754 + +diff --git a/webrtc/system_wrappers/Makefile.am b/webrtc/system_wrappers/Makefile.am +index 8215013..09973a7 100644 +--- a/webrtc/system_wrappers/Makefile.am ++++ b/webrtc/system_wrappers/Makefile.am +@@ -2,6 +2,7 @@ noinst_LTLIBRARIES = libsystem_wrappers.la + + noinst_HEADERS = include/aligned_array.h \ + include/asm_defines.h \ ++ include/condition_variable_wrapper.h \ + include/compile_assert_c.h \ + include/event_wrapper.h \ + include/scoped_vector.h \ +@@ -42,27 +43,49 @@ libsystem_wrappers_la_SOURCES = include/aligned_malloc.h \ + source/trace_impl.h \ + source/trace_posix.h \ + source/trace_win.h ++ ++EXTRA_DIST = BUILD.gn ++ + if HAVE_POSIX + libsystem_wrappers_la_SOURCES += source/critical_section_posix.cc \ + source/event_timer_posix.cc \ + source/rw_lock_posix.cc \ + source/thread_posix.cc \ + source/trace_posix.cc ++else ++EXTRA_DIST += source/critical_section_posix.cc \ ++ source/event_timer_posix.cc \ ++ source/rw_lock_posix.cc \ ++ source/thread_posix.cc \ ++ source/trace_posix.cc + endif ++ + if HAVE_WIN +-libsystem_wrappers_la_SOURCES += source/critical_section_win.cc \ ++libsystem_wrappers_la_SOURCES += include/fix_interlocked_exchange_pointer_win.h \ ++ source/critical_section_win.cc \ ++ source/condition_variable.cc \ ++ source/condition_variable_event_win.cc \ ++ source/condition_variable_event_win.h \ ++ source/condition_variable_native_win.cc \ ++ source/condition_variable_native_win.h \ + source/event_timer_win.cc \ + source/rw_lock_win.cc \ + source/rw_lock_generic.cc \ + source/thread_win.cc \ + source/trace_win.cc ++else ++EXTRA_DIST += include/fix_interlocked_exchange_pointer_win.h \ ++ source/critical_section_win.cc \ ++ source/condition_variable.cc \ ++ source/condition_variable_event_win.cc \ ++ source/condition_variable_event_win.h \ ++ source/condition_variable_native_win.cc \ ++ source/condition_variable_native_win.h \ ++ source/event_timer_win.cc \ ++ source/rw_lock_generic.cc \ ++ source/rw_lock_win.cc \ ++ source/thread_win.cc \ ++ source/trace_win.cc + endif +-libsystem_wrappers_la_CXXFLAGS = $(AM_CXXFLAGS) $(COMMON_CXXFLAGS) + +-EXTRA_DIST = BUILD.gn \ +- source/critical_section_win.cc \ +- source/event_timer_win.cc \ +- source/rw_lock_generic.cc \ +- source/rw_lock_win.cc \ +- source/thread_win.cc \ +- source/trace_win.cc ++libsystem_wrappers_la_CXXFLAGS = $(AM_CXXFLAGS) $(COMMON_CXXFLAGS) +diff --git a/webrtc/system_wrappers/include/condition_variable_wrapper.h b/webrtc/system_wrappers/include/condition_variable_wrapper.h +new file mode 100644 +index 0000000..37ca30f +--- /dev/null ++++ b/webrtc/system_wrappers/include/condition_variable_wrapper.h +@@ -0,0 +1,42 @@ ++/* ++ * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. ++ * ++ * Use of this source code is governed by a BSD-style license ++ * that can be found in the LICENSE file in the root of the source ++ * tree. An additional intellectual property rights grant can be found ++ * in the file PATENTS. All contributing project authors may ++ * be found in the AUTHORS file in the root of the source tree. ++ */ ++ ++#ifndef WEBRTC_SYSTEM_WRAPPERS_INCLUDE_CONDITION_VARIABLE_WRAPPER_H_ ++#define WEBRTC_SYSTEM_WRAPPERS_INCLUDE_CONDITION_VARIABLE_WRAPPER_H_ ++ ++namespace webrtc { ++ ++class CriticalSectionWrapper; ++ ++class ConditionVariableWrapper { ++ public: ++ // Factory method, constructor disabled. ++ static ConditionVariableWrapper* CreateConditionVariable(); ++ ++ virtual ~ConditionVariableWrapper() {} ++ ++ // Calling thread will atomically release crit_sect and wait until next ++ // some other thread calls Wake() or WakeAll(). ++ virtual void SleepCS(CriticalSectionWrapper& crit_sect) = 0; ++ ++ // Same as above but with a timeout. ++ virtual bool SleepCS(CriticalSectionWrapper& crit_sect, ++ unsigned long max_time_in_ms) = 0; ++ ++ // Wakes one thread calling SleepCS(). ++ virtual void Wake() = 0; ++ ++ // Wakes all threads calling SleepCS(). ++ virtual void WakeAll() = 0; ++}; ++ ++} // namespace webrtc ++ ++#endif // WEBRTC_SYSTEM_WRAPPERS_INCLUDE_CONDITION_VARIABLE_WRAPPER_H_ +diff --git a/webrtc/system_wrappers/source/condition_variable.cc b/webrtc/system_wrappers/source/condition_variable.cc +new file mode 100644 +index 0000000..f5ae93a +--- /dev/null ++++ b/webrtc/system_wrappers/source/condition_variable.cc +@@ -0,0 +1,41 @@ ++/* ++ * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. ++ * ++ * Use of this source code is governed by a BSD-style license ++ * that can be found in the LICENSE file in the root of the source ++ * tree. An additional intellectual property rights grant can be found ++ * in the file PATENTS. All contributing project authors may ++ * be found in the AUTHORS file in the root of the source tree. ++ */ ++ ++#include "webrtc/system_wrappers/include/condition_variable_wrapper.h" ++ ++#if defined(_WIN32) ++#include ++#include "webrtc/system_wrappers/source/condition_variable_event_win.h" ++#include "webrtc/system_wrappers/source/condition_variable_native_win.h" ++#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC) ++#include ++#include "webrtc/system_wrappers/source/condition_variable_posix.h" ++#endif ++ ++namespace webrtc { ++ ++ConditionVariableWrapper* ConditionVariableWrapper::CreateConditionVariable() { ++#if defined(_WIN32) ++ // Try to create native condition variable implementation. ++ ConditionVariableWrapper* ret_val = ConditionVariableNativeWin::Create(); ++ if (!ret_val) { ++ // Native condition variable implementation does not exist. Create generic ++ // condition variable based on events. ++ ret_val = new ConditionVariableEventWin(); ++ } ++ return ret_val; ++#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC) ++ return ConditionVariablePosix::Create(); ++#else ++ return NULL; ++#endif ++} ++ ++} // namespace webrtc +diff --git a/webrtc/system_wrappers/source/condition_variable_event_win.cc b/webrtc/system_wrappers/source/condition_variable_event_win.cc +new file mode 100644 +index 0000000..41b019d +--- /dev/null ++++ b/webrtc/system_wrappers/source/condition_variable_event_win.cc +@@ -0,0 +1,195 @@ ++/* ++Source: ++http://www1.cse.wustl.edu/~schmidt/ACE-copying.html ++ ++License: ++Copyright and Licensing Information for ACE(TM), TAO(TM), CIAO(TM), DAnCE(TM), ++and CoSMIC(TM) ++ ++ACE(TM), TAO(TM), CIAO(TM), DAnCE>(TM), and CoSMIC(TM) (henceforth referred to ++as "DOC software") are copyrighted by Douglas C. Schmidt and his research ++group at Washington University, University of California, Irvine, and ++Vanderbilt University, Copyright (c) 1993-2009, all rights reserved. Since DOC ++software is open-source, freely available software, you are free to use, ++modify, copy, and distribute--perpetually and irrevocably--the DOC software ++source code and object code produced from the source, as well as copy and ++distribute modified versions of this software. You must, however, include this ++copyright statement along with any code built using DOC software that you ++release. No copyright statement needs to be provided if you just ship binary ++executables of your software products. ++You can use DOC software in commercial and/or binary software releases and are ++under no obligation to redistribute any of your source code that is built ++using DOC software. Note, however, that you may not misappropriate the DOC ++software code, such as copyrighting it yourself or claiming authorship of the ++DOC software code, in a way that will prevent DOC software from being ++distributed freely using an open-source development model. You needn't inform ++anyone that you're using DOC software in your software, though we encourage ++you to let us know so we can promote your project in the DOC software success ++stories. ++ ++The ACE, TAO, CIAO, DAnCE, and CoSMIC web sites are maintained by the DOC ++Group at the Institute for Software Integrated Systems (ISIS) and the Center ++for Distributed Object Computing of Washington University, St. Louis for the ++development of open-source software as part of the open-source software ++community. Submissions are provided by the submitter ``as is'' with no ++warranties whatsoever, including any warranty of merchantability, ++noninfringement of third party intellectual property, or fitness for any ++particular purpose. In no event shall the submitter be liable for any direct, ++indirect, special, exemplary, punitive, or consequential damages, including ++without limitation, lost profits, even if advised of the possibility of such ++damages. Likewise, DOC software is provided as is with no warranties of any ++kind, including the warranties of design, merchantability, and fitness for a ++particular purpose, noninfringement, or arising from a course of dealing, ++usage or trade practice. Washington University, UC Irvine, Vanderbilt ++University, their employees, and students shall have no liability with respect ++to the infringement of copyrights, trade secrets or any patents by DOC ++software or any part thereof. Moreover, in no event will Washington ++University, UC Irvine, or Vanderbilt University, their employees, or students ++be liable for any lost revenue or profits or other special, indirect and ++consequential damages. ++ ++DOC software is provided with no support and without any obligation on the ++part of Washington University, UC Irvine, Vanderbilt University, their ++employees, or students to assist in its use, correction, modification, or ++enhancement. A number of companies around the world provide commercial support ++for DOC software, however. DOC software is Y2K-compliant, as long as the ++underlying OS platform is Y2K-compliant. Likewise, DOC software is compliant ++with the new US daylight savings rule passed by Congress as "The Energy Policy ++Act of 2005," which established new daylight savings times (DST) rules for the ++United States that expand DST as of March 2007. Since DOC software obtains ++time/date and calendaring information from operating systems users will not be ++affected by the new DST rules as long as they upgrade their operating systems ++accordingly. ++ ++The names ACE(TM), TAO(TM), CIAO(TM), DAnCE(TM), CoSMIC(TM), Washington ++University, UC Irvine, and Vanderbilt University, may not be used to endorse ++or promote products or services derived from this source without express ++written permission from Washington University, UC Irvine, or Vanderbilt ++University. This license grants no permission to call products or services ++derived from this source ACE(TM), TAO(TM), CIAO(TM), DAnCE(TM), or CoSMIC(TM), ++nor does it grant permission for the name Washington University, UC Irvine, or ++Vanderbilt University to appear in their names. ++*/ ++ ++/* ++ * This source code contain modifications to the original source code ++ * which can be found here: ++ * http://www.cs.wustl.edu/~schmidt/win32-cv-1.html (section 3.2). ++ * Modifications: ++ * 1) Dynamic detection of native support for condition variables. ++ * 2) Use of WebRTC defined types and classes. Renaming of some functions. ++ * 3) Introduction of a second event for wake all functionality. This prevents ++ * a thread from spinning on the same condition variable, preventing other ++ * threads from waking up. ++ */ ++ ++#include "webrtc/system_wrappers/source/condition_variable_event_win.h" ++#include "webrtc/system_wrappers/source/critical_section_win.h" ++ ++namespace webrtc { ++ ++ConditionVariableEventWin::ConditionVariableEventWin() : eventID_(WAKEALL_0) { ++ memset(&num_waiters_[0], 0, sizeof(num_waiters_)); ++ ++ InitializeCriticalSection(&num_waiters_crit_sect_); ++ ++ events_[WAKEALL_0] = CreateEvent(NULL, // no security attributes ++ TRUE, // manual-reset, sticky event ++ FALSE, // initial state non-signaled ++ NULL); // no name for event ++ ++ events_[WAKEALL_1] = CreateEvent(NULL, // no security attributes ++ TRUE, // manual-reset, sticky event ++ FALSE, // initial state non-signaled ++ NULL); // no name for event ++ ++ events_[WAKE] = CreateEvent(NULL, // no security attributes ++ FALSE, // auto-reset, sticky event ++ FALSE, // initial state non-signaled ++ NULL); // no name for event ++} ++ ++ConditionVariableEventWin::~ConditionVariableEventWin() { ++ CloseHandle(events_[WAKE]); ++ CloseHandle(events_[WAKEALL_1]); ++ CloseHandle(events_[WAKEALL_0]); ++ ++ DeleteCriticalSection(&num_waiters_crit_sect_); ++} ++ ++void ConditionVariableEventWin::SleepCS(CriticalSectionWrapper& crit_sect) { ++ SleepCS(crit_sect, INFINITE); ++} ++ ++bool ConditionVariableEventWin::SleepCS(CriticalSectionWrapper& crit_sect, ++ unsigned long max_time_in_ms) { ++ EnterCriticalSection(&num_waiters_crit_sect_); ++ ++ // Get the eventID for the event that will be triggered by next ++ // WakeAll() call and start waiting for it. ++ const EventWakeUpType eventID = ++ (WAKEALL_0 == eventID_) ? WAKEALL_1 : WAKEALL_0; ++ ++ ++(num_waiters_[eventID]); ++ LeaveCriticalSection(&num_waiters_crit_sect_); ++ ++ CriticalSectionWindows* cs = ++ static_cast(&crit_sect); ++ LeaveCriticalSection(&cs->crit); ++ HANDLE events[2]; ++ events[0] = events_[WAKE]; ++ events[1] = events_[eventID]; ++ const DWORD result = WaitForMultipleObjects(2, // Wait on 2 events. ++ events, ++ FALSE, // Wait for either. ++ max_time_in_ms); ++ ++ const bool ret_val = (result != WAIT_TIMEOUT); ++ ++ EnterCriticalSection(&num_waiters_crit_sect_); ++ --(num_waiters_[eventID]); ++ ++ // Last waiter should only be true for WakeAll(). WakeAll() correspond ++ // to position 1 in events[] -> (result == WAIT_OBJECT_0 + 1) ++ const bool last_waiter = (result == WAIT_OBJECT_0 + 1) && ++ (num_waiters_[eventID] == 0); ++ LeaveCriticalSection(&num_waiters_crit_sect_); ++ ++ if (last_waiter) { ++ // Reset/unset the WakeAll() event since all threads have been ++ // released. ++ ResetEvent(events_[eventID]); ++ } ++ ++ EnterCriticalSection(&cs->crit); ++ return ret_val; ++} ++ ++void ConditionVariableEventWin::Wake() { ++ EnterCriticalSection(&num_waiters_crit_sect_); ++ const bool have_waiters = (num_waiters_[WAKEALL_0] > 0) || ++ (num_waiters_[WAKEALL_1] > 0); ++ LeaveCriticalSection(&num_waiters_crit_sect_); ++ ++ if (have_waiters) { ++ SetEvent(events_[WAKE]); ++ } ++} ++ ++void ConditionVariableEventWin::WakeAll() { ++ EnterCriticalSection(&num_waiters_crit_sect_); ++ ++ // Update current WakeAll() event ++ eventID_ = (WAKEALL_0 == eventID_) ? WAKEALL_1 : WAKEALL_0; ++ ++ // Trigger current event ++ const EventWakeUpType eventID = eventID_; ++ const bool have_waiters = num_waiters_[eventID] > 0; ++ LeaveCriticalSection(&num_waiters_crit_sect_); ++ ++ if (have_waiters) { ++ SetEvent(events_[eventID]); ++ } ++} ++ ++} // namespace webrtc +diff --git a/webrtc/system_wrappers/source/condition_variable_event_win.h b/webrtc/system_wrappers/source/condition_variable_event_win.h +new file mode 100644 +index 0000000..cdcef7d +--- /dev/null ++++ b/webrtc/system_wrappers/source/condition_variable_event_win.h +@@ -0,0 +1,46 @@ ++/* ++ * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. ++ * ++ * Use of this source code is governed by a BSD-style license ++ * that can be found in the LICENSE file in the root of the source ++ * tree. An additional intellectual property rights grant can be found ++ * in the file PATENTS. All contributing project authors may ++ * be found in the AUTHORS file in the root of the source tree. ++ */ ++ ++#ifndef WEBRTC_SYSTEM_WRAPPERS_SOURCE_CONDITION_VARIABLE_EVENT_WIN_H_ ++#define WEBRTC_SYSTEM_WRAPPERS_SOURCE_CONDITION_VARIABLE_EVENT_WIN_H_ ++ ++#include ++ ++#include "webrtc/system_wrappers/include/condition_variable_wrapper.h" ++ ++namespace webrtc { ++ ++class ConditionVariableEventWin : public ConditionVariableWrapper { ++ public: ++ ConditionVariableEventWin(); ++ virtual ~ConditionVariableEventWin(); ++ ++ void SleepCS(CriticalSectionWrapper& crit_sect); ++ bool SleepCS(CriticalSectionWrapper& crit_sect, unsigned long max_time_inMS); ++ void Wake(); ++ void WakeAll(); ++ ++ private: ++ enum EventWakeUpType { ++ WAKEALL_0 = 0, ++ WAKEALL_1 = 1, ++ WAKE = 2, ++ EVENT_COUNT = 3 ++ }; ++ ++ unsigned int num_waiters_[2]; ++ EventWakeUpType eventID_; ++ CRITICAL_SECTION num_waiters_crit_sect_; ++ HANDLE events_[EVENT_COUNT]; ++}; ++ ++} // namespace webrtc ++ ++#endif // WEBRTC_SYSTEM_WRAPPERS_SOURCE_CONDITION_VARIABLE_EVENT_WIN_H_ +diff --git a/webrtc/system_wrappers/source/condition_variable_native_win.cc b/webrtc/system_wrappers/source/condition_variable_native_win.cc +new file mode 100644 +index 0000000..45225f2 +--- /dev/null ++++ b/webrtc/system_wrappers/source/condition_variable_native_win.cc +@@ -0,0 +1,104 @@ ++/* ++ * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. ++ * ++ * Use of this source code is governed by a BSD-style license ++ * that can be found in the LICENSE file in the root of the source ++ * tree. An additional intellectual property rights grant can be found ++ * in the file PATENTS. All contributing project authors may ++ * be found in the AUTHORS file in the root of the source tree. ++ */ ++ ++#include "webrtc/system_wrappers/include/trace.h" ++#include "webrtc/system_wrappers/source/condition_variable_native_win.h" ++#include "webrtc/system_wrappers/source/critical_section_win.h" ++ ++namespace webrtc { ++ ++static HMODULE library = NULL; ++static bool win_support_condition_variables_primitive = false; ++ ++PInitializeConditionVariable PInitializeConditionVariable_; ++PSleepConditionVariableCS PSleepConditionVariableCS_; ++PWakeConditionVariable PWakeConditionVariable_; ++PWakeAllConditionVariable PWakeAllConditionVariable_; ++ ++typedef void (WINAPI *PInitializeConditionVariable)(PCONDITION_VARIABLE); ++typedef BOOL (WINAPI *PSleepConditionVariableCS)(PCONDITION_VARIABLE, ++ PCRITICAL_SECTION, DWORD); ++typedef void (WINAPI *PWakeConditionVariable)(PCONDITION_VARIABLE); ++typedef void (WINAPI *PWakeAllConditionVariable)(PCONDITION_VARIABLE); ++ ++ConditionVariableNativeWin::ConditionVariableNativeWin() { ++} ++ ++ConditionVariableNativeWin::~ConditionVariableNativeWin() { ++} ++ ++ConditionVariableWrapper* ConditionVariableNativeWin::Create() { ++ ConditionVariableNativeWin* ret_val = new ConditionVariableNativeWin(); ++ if (!ret_val->Init()) { ++ delete ret_val; ++ return NULL; ++ } ++ return ret_val; ++} ++ ++bool ConditionVariableNativeWin::Init() { ++ if (!library) { ++ // Native implementation is supported on Vista+. ++ library = LoadLibrary(TEXT("Kernel32.dll")); ++ // TODO(henrike): this code results in an attempt to load the above dll ++ // every time the previous attempt failed. Only try to load once. ++ if (library) { ++ // TODO(henrike): not thread safe as reading and writing to library is not ++ // serialized. Fix. ++ WEBRTC_TRACE(kTraceStateInfo, kTraceUtility, -1, "Loaded Kernel.dll"); ++ ++ PInitializeConditionVariable_ = ++ (PInitializeConditionVariable) GetProcAddress( ++ library, "InitializeConditionVariable"); ++ PSleepConditionVariableCS_ = (PSleepConditionVariableCS) GetProcAddress( ++ library, "SleepConditionVariableCS"); ++ PWakeConditionVariable_ = (PWakeConditionVariable) GetProcAddress( ++ library, "WakeConditionVariable"); ++ PWakeAllConditionVariable_ = (PWakeAllConditionVariable) GetProcAddress( ++ library, "WakeAllConditionVariable"); ++ ++ if (PInitializeConditionVariable_ && PSleepConditionVariableCS_ ++ && PWakeConditionVariable_ && PWakeAllConditionVariable_) { ++ WEBRTC_TRACE( ++ kTraceStateInfo, kTraceUtility, -1, ++ "Loaded native condition variables"); ++ win_support_condition_variables_primitive = true; ++ } ++ } ++ } ++ if (!win_support_condition_variables_primitive) { ++ return false; ++ } ++ PInitializeConditionVariable_(&condition_variable_); ++ return true; ++} ++ ++void ConditionVariableNativeWin::SleepCS(CriticalSectionWrapper& crit_sect) { ++ SleepCS(crit_sect, INFINITE); ++} ++ ++bool ConditionVariableNativeWin::SleepCS(CriticalSectionWrapper& crit_sect, ++ unsigned long max_time_in_ms) { ++ CriticalSectionWindows* cs = ++ static_cast(&crit_sect); ++ BOOL ret_val = PSleepConditionVariableCS_(&condition_variable_, ++ &(cs->crit), max_time_in_ms); ++ return ret_val != 0; ++} ++ ++void ConditionVariableNativeWin::Wake() { ++ PWakeConditionVariable_(&condition_variable_); ++} ++ ++void ConditionVariableNativeWin::WakeAll() { ++ PWakeAllConditionVariable_(&condition_variable_); ++} ++ ++} // namespace webrtc +diff --git a/webrtc/system_wrappers/source/condition_variable_native_win.h b/webrtc/system_wrappers/source/condition_variable_native_win.h +new file mode 100644 +index 0000000..c22787f +--- /dev/null ++++ b/webrtc/system_wrappers/source/condition_variable_native_win.h +@@ -0,0 +1,54 @@ ++/* ++ * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. ++ * ++ * Use of this source code is governed by a BSD-style license ++ * that can be found in the LICENSE file in the root of the source ++ * tree. An additional intellectual property rights grant can be found ++ * in the file PATENTS. All contributing project authors may ++ * be found in the AUTHORS file in the root of the source tree. ++ */ ++ ++#ifndef WEBRTC_SYSTEM_WRAPPERS_SOURCE_CONDITION_VARIABLE_NATIVE_WIN_H_ ++#define WEBRTC_SYSTEM_WRAPPERS_SOURCE_CONDITION_VARIABLE_NATIVE_WIN_H_ ++ ++#include ++ ++#include "webrtc/system_wrappers/include/condition_variable_wrapper.h" ++ ++namespace webrtc { ++ ++#if !defined CONDITION_VARIABLE_INIT ++typedef struct RTL_CONDITION_VARIABLE_ { ++ void* Ptr; ++} RTL_CONDITION_VARIABLE, *PRTL_CONDITION_VARIABLE; ++ ++typedef RTL_CONDITION_VARIABLE CONDITION_VARIABLE, *PCONDITION_VARIABLE; ++#endif ++ ++typedef void (WINAPI* PInitializeConditionVariable)(PCONDITION_VARIABLE); ++typedef BOOL (WINAPI* PSleepConditionVariableCS)(PCONDITION_VARIABLE, ++ PCRITICAL_SECTION, DWORD); ++typedef void (WINAPI* PWakeConditionVariable)(PCONDITION_VARIABLE); ++typedef void (WINAPI* PWakeAllConditionVariable)(PCONDITION_VARIABLE); ++ ++class ConditionVariableNativeWin : public ConditionVariableWrapper { ++ public: ++ static ConditionVariableWrapper* Create(); ++ virtual ~ConditionVariableNativeWin(); ++ ++ void SleepCS(CriticalSectionWrapper& crit_sect); ++ bool SleepCS(CriticalSectionWrapper& crit_sect, unsigned long max_time_inMS); ++ void Wake(); ++ void WakeAll(); ++ ++ private: ++ ConditionVariableNativeWin(); ++ ++ bool Init(); ++ ++ CONDITION_VARIABLE condition_variable_; ++}; ++ ++} // namespace webrtc ++ ++#endif // WEBRTC_SYSTEM_WRAPPERS_SOURCE_CONDITION_VARIABLE_NATIVE_WIN_H_ +-- +cgit v0.10.2 + diff --git a/srcpkgs/webrtc-audio-processing/patches/008.patch b/srcpkgs/webrtc-audio-processing/patches/008.patch new file mode 100644 index 0000000000..cf145fcb9f --- /dev/null +++ b/srcpkgs/webrtc-audio-processing/patches/008.patch @@ -0,0 +1,34 @@ +From 75ef0de24167daa84c11774f4bc9d1b4a9eaacfa Mon Sep 17 00:00:00 2001 +From: Nicolas Dufresne +Date: Tue, 5 Jul 2016 18:07:45 -0400 +Subject: build: Protect against unsupported CPU types + + +diff --git a/configure.ac b/configure.ac +index 5ec8517..1fcbd53 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -73,7 +73,8 @@ AS_CASE(["${host}"], + [ + PLATFORM_CFLAGS="-DWEBRTC_WIN -D_WIN32 -U__STRICT_ANSI__" + HAVE_WIN=1 +- ] ++ ], ++ [AC_MSG_ERROR([Unsupported host $host])] + ) + AC_SUBST(PLATFORM_CFLAGS) + AM_CONDITIONAL(HAVE_POSIX, [test "x${HAVE_POSIX}" = "x1"]) +@@ -94,8 +95,9 @@ AS_CASE(["${host_cpu}"], + [ + HAVE_ARM=1 + ARCH_CFLAGS="-DWEBRTC_ARCH_ARM" +- ] ++ ], + # FIXME: Add MIPS support, see webrtc/BUILD.gn for defines ++ [AC_MSG_ERROR([Unsupported CPU type $host_cpu])] + ) + AM_CONDITIONAL(HAVE_X86, [test "x${HAVE_X86}" = "x1"]) + AM_CONDITIONAL(HAVE_ARM, [test "x${HAVE_ARM}" = "x1"]) +-- +cgit v0.10.2 + diff --git a/srcpkgs/webrtc-audio-processing/patches/009.patch b/srcpkgs/webrtc-audio-processing/patches/009.patch new file mode 100644 index 0000000000..b1d07a15a8 --- /dev/null +++ b/srcpkgs/webrtc-audio-processing/patches/009.patch @@ -0,0 +1,24 @@ +From 1378babdf0f56938408d8137595023efe1bd7c2d Mon Sep 17 00:00:00 2001 +From: Nicolas Dufresne +Date: Tue, 5 Jul 2016 18:44:19 -0400 +Subject: osx: Fix type OS_FLAGS instead of OS_CFLAGS + + +diff --git a/configure.ac b/configure.ac +index 1fcbd53..41d521c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -64,8 +64,8 @@ AS_CASE(["${host}"], + [*-*darwin*], + [ + AS_IF([test "$HAVE_IOS" = "yes"], +- [OS_FLAGS="-DWEBRTC_MAC -DWEBRTC_IOS"], +- [OS_FLAGS="-DWEBRTC_MAC"]) ++ [OS_CFLAGS="-DWEBRTC_MAC -DWEBRTC_IOS"], ++ [OS_CFLAGS="-DWEBRTC_MAC"]) + PLATFORM_CFLAGS="-DWEBRTC_POSIX" + HAVE_POSIX=1 + ], +-- +cgit v0.10.2 + diff --git a/srcpkgs/webrtc-audio-processing/patches/010.patch b/srcpkgs/webrtc-audio-processing/patches/010.patch new file mode 100644 index 0000000000..625e1ed43d --- /dev/null +++ b/srcpkgs/webrtc-audio-processing/patches/010.patch @@ -0,0 +1,71 @@ +From c9cffb9e3d632b61465afbca5d10c36512888035 Mon Sep 17 00:00:00 2001 +From: Nicolas Dufresne +Date: Wed, 6 Jul 2016 11:32:55 -0400 +Subject: build: Sync defines and libs with build.gn + + +diff --git a/configure.ac b/configure.ac +index 41d521c..bdefd72 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -51,26 +51,29 @@ AC_CHECK_HEADER(MobileCoreServices/MobileCoreServices.h, HAVE_IOS="yes", HAVE_IO + AS_CASE(["${host}"], + [*android*], + [ +- OS_CFLAGS="-DWEBRTC_ANDROID -DWEBRTC_LINUX" ++ OS_CFLAGS="-DWEBRTC_ANDROID -DWEBRTC_LINUX -DWEBRTC_THREAD_RR -DWEBRTC_CLOCK_TYPE_REALTIME" ++ OS_LDFLAGS="-llog" + PLATFORM_CFLAGS="-DWEBRTC_POSIX" + HAVE_POSIX=1 + ], + [*-*linux*], + [ +- OS_CFLAGS="-DWEBRTC_LINUX" ++ OS_CFLAGS="-DWEBRTC_LINUX -DWEBRTC_THREAD_RR" + PLATFORM_CFLAGS="-DWEBRTC_POSIX" ++ OS_LDFLAGS="-lrt" + HAVE_POSIX=1 + ], + [*-*darwin*], + [ ++ OS_CFLAGS="-DWEBRTC_MAC -DWEBRTC_THREAD_RR -DWEBRTC_CLOCK_TYPE_REALTIME" + AS_IF([test "$HAVE_IOS" = "yes"], +- [OS_CFLAGS="-DWEBRTC_MAC -DWEBRTC_IOS"], +- [OS_CFLAGS="-DWEBRTC_MAC"]) ++ [OS_CFLAGS+=" -DWEBRTC_IOS"]) + PLATFORM_CFLAGS="-DWEBRTC_POSIX" + HAVE_POSIX=1 + ], + [*-mingw32*], + [ ++ OS_LDFLAGS="-lwinmm" + PLATFORM_CFLAGS="-DWEBRTC_WIN -D_WIN32 -U__STRICT_ANSI__" + HAVE_WIN=1 + ], +@@ -131,8 +134,10 @@ AM_CONDITIONAL([HAVE_NEON], [test "x$HAVE_NEON" = "x1"]) + + COMMON_CFLAGS="-DWEBRTC_AUDIO_PROCESSING_ONLY_BUILD ${PLATFORM_CFLAGS} ${OS_CFLAGS} ${ARCH_CFLAGS} -DNDEBUG -I\$(top_srcdir)" + COMMON_CXXFLAGS="-std=c++11 -DWEBRTC_AUDIO_PROCESSING_ONLY_BUILD ${PLATFORM_CFLAGS} ${OS_CFLAGS} ${ARCH_CFLAGS} ${GNUSTL_CFLAGS} -DNDEBUG -I\$(top_srcdir)" ++COMMON_LDFLAGS="${OS_LDFLAGS}" + AC_SUBST([COMMON_CFLAGS]) + AC_SUBST([COMMON_CXXFLAGS]) ++AC_SUBST([COMMON_LDFLAGS]) + + AC_CONFIG_FILES([ + webrtc-audio-processing.pc +diff --git a/webrtc/modules/audio_processing/Makefile.am b/webrtc/modules/audio_processing/Makefile.am +index 8e45e3d..de259f0 100644 +--- a/webrtc/modules/audio_processing/Makefile.am ++++ b/webrtc/modules/audio_processing/Makefile.am +@@ -174,7 +174,7 @@ libwebrtc_audio_processing_la_LIBADD = $(top_builddir)/webrtc/libwebrtc.la \ + $(top_builddir)/webrtc/modules/audio_coding/libaudio_coding.la \ + $(LIBWEBRTC_PRIVATEARCH) \ + $(GNUSTL_LIBS) +-libwebrtc_audio_processing_la_LDFLAGS = $(AM_LDFLAGS) \ ++libwebrtc_audio_processing_la_LDFLAGS = $(AM_LDFLAGS) $(COMMON_LDFLAGS) \ + -Wl,--no-undefined \ + -version-info $(LIBWEBRTC_AUDIO_PROCESSING_VERSION_INFO) + +-- +cgit v0.10.2 + diff --git a/srcpkgs/webrtc-audio-processing/patches/011.patch b/srcpkgs/webrtc-audio-processing/patches/011.patch new file mode 100644 index 0000000000..c2f110ca69 --- /dev/null +++ b/srcpkgs/webrtc-audio-processing/patches/011.patch @@ -0,0 +1,22 @@ +From b8be6d1095df620bf0e2b5855818fa4340244254 Mon Sep 17 00:00:00 2001 +From: Nicolas Dufresne +Date: Wed, 6 Jul 2016 13:44:15 -0400 +Subject: build: Use -no-undefined to support both clang and gcc + + +diff --git a/webrtc/modules/audio_processing/Makefile.am b/webrtc/modules/audio_processing/Makefile.am +index de259f0..5a98913 100644 +--- a/webrtc/modules/audio_processing/Makefile.am ++++ b/webrtc/modules/audio_processing/Makefile.am +@@ -175,7 +175,7 @@ libwebrtc_audio_processing_la_LIBADD = $(top_builddir)/webrtc/libwebrtc.la \ + $(LIBWEBRTC_PRIVATEARCH) \ + $(GNUSTL_LIBS) + libwebrtc_audio_processing_la_LDFLAGS = $(AM_LDFLAGS) $(COMMON_LDFLAGS) \ +- -Wl,--no-undefined \ ++ -no-undefined \ + -version-info $(LIBWEBRTC_AUDIO_PROCESSING_VERSION_INFO) + + # FIXME: The MIPS optimisations need to be hooked up once we have the +-- +cgit v0.10.2 + diff --git a/srcpkgs/webrtc-audio-processing/patches/012.patch b/srcpkgs/webrtc-audio-processing/patches/012.patch new file mode 100644 index 0000000000..773037b39a --- /dev/null +++ b/srcpkgs/webrtc-audio-processing/patches/012.patch @@ -0,0 +1,22 @@ +From 7a37a8bca386faf206fef32cd8cdf0f8ea3313d5 Mon Sep 17 00:00:00 2001 +From: Nicolas Dufresne +Date: Wed, 6 Jul 2016 13:57:00 -0400 +Subject: build: Re-add pthread linking on linux + + +diff --git a/configure.ac b/configure.ac +index bdefd72..a0c194a 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -60,7 +60,7 @@ AS_CASE(["${host}"], + [ + OS_CFLAGS="-DWEBRTC_LINUX -DWEBRTC_THREAD_RR" + PLATFORM_CFLAGS="-DWEBRTC_POSIX" +- OS_LDFLAGS="-lrt" ++ OS_LDFLAGS="-lrt -lpthread" + HAVE_POSIX=1 + ], + [*-*darwin*], +-- +cgit v0.10.2 + diff --git a/srcpkgs/webrtc-audio-processing/patches/013.patch b/srcpkgs/webrtc-audio-processing/patches/013.patch new file mode 100644 index 0000000000..f99d8a009a --- /dev/null +++ b/srcpkgs/webrtc-audio-processing/patches/013.patch @@ -0,0 +1,25 @@ +From 7d15b10fb0829d456486da6a49a84492dd3eca4f Mon Sep 17 00:00:00 2001 +From: Nicolas Dufresne +Date: Wed, 6 Jul 2016 15:18:15 -0400 +Subject: build: Add ARM 64bit support + + +diff --git a/configure.ac b/configure.ac +index a0c194a..b4b9ddf 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -99,6 +99,11 @@ AS_CASE(["${host_cpu}"], + HAVE_ARM=1 + ARCH_CFLAGS="-DWEBRTC_ARCH_ARM" + ], ++ [aarch64*], ++ [ ++ HAVE_NEON=1 ++ ARCH_CFLAGS="-DWEBRTC_HAS_NEON -DWEBRTC_ARCH_ARM64" ++ ], + # FIXME: Add MIPS support, see webrtc/BUILD.gn for defines + [AC_MSG_ERROR([Unsupported CPU type $host_cpu])] + ) +-- +cgit v0.10.2 + diff --git a/srcpkgs/webrtc-audio-processing/patches/014.patch b/srcpkgs/webrtc-audio-processing/patches/014.patch new file mode 100644 index 0000000000..689a50fd1a --- /dev/null +++ b/srcpkgs/webrtc-audio-processing/patches/014.patch @@ -0,0 +1,91 @@ +From ff77a85c28564d939d554ba264480d1876cbc316 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sat, 6 Aug 2016 11:02:43 +0200 +Subject: build: fix architecture detection + +The current architecture detection, based on the "host_cpu" part of the +tuple does not work properly for a number of reason: + + - The code assumes that if host_cpu starts with "arm" then ARM + instructions are available, which is incorrect. Indeed, Cortex-M + platforms can run Linux, they are ARM platforms (so host_cpu = arm), + but they don't support ARM instructions: they support only the + Thumb-2 instruction set. + + - The armv7 case is also not very useful, as it is not standard at all + to pass armv7 as host_cpu even if the host system is actually ARMv7 + based. + + - For the same reason, the armv8 case is not very useful: ARMv8 is + AArch64, and there is already a separate case to handle this + architecture. + +So, this commit moves away from a host_cpu based logic, and instead +tests using AC_CHECK_DECLS() the built-in definitions of the compiler: + + - If we have __ARM_ARCH_ISA_ARM defined, then it's an ARM processor + that supports the ARM instruction set (this allows to exclude Thumb-2 + only processors). + + - If we have __ARM_ARCH_7A__, then we have an ARMv7-A processor, and + we can enable the corresponding optimizations + + - Same for __aarch64__, __i386__ and __x86_64__. + +In addition, we remove the AC_MSG_ERROR() that makes the build fail for +all architectures but the ones that are explicitly supported. Indeed, +webrtc-audio-processing builds just fine for other architectures (tested +on MIPS), it's just that none of the architecture-specific optimizations +will be used. + +Signed-off-by: Thomas Petazzoni + +diff --git a/configure.ac b/configure.ac +index b4b9ddf..acbb3e2 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -83,30 +83,17 @@ AC_SUBST(PLATFORM_CFLAGS) + AM_CONDITIONAL(HAVE_POSIX, [test "x${HAVE_POSIX}" = "x1"]) + AM_CONDITIONAL(HAVE_WIN, [test "x${HAVE_WIN}" = "x1"]) + +-AS_CASE(["${host_cpu}"], +- [i?86|x86_64], +- [ +- HAVE_X86=1 +- ], +- [armv7*|armv8*], +- [ +- HAVE_ARM=1 +- HAVE_ARMV7=1 +- ARCH_CFLAGS="-DWEBRTC_ARCH_ARM -DWEBRTC_ARCH_ARM_V7" +- ], +- [arm*], +- [ +- HAVE_ARM=1 +- ARCH_CFLAGS="-DWEBRTC_ARCH_ARM" +- ], +- [aarch64*], +- [ +- HAVE_NEON=1 +- ARCH_CFLAGS="-DWEBRTC_HAS_NEON -DWEBRTC_ARCH_ARM64" +- ], +- # FIXME: Add MIPS support, see webrtc/BUILD.gn for defines +- [AC_MSG_ERROR([Unsupported CPU type $host_cpu])] +-) ++# Testing __ARM_ARCH_ISA_ARM since the code contains ARM instructions, ++# which don't work on Thumb-2 only platforms (ARMv7-M). ++AC_CHECK_DECLS([__ARM_ARCH_ISA_ARM], ++ [HAVE_ARM=1; ARCH_CFLAGS="${ARCH_CFLAGS} -DWEBRTC_ARCH_ARM"]) ++AC_CHECK_DECLS([__ARM_ARCH_7A__], ++ [HAVE_ARMV7=1; ARCH_CFLAGS="${ARCH_CFLAGS} -DWEBRTC_ARCH_ARM_V7"]) ++AC_CHECK_DECLS([__aarch64__], ++ [HAVE_NEON=1; ARCH_CFLAGS="${ARCH_CFLAGS} -DWEBRTC_HAS_NEON -DWEBRTC_ARCH_ARM64"]) ++AC_CHECK_DECLS([__i386__], [HAVE_X86=1]) ++AC_CHECK_DECLS([__x86_64__], [HAVE_X86=1]) ++ + AM_CONDITIONAL(HAVE_X86, [test "x${HAVE_X86}" = "x1"]) + AM_CONDITIONAL(HAVE_ARM, [test "x${HAVE_ARM}" = "x1"]) + AM_CONDITIONAL(HAVE_ARMV7, [test "x${HAVE_ARMV7}" = "x1"]) +-- +cgit v0.10.2 + diff --git a/srcpkgs/webrtc-audio-processing/patches/015.patch b/srcpkgs/webrtc-audio-processing/patches/015.patch new file mode 100644 index 0000000000..1c6cd894b9 --- /dev/null +++ b/srcpkgs/webrtc-audio-processing/patches/015.patch @@ -0,0 +1,23 @@ +From 0d937fbc7152f34f32cd4cd016ed623434b90796 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Sat, 6 Aug 2016 11:03:27 +0200 +Subject: doc: file invalid reference to pulseaudio mailing list + +Signed-off-by: Thomas Petazzoni + +diff --git a/README.md b/README.md +index 03de756..9133f17 100644 +--- a/README.md ++++ b/README.md +@@ -18,7 +18,7 @@ Feedback + ======== + + Patches, suggestions welcome. You can send them to the PulseAudio mailing +-list[2] or to me at the address below. ++list[3] or to me at the address below. + + -- Arun Raghavan + +-- +cgit v0.10.2 + diff --git a/srcpkgs/webrtc-audio-processing/patches/musl.patch b/srcpkgs/webrtc-audio-processing/patches/musl.patch index 3f4337ccf0..adca79b6b7 100644 --- a/srcpkgs/webrtc-audio-processing/patches/musl.patch +++ b/srcpkgs/webrtc-audio-processing/patches/musl.patch @@ -1,5 +1,5 @@ ---- webrtc/base/checks.cc.orig 2016-06-25 07:47:34.099515548 +0200 -+++ webrtc/base/checks.cc 2016-06-25 07:48:28.554122463 +0200 +--- a/webrtc/base/checks.cc.orig 2016-06-25 07:47:34.099515548 +0200 ++++ b/webrtc/base/checks.cc 2016-06-25 07:48:28.554122463 +0200 @@ -16,7 +16,7 @@ #include #include diff --git a/srcpkgs/webrtc-audio-processing/template b/srcpkgs/webrtc-audio-processing/template index 0b010915c4..fe2f9b9ad9 100644 --- a/srcpkgs/webrtc-audio-processing/template +++ b/srcpkgs/webrtc-audio-processing/template @@ -1,15 +1,24 @@ # Template file for 'webrtc-audio-processing' pkgname=webrtc-audio-processing version=0.3 -revision=1 +revision=2 build_style=gnu-configure +configure_args="--enable-neon=no" +patch_args="-p1" short_desc="AudioProcessing library based on Google's implementation of WebRTC" +hostmakedepends="automake libtool" maintainer="Juan RP " license="BSD" homepage="http://freedesktop.org/software/pulseaudio/webrtc-audio-processing" -distfiles="$homepage/$pkgname-$version.tar.xz" +distfiles="${homepage}/${pkgname}-${version}.tar.xz" checksum=756e291d4f557d88cd50c4fe3b8454ec238362d22cedb3e6173240d90f0a80fa +pre_configure() { + # Remove failing statement PKG_CHECK_MODULE(GNUSTL, gnustl) + sed -i configure.ac -e'/if test "x$with_gnustl" != "xno"; then/,+2d' + autoreconf -fi +} + post_install() { vlicense COPYING }