diff --git a/firefox-branded-icons.patch b/firefox-branded-icons.patch new file mode 100644 index 0000000000000000000000000000000000000000..f5bd6e5da16f3ee506df1af2e03a1b30b4663464 --- /dev/null +++ b/firefox-branded-icons.patch @@ -0,0 +1,50 @@ +# HG changeset patch +# Parent e0751ad74e835e80041a61ea00c2a63bf6fbe2de +# Parent 30e1a232528000620a3874de06ea515e5ef8e77f + +diff --git a/browser/branding/branding-common.mozbuild b/browser/branding/branding-common.mozbuild +--- a/browser/branding/branding-common.mozbuild ++++ b/browser/branding/branding-common.mozbuild +@@ -22,12 +22,15 @@ def FirefoxBranding(): + FINAL_TARGET_FILES.VisualElements += [ + 'VisualElements_150.png', + 'VisualElements_70.png', + ] + elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk': + FINAL_TARGET_FILES.chrome.icons.default += [ + 'default128.png', + 'default16.png', ++ 'default22.png', ++ 'default24.png', ++ 'default256.png', + 'default32.png', + 'default48.png', + 'default64.png', + ] +diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in +--- a/browser/installer/package-manifest.in ++++ b/browser/installer/package-manifest.in +@@ -236,20 +236,23 @@ + @RESPATH@/browser/chrome/browser@JAREXT@ + @RESPATH@/browser/chrome/browser.manifest + @RESPATH@/chrome/pdfjs.manifest + @RESPATH@/chrome/pdfjs/* + @RESPATH@/chrome/toolkit@JAREXT@ + @RESPATH@/chrome/toolkit.manifest + #ifdef MOZ_GTK + @RESPATH@/browser/chrome/icons/default/default16.png ++@RESPATH@/browser/chrome/icons/default/default22.png ++@RESPATH@/browser/chrome/icons/default/default24.png + @RESPATH@/browser/chrome/icons/default/default32.png + @RESPATH@/browser/chrome/icons/default/default48.png + @RESPATH@/browser/chrome/icons/default/default64.png + @RESPATH@/browser/chrome/icons/default/default128.png ++@RESPATH@/browser/chrome/icons/default/default256.png + #endif + @RESPATH@/browser/features/* + + ; [DevTools Startup Files] + @RESPATH@/browser/chrome/devtools-startup@JAREXT@ + @RESPATH@/browser/chrome/devtools-startup.manifest + + ; DevTools diff --git a/mozilla-bmo1568145.patch b/mozilla-bmo1568145.patch new file mode 100644 index 0000000000000000000000000000000000000000..2a0e8284fc118476510dfb2d66eea219418bd07f --- /dev/null +++ b/mozilla-bmo1568145.patch @@ -0,0 +1,21 @@ +diff --git a/python/mozbuild/mozbuild/action/langpack_manifest.py b/python/mozbuild/mozbuild/action/langpack_manifest.py +index 05adaa4bd1..04f3a10ca4 100644 +--- a/python/mozbuild/mozbuild/action/langpack_manifest.py ++++ b/python/mozbuild/mozbuild/action/langpack_manifest.py +@@ -16,6 +16,7 @@ import os + import json + import io + import datetime ++import time + import requests + import mozversioncontrol + import mozpack.path as mozpath +@@ -105,7 +106,7 @@ def get_timestamp_for_locale(path): + dt = get_dt_from_hg(path) + + if dt is None: +- dt = datetime.datetime.utcnow() ++ dt = datetime.datetime.utcfromtimestamp(int(os.environ.get('SOURCE_DATE_EPOCH', time.time()))) + + dt = dt.replace(microsecond=0) + return dt.strftime("%Y%m%d%H%M%S") diff --git a/mozilla-fix-top-level-asm.patch b/mozilla-fix-top-level-asm.patch new file mode 100644 index 0000000000000000000000000000000000000000..f8c09992198cb9b98c17bd7177ef8ac2519d553a --- /dev/null +++ b/mozilla-fix-top-level-asm.patch @@ -0,0 +1,30 @@ +diff --git a/security/sandbox/linux/moz.build b/security/sandbox/linux/moz.build +index 573f667812..be5120e4aa 100644 +--- a/security/sandbox/linux/moz.build ++++ b/security/sandbox/linux/moz.build +@@ -71,7 +71,6 @@ UNIFIED_SOURCES += [ + "../chromium/sandbox/linux/bpf_dsl/policy_compiler.cc", + "../chromium/sandbox/linux/bpf_dsl/syscall_set.cc", + "../chromium/sandbox/linux/seccomp-bpf/die.cc", +- "../chromium/sandbox/linux/seccomp-bpf/syscall.cc", + "broker/SandboxBrokerCommon.cpp", + "Sandbox.cpp", + "SandboxBrokerClient.cpp", +@@ -87,6 +86,7 @@ UNIFIED_SOURCES += [ + SOURCES += [ + "../chromium/base/strings/safe_sprintf.cc", + "../chromium/base/third_party/icu/icu_utf.cc", ++ "../chromium/sandbox/linux/seccomp-bpf/syscall.cc", + "../chromium/sandbox/linux/seccomp-bpf/trap.cc", + "../chromium/sandbox/linux/services/syscall_wrappers.cc", + ] +@@ -110,6 +110,9 @@ if CONFIG["CC_TYPE"] in ("clang", "gcc"): + SOURCES["../chromium/sandbox/linux/services/syscall_wrappers.cc"].flags += [ + "-Wno-empty-body", + ] ++ SOURCES['../chromium/sandbox/linux/seccomp-bpf/syscall.cc'].flags += [ ++ '-fno-lto' ++ ] + + # gcc lto likes to put the top level asm in syscall.cc in a different partition + # from the function using it which breaks the build. Work around that by diff --git a/mozilla-libavcodec58_91.patch b/mozilla-libavcodec58_91.patch new file mode 100644 index 0000000000000000000000000000000000000000..4c310817b02fcd6eacd81a7cc36721a5fd62f0d9 --- /dev/null +++ b/mozilla-libavcodec58_91.patch @@ -0,0 +1,29 @@ +diff --git a/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp b/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp +--- a/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp ++++ b/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp +@@ -22,23 +22,25 @@ class FFmpegDecoderModule { + static already_AddRefed Create(FFmpegLibWrapper*); + }; + + static FFmpegLibWrapper sLibAV; + + static const char* sLibs[] = { + // clang-format off + #if defined(XP_DARWIN) ++ "libavcodec.58.100.dylib", + "libavcodec.58.dylib", + "libavcodec.57.dylib", + "libavcodec.56.dylib", + "libavcodec.55.dylib", + "libavcodec.54.dylib", + "libavcodec.53.dylib", + #else ++ "libavcodec.so.58.100", + "libavcodec.so.58", + "libavcodec-ffmpeg.so.58", + "libavcodec-ffmpeg.so.57", + "libavcodec-ffmpeg.so.56", + "libavcodec.so.57", + "libavcodec.so.56", + "libavcodec.so.55", + "libavcodec.so.54", diff --git a/mozilla-nongnome-proxies.patch b/mozilla-nongnome-proxies.patch new file mode 100644 index 0000000000000000000000000000000000000000..301ea588704da7c0663947a35b2acd224ac45b3f --- /dev/null +++ b/mozilla-nongnome-proxies.patch @@ -0,0 +1,44 @@ +# HG changeset patch +# User Wolfgang Rosenauer +# Date 1558442915 -7200 +# Tue May 21 14:48:35 2019 +0200 +# Node ID 6bcf2dfebc1ea2aa34e5cc61152709fc8e409dc5 +# Parent bd5d1f49975deb730064a16b3079edb53c4a5f84 +Do not use gconf for proxy settings if not running within Gnome +Index: toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp +=================================================================== +RCS file: /cvsroot/mozilla/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp,v +retrieving revision 1.1 + +diff --git a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp b/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp +--- a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp ++++ b/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp +@@ -49,20 +49,24 @@ NS_IMETHODIMP + nsUnixSystemProxySettings::GetMainThreadOnly(bool* aMainThreadOnly) { + // dbus prevents us from being threadsafe, but this routine should not block + // anyhow + *aMainThreadOnly = true; + return NS_OK; + } + + void nsUnixSystemProxySettings::Init() { +- mGSettings = do_GetService(NS_GSETTINGSSERVICE_CONTRACTID); +- if (mGSettings) { +- mGSettings->GetCollectionForSchema("org.gnome.system.proxy"_ns, +- getter_AddRefs(mProxySettings)); ++ const char* sessionType = PR_GetEnv("DESKTOP_SESSION"); ++ if (sessionType && !strcmp(sessionType, "gnome")) { ++ mGSettings = do_GetService(NS_GSETTINGSSERVICE_CONTRACTID); ++ if (mGSettings) { ++ mGSettings->GetCollectionForSchema( ++ "org.gnome.system.proxy"_ns, ++ getter_AddRefs(mProxySettings)); ++ } + } + } + + nsresult nsUnixSystemProxySettings::GetPACURI(nsACString& aResult) { + if (mProxySettings) { + nsCString proxyMode; + // Check if mode is auto + nsresult rv = mProxySettings->GetString("mode"_ns, proxyMode); diff --git a/mozilla-ntlm-full-path.patch b/mozilla-ntlm-full-path.patch new file mode 100644 index 0000000000000000000000000000000000000000..ce5b6a29e8242057b89e76b697bc346635b3f242 --- /dev/null +++ b/mozilla-ntlm-full-path.patch @@ -0,0 +1,28 @@ +# HG changeset patch +# User Petr Cerny +# Parent 7308e4a7c1f769f4bbbc90870b849cadd99495a6 +# Parent 2361c5db1e70e358b2158325e07fa15bb4569c2c +Bug 634334 - call to the ntlm_auth helper fails + +diff --git a/extensions/auth/nsAuthSambaNTLM.cpp b/extensions/auth/nsAuthSambaNTLM.cpp +--- a/extensions/auth/nsAuthSambaNTLM.cpp ++++ b/extensions/auth/nsAuthSambaNTLM.cpp +@@ -156,17 +156,17 @@ static uint8_t* ExtractMessage(const nsA + *aLen = (length / 4) * 3 - numEquals; + return reinterpret_cast(PL_Base64Decode(s, length, nullptr)); + } + + nsresult nsAuthSambaNTLM::SpawnNTLMAuthHelper() { + const char* username = PR_GetEnv("USER"); + if (!username) return NS_ERROR_FAILURE; + +- const char* const args[] = {"ntlm_auth", ++ const char* const args[] = {"/usr/bin/ntlm_auth", + "--helper-protocol", + "ntlmssp-client-1", + "--use-cached-creds", + "--username", + username, + nullptr}; + + bool isOK = SpawnIOChild(const_cast(args), &mChildPID, diff --git a/mozilla-pgo.patch b/mozilla-pgo.patch new file mode 100644 index 0000000000000000000000000000000000000000..89a99430647aa83f54d97ea3a4961fa6a56f2896 --- /dev/null +++ b/mozilla-pgo.patch @@ -0,0 +1,190 @@ +# HG changeset patch +# User Wolfgang Rosenauer +# Parent ebd7e379c85889b6f8dba0542479110ab1f6b059 + +diff --git a/build/moz.configure/lto-pgo.configure b/build/moz.configure/lto-pgo.configure +--- a/build/moz.configure/lto-pgo.configure ++++ b/build/moz.configure/lto-pgo.configure +@@ -243,34 +243,34 @@ def lto( + "configure." + ) + + if c_compiler.type == "clang": + if value == "full": + cflags.append("-flto") + ldflags.append("-flto") + else: +- cflags.append("-flto=thin") +- ldflags.append("-flto=thin") ++ cflags.append("-flto") ++ ldflags.append("-flto") + + if target.os == "Android" and value == "cross": + # Work around https://github.com/rust-lang/rust/issues/90088 + # by enabling the highest level of SSE the rust targets default + # to. + # https://github.com/rust-lang/rust/blob/bdfcb88e8b6203ccb46a2fb6649979b773efc8ac/compiler/rustc_target/src/spec/i686_linux_android.rs#L13 + # https://github.com/rust-lang/rust/blob/8d1083e319841624f64400e1524805a40d725439/compiler/rustc_target/src/spec/x86_64_linux_android.rs#L7 + if target.cpu == "x86": + ldflags.append("-Wl,-plugin-opt=-mattr=+ssse3") + elif target.cpu == "x86_64": + ldflags.append("-Wl,-plugin-opt=-mattr=+sse4.2") + elif c_compiler.type == "clang-cl": + if value == "full": + cflags.append("-flto") + else: +- cflags.append("-flto=thin") ++ cflags.append("-flto") + # With clang-cl, -flto can only be used with -c or -fuse-ld=lld. + # AC_TRY_LINKs during configure don't have -c, so pass -fuse-ld=lld. + cflags.append("-fuse-ld=lld") + + # Explicitly set the CPU to optimize for so the linker doesn't + # choose a poor default. Rust compilation by default uses the + # pentium4 CPU on x86: + # +diff --git a/build/pgo/profileserver.py b/build/pgo/profileserver.py +--- a/build/pgo/profileserver.py ++++ b/build/pgo/profileserver.py +@@ -6,17 +6,17 @@ + + import json + import os + import sys + import glob + import subprocess + + import mozcrash +-from mozbuild.base import MozbuildObject, BinaryNotFoundException ++from mozbuild.base import MozbuildObject, BinaryNotFoundException, BuildEnvironmentNotFoundException + from mozfile import TemporaryDirectory + from mozhttpd import MozHttpd + from mozprofile import FirefoxProfile, Preferences + from mozprofile.permissions import ServerLocations + from mozrunner import FirefoxRunner, CLI + from six import string_types + + PORT = 8888 +@@ -82,19 +82,32 @@ if __name__ == "__main__": + docroot=os.path.join(build.topsrcdir, "build", "pgo"), + path_mappings=path_mappings, + ) + httpd.start(block=False) + + locations = ServerLocations() + locations.add_host(host="127.0.0.1", port=PORT, options="primary,privileged") + +- old_profraw_files = glob.glob("*.profraw") +- for f in old_profraw_files: +- os.remove(f) ++ using_gcc = False ++ try: ++ if build.config_environment.substs.get('CC_TYPE') == 'gcc': ++ using_gcc = True ++ except BuildEnvironmentNotFoundException: ++ pass ++ ++ if using_gcc: ++ for dirpath, _, filenames in os.walk('.'): ++ for f in filenames: ++ if f.endswith('.gcda'): ++ os.remove(os.path.join(dirpath, f)) ++ else: ++ old_profraw_files = glob.glob('*.profraw') ++ for f in old_profraw_files: ++ os.remove(f) + + with TemporaryDirectory() as profilePath: + # TODO: refactor this into mozprofile + profile_data_dir = os.path.join(build.topsrcdir, "testing", "profiles") + with open(os.path.join(profile_data_dir, "profiles.json"), "r") as fh: + base_profiles = json.load(fh)["profileserver"] + + prefpaths = [ +@@ -207,16 +220,20 @@ if __name__ == "__main__": + + # Try to move the crash reports to the artifacts even if Firefox appears + # to exit successfully, in case there's a crash that doesn't set the + # return code to non-zero for some reason. + if get_crashreports(profilePath, name="Firefox exited successfully?") != 0: + print("Firefox exited successfully, but produced a crashreport") + sys.exit(1) + ++ print('Copying profile data....') ++ os.system('pwd'); ++ os.system('tar cf profdata.tar.gz `find . -name "*.gcda"`; cd ..; tar xf instrumented/profdata.tar.gz;'); ++ + llvm_profdata = env.get("LLVM_PROFDATA") + if llvm_profdata: + profraw_files = glob.glob("*.profraw") + if not profraw_files: + print( + "Could not find profraw files in the current directory: %s" + % os.getcwd() + ) +diff --git a/build/unix/mozconfig.unix b/build/unix/mozconfig.unix +--- a/build/unix/mozconfig.unix ++++ b/build/unix/mozconfig.unix +@@ -1,14 +1,23 @@ + . "$topsrcdir/build/mozconfig.common" + + if [ -n "$FORCE_GCC" ]; then + CC="$MOZ_FETCHES_DIR/gcc/bin/gcc" + CXX="$MOZ_FETCHES_DIR/gcc/bin/g++" + ++ if [ -n "$MOZ_PGO" ]; then ++ if [ -z "$USE_ARTIFACT" ]; then ++ ac_add_options --enable-lto ++ fi ++ export AR="$topsrcdir/gcc/bin/gcc-ar" ++ export NM="$topsrcdir/gcc/bin/gcc-nm" ++ export RANLIB="$topsrcdir/gcc/bin/gcc-ranlib" ++ fi ++ + # We want to make sure we use binutils and other binaries in the tooltool + # package. + mk_add_options "export PATH=$MOZ_FETCHES_DIR/gcc/bin:$PATH" + else + # For some builds we don't want to have Clang based static-analysis activated + if [ -z "$DISABLE_CLANG_PLUGIN" ]; then + export ENABLE_CLANG_PLUGIN=1 + fi +diff --git a/extensions/spellcheck/src/moz.build b/extensions/spellcheck/src/moz.build +--- a/extensions/spellcheck/src/moz.build ++++ b/extensions/spellcheck/src/moz.build +@@ -23,8 +23,10 @@ LOCAL_INCLUDES += [ + "../hunspell/glue", + "../hunspell/src", + "/dom/base", + ] + EXPORTS.mozilla += [ + "mozInlineSpellChecker.h", + "mozSpellChecker.h", + ] ++ ++CXXFLAGS += ['-fno-devirtualize'] +diff --git a/toolkit/components/terminator/nsTerminator.cpp b/toolkit/components/terminator/nsTerminator.cpp +--- a/toolkit/components/terminator/nsTerminator.cpp ++++ b/toolkit/components/terminator/nsTerminator.cpp +@@ -461,16 +461,21 @@ void nsTerminator::StartWatchdog() { + // Defend against overflow + crashAfterMS = INT32_MAX; + } else { + crashAfterMS *= scaleUp; + } + } + #endif + ++ // Disable watchdog for PGO train builds - writting profile information at ++ // exit may take time and it is better to make build hang rather than ++ // silently produce poorly performing binary. ++ crashAfterMS = INT32_MAX; ++ + UniquePtr options(new Options()); + const PRIntervalTime ticksDuration = + PR_MillisecondsToInterval(HEARTBEAT_INTERVAL_MS); + options->crashAfterTicks = crashAfterMS / ticksDuration; + // Handle systems where ticksDuration is greater than crashAfterMS. + if (options->crashAfterTicks == 0) { + options->crashAfterTicks = crashAfterMS / HEARTBEAT_INTERVAL_MS; + } diff --git a/mozilla-reduce-rust-debuginfo.patch b/mozilla-reduce-rust-debuginfo.patch new file mode 100644 index 0000000000000000000000000000000000000000..7769d98bffb90aa45afd2071a797ea1967ea5b02 --- /dev/null +++ b/mozilla-reduce-rust-debuginfo.patch @@ -0,0 +1,11 @@ +--- firefox-96.0.3.orig/build/moz.configure/rust.configure ++++ firefox-96.0.3/build/moz.configure/rust.configure +@@ -641,7 +643,7 @@ def rust_compile_flags( + debug_assertions = False + + if debug_symbols: +- debug_info = "2" ++ debug_info = '1' + + opts = [] + diff --git a/mozilla-silence-no-return-type.patch b/mozilla-silence-no-return-type.patch new file mode 100644 index 0000000000000000000000000000000000000000..3f12ab69d81a7296a1079133006baeb59e5ea2a2 --- /dev/null +++ b/mozilla-silence-no-return-type.patch @@ -0,0 +1,2154 @@ +# HG changeset patch +# Parent 216843712d6d6cd9d5bd519f6ef564d00406b43f + +diff --git a/Cargo.lock b/Cargo.lock +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -2165,18 +2165,16 @@ name = "glsl-to-cxx" + version = "0.1.0" + dependencies = [ + "glsl", + ] + + [[package]] + name = "glslopt" + version = "0.1.9" +-source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "74a3f5c04450dfdadb4b08f6e5ee6f5110f674de1acbd6199bfec68392a8cbaf" + dependencies = [ + "cc", + ] + + [[package]] + name = "gluesmith" + version = "0.1.0" + dependencies = [ +diff --git a/Cargo.toml b/Cargo.toml +--- a/Cargo.toml ++++ b/Cargo.toml +@@ -102,13 +102,13 @@ moz_asserts = { path = "mozglue/static/r + # Other overrides + chardetng = { git = "https://github.com/hsivonen/chardetng", rev="3484d3e3ebdc8931493aa5df4d7ee9360a90e76b" } + chardetng_c = { git = "https://github.com/hsivonen/chardetng_c", rev="ed8a4c6f900a90d4dbc1d64b856e61490a1c3570" } + coremidi = { git = "https://github.com/chris-zen/coremidi.git", rev="fc68464b5445caf111e41f643a2e69ccce0b4f83" } + libudev-sys = { path = "dom/webauthn/libudev-sys" } + packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="8b4bd7d8229660a749dbe419a57ea01df9de5453" } + midir = { git = "https://github.com/mozilla/midir.git", rev = "4c11f0ffb5d6a10de4aff40a7b81218b33b94e6f" } + minidump_writer_linux = { git = "https://github.com/msirringhaus/minidump_writer_linux.git", rev = "029ac0d54b237f27dc7d8d4e51bc0fb076e5e852" } +- ++glslopt = { path = "third_party/rust/glslopt/" } + # Patch mio 0.6 to use winapi 0.3 and miow 0.3, getting rid of winapi 0.2. + # There is not going to be new version of mio 0.6, mio now being >= 0.7.11. + [patch.crates-io.mio] + path = "third_party/rust/mio-0.6.23" +diff --git a/gfx/skia/skia/include/codec/SkEncodedOrigin.h b/gfx/skia/skia/include/codec/SkEncodedOrigin.h +--- a/gfx/skia/skia/include/codec/SkEncodedOrigin.h ++++ b/gfx/skia/skia/include/codec/SkEncodedOrigin.h +@@ -36,12 +36,13 @@ static inline SkMatrix SkEncodedOriginTo + case kBottomRight_SkEncodedOrigin: return SkMatrix::MakeAll(-1, 0, w, 0, -1, h, 0, 0, 1); + case kBottomLeft_SkEncodedOrigin: return SkMatrix::MakeAll( 1, 0, 0, 0, -1, h, 0, 0, 1); + case kLeftTop_SkEncodedOrigin: return SkMatrix::MakeAll( 0, 1, 0, 1, 0, 0, 0, 0, 1); + case kRightTop_SkEncodedOrigin: return SkMatrix::MakeAll( 0, -1, h, 1, 0, 0, 0, 0, 1); + case kRightBottom_SkEncodedOrigin: return SkMatrix::MakeAll( 0, -1, h, -1, 0, w, 0, 0, 1); + case kLeftBottom_SkEncodedOrigin: return SkMatrix::MakeAll( 0, 1, 0, -1, 0, w, 0, 0, 1); + } + SK_ABORT("Unexpected origin"); ++ SkUNREACHABLE; + } + + + #endif // SkEncodedOrigin_DEFINED +diff --git a/gfx/skia/skia/include/private/GrTypesPriv.h b/gfx/skia/skia/include/private/GrTypesPriv.h +--- a/gfx/skia/skia/include/private/GrTypesPriv.h ++++ b/gfx/skia/skia/include/private/GrTypesPriv.h +@@ -535,32 +535,34 @@ static inline GrSLType GrSLCombinedSampl + return kTexture2DSampler_GrSLType; + case GrTextureType::kRectangle: + return kTexture2DRectSampler_GrSLType; + case GrTextureType::kExternal: + return kTextureExternalSampler_GrSLType; + default: + SK_ABORT("Unexpected texture type"); + } ++ SkUNREACHABLE; + } + + /** Rectangle and external textures only support the clamp wrap mode and do not support + * MIP maps. + */ + static inline bool GrTextureTypeHasRestrictedSampling(GrTextureType type) { + switch (type) { + case GrTextureType::k2D: + return false; + case GrTextureType::kRectangle: + return true; + case GrTextureType::kExternal: + return true; + default: + SK_ABORT("Unexpected texture type"); + } ++ SkUNREACHABLE; + } + + static constexpr bool GrSLTypeIsCombinedSamplerType(GrSLType type) { + switch (type) { + case kTexture2DSampler_GrSLType: + case kTextureExternalSampler_GrSLType: + case kTexture2DRectSampler_GrSLType: + return true; +@@ -853,16 +855,17 @@ static inline size_t GrCompressedFormatD + switch (compressionType) { + case SkImage::kETC1_CompressionType: + SkASSERT((width & 3) == 0); + SkASSERT((height & 3) == 0); + return (width >> 2) * (height >> 2) * 8; + } + + SK_ABORT("Invalid pixel config"); ++ SkUNREACHABLE; + } + + /** + * Like SkColorType this describes a layout of pixel data in CPU memory. It specifies the channels, + * their type, and width. This exists so that the GPU backend can have private types that have no + * analog in the public facing SkColorType enum and omit types not implemented in the GPU backend. + * It does not refer to a texture format and the mapping to texture formats may be many-to-many. + * It does not specify the sRGB encoding of the stored values. The components are listed in order of +diff --git a/gfx/skia/skia/src/core/SkGeometry.h b/gfx/skia/skia/src/core/SkGeometry.h +--- a/gfx/skia/skia/src/core/SkGeometry.h ++++ b/gfx/skia/skia/src/core/SkGeometry.h +@@ -177,28 +177,30 @@ static inline bool SkCubicIsDegenerate(S + case SkCubicType::kLocalCusp: + case SkCubicType::kCuspAtInfinity: + return false; + case SkCubicType::kQuadratic: + case SkCubicType::kLineOrPoint: + return true; + } + SK_ABORT("Invalid SkCubicType"); ++ SkUNREACHABLE; + } + + static inline const char* SkCubicTypeName(SkCubicType type) { + switch (type) { + case SkCubicType::kSerpentine: return "kSerpentine"; + case SkCubicType::kLoop: return "kLoop"; + case SkCubicType::kLocalCusp: return "kLocalCusp"; + case SkCubicType::kCuspAtInfinity: return "kCuspAtInfinity"; + case SkCubicType::kQuadratic: return "kQuadratic"; + case SkCubicType::kLineOrPoint: return "kLineOrPoint"; + } + SK_ABORT("Invalid SkCubicType"); ++ SkUNREACHABLE; + } + + /** Returns the cubic classification. + + t[],s[] are set to the two homogeneous parameter values at which points the lines L & M + intersect with K, sorted from smallest to largest and oriented so positive values of the + implicit are on the "left" side. For a serpentine curve they are the inflection points. For a + loop they are the double point. For a local cusp, they are both equal and denote the cusp point. +diff --git a/gfx/skia/skia/src/core/SkTextBlob.cpp b/gfx/skia/skia/src/core/SkTextBlob.cpp +--- a/gfx/skia/skia/src/core/SkTextBlob.cpp ++++ b/gfx/skia/skia/src/core/SkTextBlob.cpp +@@ -196,16 +196,17 @@ unsigned SkTextBlob::ScalarsPerGlyph(Gly + } + + void SkTextBlob::operator delete(void* p) { + sk_free(p); + } + + void* SkTextBlob::operator new(size_t) { + SK_ABORT("All blobs are created by placement new."); ++ SkUNREACHABLE; + } + + void* SkTextBlob::operator new(size_t, void* p) { + return p; + } + + SkTextBlobRunIterator::SkTextBlobRunIterator(const SkTextBlob* blob) + : fCurrentRun(SkTextBlob::RunRecord::First(blob)) { +diff --git a/gfx/skia/skia/src/core/SkTypeface_remote.cpp b/gfx/skia/skia/src/core/SkTypeface_remote.cpp +--- a/gfx/skia/skia/src/core/SkTypeface_remote.cpp ++++ b/gfx/skia/skia/src/core/SkTypeface_remote.cpp +@@ -24,16 +24,17 @@ void SkScalerContextProxy::initCache(SkS + SkASSERT(cache != nullptr); + + fCache = cache; + fStrikeCache = strikeCache; + } + + unsigned SkScalerContextProxy::generateGlyphCount() { + SK_ABORT("Should never be called."); ++ SkUNREACHABLE; + } + + bool SkScalerContextProxy::generateAdvance(SkGlyph* glyph) { + return false; + } + + void SkScalerContextProxy::generateMetrics(SkGlyph* glyph) { + TRACE_EVENT1("skia", "generateMetrics", "rec", TRACE_STR_COPY(this->getRec().dump().c_str())); +diff --git a/gfx/skia/skia/src/core/SkTypeface_remote.h b/gfx/skia/skia/src/core/SkTypeface_remote.h +--- a/gfx/skia/skia/src/core/SkTypeface_remote.h ++++ b/gfx/skia/skia/src/core/SkTypeface_remote.h +@@ -58,46 +58,54 @@ public: + , fGlyphCount{glyphCount} + , fIsLogging{isLogging} + , fDiscardableManager{std::move(manager)} {} + SkFontID remoteTypefaceID() const {return fFontId;} + int glyphCount() const {return fGlyphCount;} + bool isLogging() const {return fIsLogging;} + + protected: +- int onGetUPEM() const override { SK_ABORT("Should never be called."); } ++ int onGetUPEM() const override { SK_ABORT("Should never be called."); SkUNREACHABLE; } + std::unique_ptr onOpenStream(int* ttcIndex) const override { + SK_ABORT("Should never be called."); ++ SkUNREACHABLE; + } + std::unique_ptr onMakeFontData() const override { + SK_ABORT("Should never be called."); ++ SkUNREACHABLE; + } + sk_sp onMakeClone(const SkFontArguments& args) const override { + SK_ABORT("Should never be called."); ++ SkUNREACHABLE; + } + int onGetVariationDesignPosition(SkFontArguments::VariationPosition::Coordinate coordinates[], + int coordinateCount) const override { + SK_ABORT("Should never be called."); ++ SkUNREACHABLE; + } + int onGetVariationDesignParameters(SkFontParameters::Variation::Axis parameters[], + int parameterCount) const override { + SK_ABORT("Should never be called."); ++ SkUNREACHABLE; + } + void onGetFamilyName(SkString* familyName) const override { + // Used by SkStrikeCache::DumpMemoryStatistics. + *familyName = ""; + } + SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const override { + SK_ABORT("Should never be called."); ++ SkUNREACHABLE; + } + int onGetTableTags(SkFontTableTag tags[]) const override { + SK_ABORT("Should never be called."); ++ SkUNREACHABLE; + } + size_t onGetTableData(SkFontTableTag, size_t offset, size_t length, void* data) const override { + SK_ABORT("Should never be called."); ++ SkUNREACHABLE; + } + SkScalerContext* onCreateScalerContext(const SkScalerContextEffects& effects, + const SkDescriptor* desc) const override { + return new SkScalerContextProxy(sk_ref_sp(const_cast(this)), effects, + desc, fDiscardableManager); + } + void onFilterRec(SkScalerContextRec* rec) const override { + // The rec filtering is already applied by the server when generating +@@ -111,26 +119,28 @@ protected: + } + + void getPostScriptGlyphNames(SkString*) const override { + SK_ABORT("Should never be called."); + } + + std::unique_ptr onGetAdvancedMetrics() const override { + SK_ABORT("Should never be called."); ++ SkUNREACHABLE; + } + void onCharsToGlyphs(const SkUnichar* chars, int count, SkGlyphID glyphs[]) const override { + SK_ABORT("Should never be called."); + } + int onCountGlyphs() const override { + return this->glyphCount(); + } + + void* onGetCTFontRef() const override { + SK_ABORT("Should never be called."); ++ SkUNREACHABLE; + } + + private: + const SkFontID fFontId; + const int fGlyphCount; + const bool fIsLogging; + sk_sp fDiscardableManager; + +diff --git a/gfx/skia/skia/src/effects/imagefilters/SkBlurImageFilter.cpp b/gfx/skia/skia/src/effects/imagefilters/SkBlurImageFilter.cpp +--- a/gfx/skia/skia/src/effects/imagefilters/SkBlurImageFilter.cpp ++++ b/gfx/skia/skia/src/effects/imagefilters/SkBlurImageFilter.cpp +@@ -139,16 +139,17 @@ static GrTextureDomain::Mode to_texture_ + case SkTileMode::kDecal: + return GrTextureDomain::kDecal_Mode; + case SkTileMode::kMirror: + // TODO (michaelludwig) - Support mirror mode, treat as repeat for now + case SkTileMode::kRepeat: + return GrTextureDomain::kRepeat_Mode; + default: + SK_ABORT("Unsupported tile mode."); ++ SkUNREACHABLE; + } + } + #endif + + // This is defined by the SVG spec: + // https://drafts.fxtf.org/filter-effects/#feGaussianBlurElement + static int calculate_window(double sigma) { + // NB 136 is the largest sigma that will not cause a buffer full of 255 mask values to overflow +diff --git a/gfx/skia/skia/src/effects/imagefilters/SkLightingImageFilter.cpp b/gfx/skia/skia/src/effects/imagefilters/SkLightingImageFilter.cpp +--- a/gfx/skia/skia/src/effects/imagefilters/SkLightingImageFilter.cpp ++++ b/gfx/skia/skia/src/effects/imagefilters/SkLightingImageFilter.cpp +@@ -1696,16 +1696,17 @@ static SkImageFilterLight* create_random + return new SkPointLight(random_point3(random), random->nextU()); + } + case 2: { + return new SkSpotLight(random_point3(random), random_point3(random), + random->nextUScalar1(), random->nextUScalar1(), random->nextU()); + } + default: + SK_ABORT("Unexpected value."); ++ SkUNREACHABLE; + } + } + + std::unique_ptr GrDiffuseLightingEffect::TestCreate(GrProcessorTestData* d) { + int texIdx = d->fRandom->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx + : GrProcessorUnitTest::kAlphaTextureIdx; + sk_sp proxy = d->textureProxy(texIdx); + SkScalar surfaceScale = d->fRandom->nextSScalar1(); +diff --git a/gfx/skia/skia/src/fonts/SkFontMgr_indirect.cpp b/gfx/skia/skia/src/fonts/SkFontMgr_indirect.cpp +--- a/gfx/skia/skia/src/fonts/SkFontMgr_indirect.cpp ++++ b/gfx/skia/skia/src/fonts/SkFontMgr_indirect.cpp +@@ -64,16 +64,17 @@ int SkFontMgr_Indirect::onCountFamilies( + } + + void SkFontMgr_Indirect::onGetFamilyName(int index, SkString* familyName) const { + SK_ABORT("Not implemented"); + } + + SkFontStyleSet* SkFontMgr_Indirect::onCreateStyleSet(int index) const { + SK_ABORT("Not implemented"); ++ SkUNREACHABLE; + } + + SkFontStyleSet* SkFontMgr_Indirect::onMatchFamily(const char familyName[]) const { + return new SkStyleSet_Indirect(this, -1, fProxy->matchName(familyName)); + } + + SkTypeface* SkFontMgr_Indirect::createTypefaceFromFontId(const SkFontIdentity& id) const { + if (id.fDataId == SkFontIdentity::kInvalidDataId) { +diff --git a/gfx/skia/skia/src/gpu/GrDataUtils.cpp b/gfx/skia/skia/src/gpu/GrDataUtils.cpp +--- a/gfx/skia/skia/src/gpu/GrDataUtils.cpp ++++ b/gfx/skia/skia/src/gpu/GrDataUtils.cpp +@@ -123,25 +123,27 @@ static int num_ETC1_blocks(int w, int h) + + size_t GrCompressedDataSize(SkImage::CompressionType type, int width, int height) { + switch (type) { + case SkImage::kETC1_CompressionType: + int numBlocks = num_ETC1_blocks(width, height); + return numBlocks * sizeof(ETC1Block); + } + SK_ABORT("Unexpected compression type"); ++ SkUNREACHABLE; + } + + size_t GrCompressedRowBytes(SkImage::CompressionType type, int width) { + switch (type) { + case SkImage::kETC1_CompressionType: + int numBlocksWidth = num_ETC1_blocks_w(width); + return numBlocksWidth * sizeof(ETC1Block); + } + SK_ABORT("Unexpected compression type"); ++ SkUNREACHABLE; + } + + // Fill in 'dest' with ETC1 blocks derived from 'colorf' + static void fillin_ETC1_with_color(int width, int height, const SkColor4f& colorf, void* dest) { + SkColor color = colorf.toSkColor(); + + ETC1Block block; + create_etc1_block(color, &block); +diff --git a/gfx/skia/skia/src/gpu/GrFragmentProcessor.h b/gfx/skia/skia/src/gpu/GrFragmentProcessor.h +--- a/gfx/skia/skia/src/gpu/GrFragmentProcessor.h ++++ b/gfx/skia/skia/src/gpu/GrFragmentProcessor.h +@@ -370,16 +370,17 @@ protected: + const Args&... samps) { + return (0 == i) ? samp0 : IthTextureSampler(i - 1, samps...); + } + inline static const TextureSampler& IthTextureSampler(int i); + + private: + virtual SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& /* inputColor */) const { + SK_ABORT("Subclass must override this if advertising this optimization."); ++ SkUNREACHABLE; + } + + /** Returns a new instance of the appropriate *GL* implementation class + for the given GrFragmentProcessor; caller is responsible for deleting + the object. */ + virtual GrGLSLFragmentProcessor* onCreateGLSLInstance() const = 0; + + /** Implemented using GLFragmentProcessor::GenKey as described in this class's comment. */ +diff --git a/gfx/skia/skia/src/gpu/GrPathRendering.cpp b/gfx/skia/skia/src/gpu/GrPathRendering.cpp +--- a/gfx/skia/skia/src/gpu/GrPathRendering.cpp ++++ b/gfx/skia/skia/src/gpu/GrPathRendering.cpp +@@ -14,16 +14,17 @@ + #include "src/gpu/GrPathRendering.h" + #include "src/gpu/GrProgramInfo.h" + #include "src/gpu/GrRenderTarget.h" + + const GrUserStencilSettings& GrPathRendering::GetStencilPassSettings(FillType fill) { + switch (fill) { + default: + SK_ABORT("Unexpected path fill."); ++ SkUNREACHABLE; + case GrPathRendering::kWinding_FillType: { + constexpr static GrUserStencilSettings kWindingStencilPass( + GrUserStencilSettings::StaticInit< + 0xffff, + GrUserStencilTest::kAlwaysIfInClip, + 0xffff, + GrUserStencilOp::kIncWrap, + GrUserStencilOp::kIncWrap, +diff --git a/gfx/skia/skia/src/gpu/GrPathRendering.h b/gfx/skia/skia/src/gpu/GrPathRendering.h +--- a/gfx/skia/skia/src/gpu/GrPathRendering.h ++++ b/gfx/skia/skia/src/gpu/GrPathRendering.h +@@ -58,16 +58,17 @@ public: + return 1; + case kTranslate_PathTransformType: + return 2; + case kAffine_PathTransformType: + return 6; + + default: + SK_ABORT("Unknown path transform type"); ++ SkUNREACHABLE; + } + } + + // No native support for inverse at this time + enum FillType { + /** Specifies that "inside" is computed by a non-zero sum of signed + edge crossings + */ +diff --git a/gfx/skia/skia/src/gpu/GrProcessorUnitTest.cpp b/gfx/skia/skia/src/gpu/GrProcessorUnitTest.cpp +--- a/gfx/skia/skia/src/gpu/GrProcessorUnitTest.cpp ++++ b/gfx/skia/skia/src/gpu/GrProcessorUnitTest.cpp +@@ -15,11 +15,12 @@ std::unique_ptr GrP + std::unique_ptr fp; + do { + fp = GrFragmentProcessorTestFactory::Make(data); + SkASSERT(fp); + } while (fp->numChildProcessors() != 0); + return fp; + #else + SK_ABORT("Should not be called if !SK_ALLOW_STATIC_GLOBAL_INITIALIZERS"); ++ SkUNREACHABLE; + #endif + } + #endif +diff --git a/gfx/skia/skia/src/gpu/GrReducedClip.cpp b/gfx/skia/skia/src/gpu/GrReducedClip.cpp +--- a/gfx/skia/skia/src/gpu/GrReducedClip.cpp ++++ b/gfx/skia/skia/src/gpu/GrReducedClip.cpp +@@ -520,16 +520,17 @@ GrReducedClip::ClipResult GrReducedClip: + GrAA(element->isAA())); + + case Element::DeviceSpaceType::kPath: + return this->addAnalyticFP(element->getDeviceSpacePath(), + Invert(element->isInverseFilled()), GrAA(element->isAA())); + } + + SK_ABORT("Unexpected DeviceSpaceType"); ++ SkUNREACHABLE; + } + + GrReducedClip::ClipResult GrReducedClip::clipOutsideElement(const Element* element) { + switch (element->getDeviceSpaceType()) { + case Element::DeviceSpaceType::kEmpty: + return ClipResult::kMadeEmpty; + + case Element::DeviceSpaceType::kRect: +@@ -586,16 +587,17 @@ GrReducedClip::ClipResult GrReducedClip: + } + + case Element::DeviceSpaceType::kPath: + return this->addAnalyticFP(element->getDeviceSpacePath(), + Invert(!element->isInverseFilled()), GrAA(element->isAA())); + } + + SK_ABORT("Unexpected DeviceSpaceType"); ++ SkUNREACHABLE; + } + + inline void GrReducedClip::addWindowRectangle(const SkRect& elementInteriorRect, bool elementIsAA) { + SkIRect window; + if (!elementIsAA) { + elementInteriorRect.round(&window); + } else { + elementInteriorRect.roundIn(&window); +diff --git a/gfx/skia/skia/src/gpu/GrResourceCache.cpp b/gfx/skia/skia/src/gpu/GrResourceCache.cpp +--- a/gfx/skia/skia/src/gpu/GrResourceCache.cpp ++++ b/gfx/skia/skia/src/gpu/GrResourceCache.cpp +@@ -35,27 +35,29 @@ DECLARE_SKMESSAGEBUS_MESSAGE(GrTextureFr + ////////////////////////////////////////////////////////////////////////////// + + GrScratchKey::ResourceType GrScratchKey::GenerateResourceType() { + static std::atomic nextType{INHERITED::kInvalidDomain + 1}; + + int32_t type = nextType++; + if (type > SkTo(UINT16_MAX)) { + SK_ABORT("Too many Resource Types"); ++ SkUNREACHABLE; + } + + return static_cast(type); + } + + GrUniqueKey::Domain GrUniqueKey::GenerateDomain() { + static std::atomic nextDomain{INHERITED::kInvalidDomain + 1}; + + int32_t domain = nextDomain++; + if (domain > SkTo(UINT16_MAX)) { + SK_ABORT("Too many GrUniqueKey Domains"); ++ SkUNREACHABLE; + } + + return static_cast(domain); + } + + uint32_t GrResourceKeyHash(const uint32_t* data, size_t size) { + return SkOpts::hash(data, size); + } +diff --git a/gfx/skia/skia/src/gpu/GrShaderVar.cpp b/gfx/skia/skia/src/gpu/GrShaderVar.cpp +--- a/gfx/skia/skia/src/gpu/GrShaderVar.cpp ++++ b/gfx/skia/skia/src/gpu/GrShaderVar.cpp +@@ -13,30 +13,32 @@ static const char* type_modifier_string( + switch (t) { + case GrShaderVar::kNone_TypeModifier: return ""; + case GrShaderVar::kIn_TypeModifier: return "in"; + case GrShaderVar::kInOut_TypeModifier: return "inout"; + case GrShaderVar::kOut_TypeModifier: return "out"; + case GrShaderVar::kUniform_TypeModifier: return "uniform"; + } + SK_ABORT("Unknown shader variable type modifier."); ++ SkUNREACHABLE; + } + + void GrShaderVar::setIOType(GrIOType ioType) { + switch (ioType) { + case kRW_GrIOType: + return; + case kRead_GrIOType: + this->addModifier("readonly"); + return; + case kWrite_GrIOType: + this->addModifier("writeonly"); + return; + } + SK_ABORT("Unknown io type."); ++ SkUNREACHABLE; + } + + void GrShaderVar::appendDecl(const GrShaderCaps* shaderCaps, SkString* out) const { + SkString layout = fLayoutQualifier; + if (!fLayoutQualifier.isEmpty()) { + out->appendf("layout(%s) ", fLayoutQualifier.c_str()); + } + out->append(fExtraModifiers); +diff --git a/gfx/skia/skia/src/gpu/SkGpuDevice.cpp b/gfx/skia/skia/src/gpu/SkGpuDevice.cpp +--- a/gfx/skia/skia/src/gpu/SkGpuDevice.cpp ++++ b/gfx/skia/skia/src/gpu/SkGpuDevice.cpp +@@ -278,16 +278,17 @@ static inline GrPrimitiveType point_mode + case SkCanvas::kPoints_PointMode: + return GrPrimitiveType::kPoints; + case SkCanvas::kLines_PointMode: + return GrPrimitiveType::kLines; + case SkCanvas::kPolygon_PointMode: + return GrPrimitiveType::kLineStrip; + } + SK_ABORT("Unexpected mode"); ++ SkUNREACHABLE; + } + + void SkGpuDevice::drawPoints(SkCanvas::PointMode mode, + size_t count, const SkPoint pts[], const SkPaint& paint) { + ASSERT_SINGLE_OWNER + GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawPoints", fContext.get()); + SkScalar width = paint.getStrokeWidth(); + if (width < 0) { +diff --git a/gfx/skia/skia/src/gpu/SkGr.h b/gfx/skia/skia/src/gpu/SkGr.h +--- a/gfx/skia/skia/src/gpu/SkGr.h ++++ b/gfx/skia/skia/src/gpu/SkGr.h +@@ -154,16 +154,17 @@ static inline GrPrimitiveType SkVertexMo + case SkVertices::kTriangles_VertexMode: + return GrPrimitiveType::kTriangles; + case SkVertices::kTriangleStrip_VertexMode: + return GrPrimitiveType::kTriangleStrip; + case SkVertices::kTriangleFan_VertexMode: + break; + } + SK_ABORT("Invalid mode"); ++ SkUNREACHABLE; + } + + ////////////////////////////////////////////////////////////////////////////// + + GR_STATIC_ASSERT((int)kZero_GrBlendCoeff == (int)SkBlendModeCoeff::kZero); + GR_STATIC_ASSERT((int)kOne_GrBlendCoeff == (int)SkBlendModeCoeff::kOne); + GR_STATIC_ASSERT((int)kSC_GrBlendCoeff == (int)SkBlendModeCoeff::kSC); + GR_STATIC_ASSERT((int)kISC_GrBlendCoeff == (int)SkBlendModeCoeff::kISC); +diff --git a/gfx/skia/skia/src/gpu/ccpr/GrCCCoverageProcessor.h b/gfx/skia/skia/src/gpu/ccpr/GrCCCoverageProcessor.h +--- a/gfx/skia/skia/src/gpu/ccpr/GrCCCoverageProcessor.h ++++ b/gfx/skia/skia/src/gpu/ccpr/GrCCCoverageProcessor.h +@@ -235,16 +235,17 @@ inline const char* GrCCCoverageProcessor + switch (type) { + case PrimitiveType::kTriangles: return "kTriangles"; + case PrimitiveType::kWeightedTriangles: return "kWeightedTriangles"; + case PrimitiveType::kQuadratics: return "kQuadratics"; + case PrimitiveType::kCubics: return "kCubics"; + case PrimitiveType::kConics: return "kConics"; + } + SK_ABORT("Invalid PrimitiveType"); ++ SkUNREACHABLE; + } + + inline void GrCCCoverageProcessor::TriPointInstance::set( + const SkPoint p[3], const Sk2f& translate, Ordering ordering) { + this->set(p[0], p[1], p[2], translate, ordering); + } + + inline void GrCCCoverageProcessor::TriPointInstance::set( +diff --git a/gfx/skia/skia/src/gpu/ccpr/GrCCStrokeGeometry.cpp b/gfx/skia/skia/src/gpu/ccpr/GrCCStrokeGeometry.cpp +--- a/gfx/skia/skia/src/gpu/ccpr/GrCCStrokeGeometry.cpp ++++ b/gfx/skia/skia/src/gpu/ccpr/GrCCStrokeGeometry.cpp +@@ -55,16 +55,17 @@ static GrCCStrokeGeometry::Verb join_ver + case SkPaint::kBevel_Join: + return Verb::kBevelJoin; + case SkPaint::kMiter_Join: + return Verb::kMiterJoin; + case SkPaint::kRound_Join: + return Verb::kRoundJoin; + } + SK_ABORT("Invalid SkPaint::Join."); ++ SkUNREACHABLE; + } + + void GrCCStrokeGeometry::beginPath(const SkStrokeRec& stroke, float strokeDevWidth, + InstanceTallies* tallies) { + SkASSERT(!fInsideContour); + // Client should have already converted the stroke to device space (i.e. width=1 for hairline). + SkASSERT(strokeDevWidth > 0); + +diff --git a/gfx/skia/skia/src/gpu/ccpr/GrCCStrokeGeometry.h b/gfx/skia/skia/src/gpu/ccpr/GrCCStrokeGeometry.h +--- a/gfx/skia/skia/src/gpu/ccpr/GrCCStrokeGeometry.h ++++ b/gfx/skia/skia/src/gpu/ccpr/GrCCStrokeGeometry.h +@@ -170,10 +170,11 @@ inline bool GrCCStrokeGeometry::IsIntern + case Verb::kMiterJoin: + case Verb::kRoundJoin: + case Verb::kSquareCap: + case Verb::kRoundCap: + case Verb::kEndContour: + return false; + } + SK_ABORT("Invalid GrCCStrokeGeometry::Verb."); ++ SkUNREACHABLE; + } + #endif +diff --git a/gfx/skia/skia/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp b/gfx/skia/skia/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp +--- a/gfx/skia/skia/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp ++++ b/gfx/skia/skia/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp +@@ -159,16 +159,17 @@ GrPathRenderer::CanDrawPath GrCoverageCo + return CanDrawPath::kYes; + } + + case SkStrokeRec::kStrokeAndFill_Style: + return CanDrawPath::kNo; + } + + SK_ABORT("Invalid stroke style."); ++ SkUNREACHABLE; + } + + bool GrCoverageCountingPathRenderer::onDrawPath(const DrawPathArgs& args) { + SkASSERT(!fFlushing); + + SkIRect clipIBounds; + GrRenderTargetContext* rtc = args.fRenderTargetContext; + args.fClip->getConservativeBounds(rtc->width(), rtc->height(), &clipIBounds, nullptr); +diff --git a/gfx/skia/skia/src/gpu/ccpr/GrVSCoverageProcessor.cpp b/gfx/skia/skia/src/gpu/ccpr/GrVSCoverageProcessor.cpp +--- a/gfx/skia/skia/src/gpu/ccpr/GrVSCoverageProcessor.cpp ++++ b/gfx/skia/skia/src/gpu/ccpr/GrVSCoverageProcessor.cpp +@@ -545,9 +545,10 @@ GrGLSLPrimitiveProcessor* GrVSCoveragePr + case PrimitiveType::kWeightedTriangles: + return new Impl(std::move(shader), 3); + case PrimitiveType::kQuadratics: + case PrimitiveType::kCubics: + case PrimitiveType::kConics: + return new Impl(std::move(shader), 4); + } + SK_ABORT("Invalid PrimitiveType"); ++ SkUNREACHABLE; + } +diff --git a/gfx/skia/skia/src/gpu/dawn/GrDawnOpsRenderPass.cpp b/gfx/skia/skia/src/gpu/dawn/GrDawnOpsRenderPass.cpp +--- a/gfx/skia/skia/src/gpu/dawn/GrDawnOpsRenderPass.cpp ++++ b/gfx/skia/skia/src/gpu/dawn/GrDawnOpsRenderPass.cpp +@@ -34,17 +34,19 @@ static dawn::LoadOp to_dawn_load_op(GrLo + // Load should be equivalent to DontCare for desktop; Clear would + // probably be better for tilers. If Dawn does add DontCare + // as an extension, use it here. + return dawn::LoadOp::Load; + case GrLoadOp::kClear: + return dawn::LoadOp::Clear; + default: + SK_ABORT("Invalid LoadOp"); ++ SkUNREACHABLE; + } ++ SkUNREACHABLE; + } + + GrDawnOpsRenderPass::GrDawnOpsRenderPass(GrDawnGpu* gpu, GrRenderTarget* rt, GrSurfaceOrigin origin, + const LoadAndStoreInfo& colorInfo, + const StencilLoadAndStoreInfo& stencilInfo) + : INHERITED(rt, origin) + , fGpu(gpu) + , fColorInfo(colorInfo) { +diff --git a/gfx/skia/skia/src/gpu/dawn/GrDawnUniformHandler.cpp b/gfx/skia/skia/src/gpu/dawn/GrDawnUniformHandler.cpp +--- a/gfx/skia/skia/src/gpu/dawn/GrDawnUniformHandler.cpp ++++ b/gfx/skia/skia/src/gpu/dawn/GrDawnUniformHandler.cpp +@@ -90,16 +90,17 @@ uint32_t grsltype_to_alignment_mask(GrSL + case kTexture2DSampler_GrSLType: + case kTextureExternalSampler_GrSLType: + case kTexture2DRectSampler_GrSLType: + case kTexture2D_GrSLType: + case kSampler_GrSLType: + break; + } + SK_ABORT("Unexpected type"); ++ SkUNREACHABLE; + } + + static inline uint32_t grsltype_to_size(GrSLType type) { + switch(type) { + case kByte_GrSLType: + case kUByte_GrSLType: + return 1; + case kByte2_GrSLType: +@@ -168,16 +169,17 @@ static inline uint32_t grsltype_to_size( + case kTexture2DSampler_GrSLType: + case kTextureExternalSampler_GrSLType: + case kTexture2DRectSampler_GrSLType: + case kTexture2D_GrSLType: + case kSampler_GrSLType: + break; + } + SK_ABORT("Unexpected type"); ++ SkUNREACHABLE; + } + + uint32_t get_ubo_offset(uint32_t* currentOffset, + GrSLType type, + int arrayCount) { + uint32_t alignmentMask = grsltype_to_alignment_mask(type); + // We want to use the std140 layout here, so we must make arrays align to 16 bytes. + if (arrayCount || type == kFloat2x2_GrSLType) { +diff --git a/gfx/skia/skia/src/gpu/dawn/GrDawnVaryingHandler.cpp b/gfx/skia/skia/src/gpu/dawn/GrDawnVaryingHandler.cpp +--- a/gfx/skia/skia/src/gpu/dawn/GrDawnVaryingHandler.cpp ++++ b/gfx/skia/skia/src/gpu/dawn/GrDawnVaryingHandler.cpp +@@ -71,16 +71,17 @@ static inline int grsltype_to_location_s + case kUByte_GrSLType: + return 1; + case kTexture2D_GrSLType: + return 0; + case kSampler_GrSLType: + return 0; + } + SK_ABORT("Unexpected type"); ++ SkUNREACHABLE; + } + + static void finalize_helper(GrDawnVaryingHandler::VarArray& vars) { + int locationIndex = 0; + for (int i = 0; i < vars.count(); ++i) { + GrShaderVar& var = vars[i]; + SkString location; + location.appendf("location = %d", locationIndex); +diff --git a/gfx/skia/skia/src/gpu/effects/GrConstColorProcessor.fp b/gfx/skia/skia/src/gpu/effects/GrConstColorProcessor.fp +--- a/gfx/skia/skia/src/gpu/effects/GrConstColorProcessor.fp ++++ b/gfx/skia/skia/src/gpu/effects/GrConstColorProcessor.fp +@@ -53,16 +53,17 @@ void main() { + case InputMode::kIgnore: + return color; + case InputMode::kModulateA: + return color * input.fA; + case InputMode::kModulateRGBA: + return color * input; + } + SK_ABORT("Unexpected mode"); ++ SkUNREACHABLE; + } + } + + @test(d) { + SkPMColor4f color; + int colorPicker = d->fRandom->nextULessThan(3); + switch (colorPicker) { + case 0: { +diff --git a/gfx/skia/skia/src/gpu/effects/GrCoverageSetOpXP.cpp b/gfx/skia/skia/src/gpu/effects/GrCoverageSetOpXP.cpp +--- a/gfx/skia/skia/src/gpu/effects/GrCoverageSetOpXP.cpp ++++ b/gfx/skia/skia/src/gpu/effects/GrCoverageSetOpXP.cpp +@@ -199,16 +199,17 @@ const GrXPFactory* GrCoverageSetOpXPFact + static _CONSTEXPR_ const GrCoverageSetOpXPFactory gRevDiffCDXPF( + SkRegion::kReverseDifference_Op, false); + return &gRevDiffCDXPF; + } + } + } + #undef _CONSTEXPR_ + SK_ABORT("Unknown region op."); ++ SkUNREACHABLE; + } + + sk_sp GrCoverageSetOpXPFactory::makeXferProcessor( + const GrProcessorAnalysisColor&, + GrProcessorAnalysisCoverage, + bool hasMixedSamples, + const GrCaps& caps, + GrClampType) const { +diff --git a/gfx/skia/skia/src/gpu/effects/GrPorterDuffXferProcessor.cpp b/gfx/skia/skia/src/gpu/effects/GrPorterDuffXferProcessor.cpp +--- a/gfx/skia/skia/src/gpu/effects/GrPorterDuffXferProcessor.cpp ++++ b/gfx/skia/skia/src/gpu/effects/GrPorterDuffXferProcessor.cpp +@@ -748,16 +748,17 @@ const GrXPFactory* GrPorterDuffXPFactory + case SkBlendMode::kPlus: + return &gPlusPDXPF; + case SkBlendMode::kModulate: + return &gModulatePDXPF; + case SkBlendMode::kScreen: + return &gScreenPDXPF; + default: + SK_ABORT("Unexpected blend mode."); ++ SkUNREACHABLE; + } + } + + sk_sp GrPorterDuffXPFactory::makeXferProcessor( + const GrProcessorAnalysisColor& color, GrProcessorAnalysisCoverage coverage, + bool hasMixedSamples, const GrCaps& caps, GrClampType clampType) const { + BlendFormula blendFormula; + bool isLCD = coverage == GrProcessorAnalysisCoverage::kLCD; +diff --git a/gfx/skia/skia/src/gpu/effects/GrSkSLFP.cpp b/gfx/skia/skia/src/gpu/effects/GrSkSLFP.cpp +--- a/gfx/skia/skia/src/gpu/effects/GrSkSLFP.cpp ++++ b/gfx/skia/skia/src/gpu/effects/GrSkSLFP.cpp +@@ -149,16 +149,17 @@ public: + return kHalf4x4_GrSLType; + } else if (type == *fContext.fBool_Type) { + return kBool_GrSLType; + } else if (type == *fContext.fInt_Type) { + return kInt_GrSLType; + } + printf("%s\n", SkSL::String(type.fName).c_str()); + SK_ABORT("unsupported uniform type"); ++ SkUNREACHABLE; + } + + void emitCode(EmitArgs& args) override { + for (const auto& v : fInAndUniformVars) { + if (v->fModifiers.fFlags & SkSL::Modifiers::kUniform_Flag && v->fType != + *fContext.fFragmentProcessor_Type) { + fUniformHandles.push_back(args.fUniformHandler->addUniform( + kFragment_GrShaderFlag, +@@ -563,11 +564,12 @@ std::unique_ptr GrS + } + std::unique_ptr result = GrSkSLFP::Make(d->context(), overdrawIndex, + "Overdraw", SKSL_OVERDRAW_SRC, + &inputs, sizeof(inputs)); + return std::unique_ptr(result.release()); + } + } + SK_ABORT("unreachable"); ++ SkUNREACHABLE; + } + + #endif +diff --git a/gfx/skia/skia/src/gpu/effects/generated/GrConstColorProcessor.h b/gfx/skia/skia/src/gpu/effects/generated/GrConstColorProcessor.h +--- a/gfx/skia/skia/src/gpu/effects/generated/GrConstColorProcessor.h ++++ b/gfx/skia/skia/src/gpu/effects/generated/GrConstColorProcessor.h +@@ -36,16 +36,17 @@ public: + case InputMode::kIgnore: + return color; + case InputMode::kModulateA: + return color * input.fA; + case InputMode::kModulateRGBA: + return color * input; + } + SK_ABORT("Unexpected mode"); ++ SkUNREACHABLE; + } + static std::unique_ptr Make(SkPMColor4f color, InputMode mode) { + return std::unique_ptr(new GrConstColorProcessor(color, mode)); + } + GrConstColorProcessor(const GrConstColorProcessor& src); + std::unique_ptr clone() const override; + const char* name() const override { return "ConstColorProcessor"; } + SkPMColor4f color; +diff --git a/gfx/skia/skia/src/gpu/geometry/GrShape.cpp b/gfx/skia/skia/src/gpu/geometry/GrShape.cpp +--- a/gfx/skia/skia/src/gpu/geometry/GrShape.cpp ++++ b/gfx/skia/skia/src/gpu/geometry/GrShape.cpp +@@ -159,16 +159,17 @@ SkRect GrShape::bounds() const { + return fRRectData.fRRect.getBounds(); + case Type::kArc: + // Could make this less conservative by looking at angles. + return fArcData.fOval; + case Type::kPath: + return this->path().getBounds(); + } + SK_ABORT("Unknown shape type"); ++ SkUNREACHABLE; + } + + SkRect GrShape::styledBounds() const { + if (this->isEmpty() && !fStyle.hasNonDashPathEffect()) { + return SkRect::MakeEmpty(); + } + + SkRect bounds; +@@ -249,16 +250,17 @@ int GrShape::unstyledKeySize() const { + if (dataKeySize >= 0) { + return dataKeySize; + } + // The key is the path ID and fill type. + return 2; + } + } + SK_ABORT("Should never get here."); ++ SkUNREACHABLE; + } + + void GrShape::writeUnstyledKey(uint32_t* key) const { + SkASSERT(this->unstyledKeySize()); + SkDEBUGCODE(uint32_t* origKey = key;) + if (fInheritedKey.count()) { + memcpy(key, fInheritedKey.get(), sizeof(uint32_t) * fInheritedKey.count()); + SkDEBUGCODE(key += fInheritedKey.count();) +diff --git a/gfx/skia/skia/src/gpu/gl/GrGLCaps.cpp b/gfx/skia/skia/src/gpu/gl/GrGLCaps.cpp +--- a/gfx/skia/skia/src/gpu/gl/GrGLCaps.cpp ++++ b/gfx/skia/skia/src/gpu/gl/GrGLCaps.cpp +@@ -4154,16 +4154,17 @@ GrBackendFormat GrGLCaps::getBackendForm + case SkImage::kETC1_CompressionType: + // if ETC2 is available default to that format + if (this->isFormatTexturable(GrGLFormat::kCOMPRESSED_RGB8_ETC2)) { + return GrBackendFormat::MakeGL(GR_GL_COMPRESSED_RGB8_ETC2, GR_GL_TEXTURE_2D); + } + return GrBackendFormat::MakeGL(GR_GL_COMPRESSED_ETC1_RGB8, GR_GL_TEXTURE_2D); + } + SK_ABORT("Invalid compression type"); ++ SkUNREACHABLE; + } + + GrSwizzle GrGLCaps::getTextureSwizzle(const GrBackendFormat& format, GrColorType colorType) const { + const auto& info = this->getFormatInfo(format.asGLFormat()); + for (int i = 0; i < info.fColorTypeInfoCount; ++i) { + const auto& ctInfo = info.fColorTypeInfos[i]; + if (ctInfo.fColorType == colorType) { + return ctInfo.fTextureSwizzle; +diff --git a/gfx/skia/skia/src/gpu/gl/GrGLGLSL.cpp b/gfx/skia/skia/src/gpu/gl/GrGLGLSL.cpp +--- a/gfx/skia/skia/src/gpu/gl/GrGLGLSL.cpp ++++ b/gfx/skia/skia/src/gpu/gl/GrGLGLSL.cpp +@@ -63,9 +63,10 @@ bool GrGLGetGLSLGeneration(const GrGLInt + if (ver >= GR_GLSL_VER(2,0)) { + *generation = k330_GrGLSLGeneration; // ES 3.0 + } else { + *generation = k110_GrGLSLGeneration; + } + return true; + } + SK_ABORT("Unknown GL Standard"); ++ SkUNREACHABLE; + } +diff --git a/gfx/skia/skia/src/gpu/gl/GrGLGpu.cpp b/gfx/skia/skia/src/gpu/gl/GrGLGpu.cpp +--- a/gfx/skia/skia/src/gpu/gl/GrGLGpu.cpp ++++ b/gfx/skia/skia/src/gpu/gl/GrGLGpu.cpp +@@ -191,16 +191,17 @@ static int gl_target_to_binding_index(Gr + case GR_GL_TEXTURE_2D: + return 0; + case GR_GL_TEXTURE_RECTANGLE: + return 1; + case GR_GL_TEXTURE_EXTERNAL: + return 2; + } + SK_ABORT("Unexpected GL texture target."); ++ SkUNREACHABLE; + } + + GrGpuResource::UniqueID GrGLGpu::TextureUnitBindings::boundID(GrGLenum target) const { + return fTargetBindings[gl_target_to_binding_index(target)].fBoundResourceID; + } + + bool GrGLGpu::TextureUnitBindings::hasBeenModified(GrGLenum target) const { + return fTargetBindings[gl_target_to_binding_index(target)].fHasBeenModified; +@@ -229,39 +230,42 @@ void GrGLGpu::TextureUnitBindings::inval + + static GrGLenum filter_to_gl_mag_filter(GrSamplerState::Filter filter) { + switch (filter) { + case GrSamplerState::Filter::kNearest: return GR_GL_NEAREST; + case GrSamplerState::Filter::kBilerp: return GR_GL_LINEAR; + case GrSamplerState::Filter::kMipMap: return GR_GL_LINEAR; + } + SK_ABORT("Unknown filter"); ++ SkUNREACHABLE; + } + + static GrGLenum filter_to_gl_min_filter(GrSamplerState::Filter filter) { + switch (filter) { + case GrSamplerState::Filter::kNearest: return GR_GL_NEAREST; + case GrSamplerState::Filter::kBilerp: return GR_GL_LINEAR; + case GrSamplerState::Filter::kMipMap: return GR_GL_LINEAR_MIPMAP_LINEAR; + } + SK_ABORT("Unknown filter"); ++ SkUNREACHABLE; + } + + static inline GrGLenum wrap_mode_to_gl_wrap(GrSamplerState::WrapMode wrapMode, + const GrCaps& caps) { + switch (wrapMode) { + case GrSamplerState::WrapMode::kClamp: return GR_GL_CLAMP_TO_EDGE; + case GrSamplerState::WrapMode::kRepeat: return GR_GL_REPEAT; + case GrSamplerState::WrapMode::kMirrorRepeat: return GR_GL_MIRRORED_REPEAT; + case GrSamplerState::WrapMode::kClampToBorder: + // May not be supported but should have been caught earlier + SkASSERT(caps.clampToBorderSupport()); + return GR_GL_CLAMP_TO_BORDER; + } + SK_ABORT("Unknown wrap mode"); ++ SkUNREACHABLE; + } + + /////////////////////////////////////////////////////////////////////////////// + + class GrGLGpu::SamplerObjectCache { + public: + SamplerObjectCache(GrGLGpu* gpu) : fGpu(gpu) { + fNumTextureUnits = fGpu->glCaps().shaderCaps()->maxFragmentSamplers(); +@@ -1102,17 +1106,17 @@ static bool renderbuffer_storage_msaa(co + GL_ALLOC_CALL(ctx.interface(), + RenderbufferStorageMultisampleES2EXT(GR_GL_RENDERBUFFER, + sampleCount, + format, + width, height)); + break; + case GrGLCaps::kNone_MSFBOType: + SK_ABORT("Shouldn't be here if we don't support multisampled renderbuffers."); +- break; ++ SkUNREACHABLE; + } + return (GR_GL_NO_ERROR == CHECK_ALLOC_ERROR(ctx.interface())); + } + + bool GrGLGpu::createRenderTargetObjects(const GrGLTexture::Desc& desc, + int sampleCount, + GrGLRenderTarget::IDs* rtIDs) { + rtIDs->fMSColorRenderbufferID = 0; +@@ -2270,19 +2274,20 @@ static GrGLenum gr_primitive_type_to_gl_ + case GrPrimitiveType::kPoints: + return GR_GL_POINTS; + case GrPrimitiveType::kLines: + return GR_GL_LINES; + case GrPrimitiveType::kLineStrip: + return GR_GL_LINE_STRIP; + case GrPrimitiveType::kPath: + SK_ABORT("non-mesh-based GrPrimitiveType"); +- return 0; ++ SkUNREACHABLE; + } + SK_ABORT("invalid GrPrimitiveType"); ++ SkUNREACHABLE; + } + + void GrGLGpu::sendMeshToGpu(GrPrimitiveType primitiveType, const GrBuffer* vertexBuffer, + int vertexCount, int baseVertex) { + const GrGLenum glPrimType = gr_primitive_type_to_gl_mode(primitiveType); + if (this->glCaps().drawArraysBaseVertexIsBroken()) { + this->setupGeometry(nullptr, vertexBuffer, baseVertex, nullptr, 0, GrPrimitiveRestart::kNo); + GL_CALL(DrawArrays(glPrimType, 0, vertexCount)); +@@ -4001,17 +4006,18 @@ int GrGLGpu::TextureToCopyProgramIdx(GrT + switch (GrSLCombinedSamplerTypeForTextureType(texture->texturePriv().textureType())) { + case kTexture2DSampler_GrSLType: + return 0; + case kTexture2DRectSampler_GrSLType: + return 1; + case kTextureExternalSampler_GrSLType: + return 2; + default: +- SK_ABORT("Unexpected samper type"); ++ SK_ABORT("Unexpected sampler type"); ++ SkUNREACHABLE; + } + } + + #ifdef SK_ENABLE_DUMP_GPU + #include "src/utils/SkJSONWriter.h" + void GrGLGpu::onDumpJSON(SkJSONWriter* writer) const { + // We are called by the base class, which has already called beginObject(). We choose to nest + // all of our caps information in a named sub-object. +diff --git a/gfx/skia/skia/src/gpu/gl/GrGLPath.cpp b/gfx/skia/skia/src/gpu/gl/GrGLPath.cpp +--- a/gfx/skia/skia/src/gpu/gl/GrGLPath.cpp ++++ b/gfx/skia/skia/src/gpu/gl/GrGLPath.cpp +@@ -192,16 +192,17 @@ inline bool init_path_object_for_general + + /* + * For now paths only natively support winding and even odd fill types + */ + static GrPathRendering::FillType convert_skpath_filltype(SkPath::FillType fill) { + switch (fill) { + default: + SK_ABORT("Incomplete Switch\n"); ++ SkUNREACHABLE; + case SkPath::kWinding_FillType: + case SkPath::kInverseWinding_FillType: + return GrPathRendering::kWinding_FillType; + case SkPath::kEvenOdd_FillType: + case SkPath::kInverseEvenOdd_FillType: + return GrPathRendering::kEvenOdd_FillType; + } + } +diff --git a/gfx/skia/skia/src/gpu/gl/GrGLTexture.cpp b/gfx/skia/skia/src/gpu/gl/GrGLTexture.cpp +--- a/gfx/skia/skia/src/gpu/gl/GrGLTexture.cpp ++++ b/gfx/skia/skia/src/gpu/gl/GrGLTexture.cpp +@@ -20,30 +20,33 @@ GrTextureType GrGLTexture::TextureTypeFr + case GR_GL_TEXTURE_2D: + return GrTextureType::k2D; + case GR_GL_TEXTURE_RECTANGLE: + return GrTextureType::kRectangle; + case GR_GL_TEXTURE_EXTERNAL: + return GrTextureType::kExternal; + } + SK_ABORT("Unexpected texture target"); ++ SkUNREACHABLE; + } + + static inline GrGLenum target_from_texture_type(GrTextureType type) { + switch (type) { + case GrTextureType::k2D: + return GR_GL_TEXTURE_2D; + case GrTextureType::kRectangle: + return GR_GL_TEXTURE_RECTANGLE; + case GrTextureType::kExternal: + return GR_GL_TEXTURE_EXTERNAL; + default: + SK_ABORT("Unexpected texture target"); ++ SkUNREACHABLE; + } + SK_ABORT("Unexpected texture type"); ++ SkUNREACHABLE; + } + + // Because this class is virtually derived from GrSurface we must explicitly call its constructor. + GrGLTexture::GrGLTexture(GrGLGpu* gpu, SkBudgeted budgeted, const Desc& desc, + GrMipMapsStatus mipMapsStatus) + : GrSurface(gpu, desc.fSize, desc.fConfig, GrProtected::kNo) + , INHERITED(gpu, desc.fSize, desc.fConfig, GrProtected::kNo, + TextureTypeFromTarget(desc.fTarget), mipMapsStatus) +diff --git a/gfx/skia/skia/src/gpu/gl/GrGLVertexArray.cpp b/gfx/skia/skia/src/gpu/gl/GrGLVertexArray.cpp +--- a/gfx/skia/skia/src/gpu/gl/GrGLVertexArray.cpp ++++ b/gfx/skia/skia/src/gpu/gl/GrGLVertexArray.cpp +@@ -75,16 +75,17 @@ static AttribLayout attrib_layout(GrVert + case kUint_GrVertexAttribType: + return {false, 1, GR_GL_UNSIGNED_INT}; + case kUShort_norm_GrVertexAttribType: + return {true, 1, GR_GL_UNSIGNED_SHORT}; + case kUShort4_norm_GrVertexAttribType: + return {true, 4, GR_GL_UNSIGNED_SHORT}; + } + SK_ABORT("Unknown vertex attrib type"); ++ SkUNREACHABLE; + }; + + void GrGLAttribArrayState::set(GrGLGpu* gpu, + int index, + const GrBuffer* vertexBuffer, + GrVertexAttribType cpuType, + GrSLType gpuType, + GrGLsizei stride, +diff --git a/gfx/skia/skia/src/gpu/glsl/GrGLSL.cpp b/gfx/skia/skia/src/gpu/glsl/GrGLSL.cpp +--- a/gfx/skia/skia/src/gpu/glsl/GrGLSL.cpp ++++ b/gfx/skia/skia/src/gpu/glsl/GrGLSL.cpp +@@ -93,9 +93,10 @@ const char* GrGLSLTypeString(GrSLType t) + case kUByte4_GrSLType: + return "ubyte4"; + case kTexture2D_GrSLType: + return "texture2D"; + case kSampler_GrSLType: + return "sampler"; + } + SK_ABORT("Unknown shader var type."); ++ SkUNREACHABLE; + } +diff --git a/gfx/skia/skia/src/gpu/glsl/GrGLSLVarying.cpp b/gfx/skia/skia/src/gpu/glsl/GrGLSLVarying.cpp +--- a/gfx/skia/skia/src/gpu/glsl/GrGLSLVarying.cpp ++++ b/gfx/skia/skia/src/gpu/glsl/GrGLSLVarying.cpp +@@ -30,16 +30,17 @@ static bool use_flat_interpolation(GrGLS + SkASSERT(!shaderCaps.preferFlatInterpolation() || + shaderCaps.flatInterpolationSupport()); + return shaderCaps.preferFlatInterpolation(); + case Interpolation::kMustBeFlat: + SkASSERT(shaderCaps.flatInterpolationSupport()); + return true; + } + SK_ABORT("Invalid interpolation"); ++ SkUNREACHABLE; + } + + void GrGLSLVaryingHandler::addVarying(const char* name, GrGLSLVarying* varying, + Interpolation interpolation) { + SkASSERT(GrSLTypeIsFloatType(varying->type()) || Interpolation::kMustBeFlat == interpolation); + bool willUseGeoShader = fProgramBuilder->primitiveProcessor().willUseGeoShader(); + VaryingInfo& v = fVaryings.push_back(); + +diff --git a/gfx/skia/skia/src/gpu/glsl/GrGLSLVertexGeoBuilder.cpp b/gfx/skia/skia/src/gpu/glsl/GrGLSLVertexGeoBuilder.cpp +--- a/gfx/skia/skia/src/gpu/glsl/GrGLSLVertexGeoBuilder.cpp ++++ b/gfx/skia/skia/src/gpu/glsl/GrGLSLVertexGeoBuilder.cpp +@@ -46,26 +46,28 @@ void GrGLSLVertexBuilder::onFinalize() { + static const char* input_type_name(GrGLSLGeometryBuilder::InputType in) { + using InputType = GrGLSLGeometryBuilder::InputType; + switch (in) { + case InputType::kPoints: return "points"; + case InputType::kLines: return "lines"; + case InputType::kTriangles: return "triangles"; + } + SK_ABORT("invalid input type"); ++ SkUNREACHABLE; + } + + static const char* output_type_name(GrGLSLGeometryBuilder::OutputType out) { + using OutputType = GrGLSLGeometryBuilder::OutputType; + switch (out) { + case OutputType::kPoints: return "points"; + case OutputType::kLineStrip: return "line_strip"; + case OutputType::kTriangleStrip: return "triangle_strip"; + } + SK_ABORT("invalid output type"); ++ SkUNREACHABLE; + } + + void GrGLSLGeometryBuilder::configure(InputType inputType, OutputType outputType, int maxVertices, + int numInvocations) { + SkASSERT(!this->isConfigured()); + fNumInvocations = numInvocations; + this->addLayoutQualifier(input_type_name(inputType), kIn_InterfaceQualifier); + this->addLayoutQualifier(SkStringPrintf("invocations = %i", numInvocations).c_str(), +diff --git a/gfx/skia/skia/src/gpu/mtl/GrMtlCaps.mm b/gfx/skia/skia/src/gpu/mtl/GrMtlCaps.mm +--- a/gfx/skia/skia/src/gpu/mtl/GrMtlCaps.mm ++++ b/gfx/skia/skia/src/gpu/mtl/GrMtlCaps.mm +@@ -501,16 +501,17 @@ size_t GrMtlCaps::GetFormatIndex(MTLPixe + static_assert(SK_ARRAY_COUNT(kMtlFormats) == GrMtlCaps::kNumMtlFormats, + "Size of kMtlFormats array must match static value in header"); + for (size_t i = 0; i < GrMtlCaps::kNumMtlFormats; ++i) { + if (kMtlFormats[i] == pixelFormat) { + return i; + } + } + SK_ABORT("Invalid MTLPixelFormat"); ++ SkUNREACHABLE; + } + + void GrMtlCaps::initFormatTable() { + FormatInfo* info; + + // Format: R8Unorm + { + info = &fFormatTable[GetFormatIndex(MTLPixelFormatR8Unorm)]; +@@ -1006,16 +1007,17 @@ GrBackendFormat GrMtlCaps::getBackendFor + case SkImage::kETC1_CompressionType: + #ifdef SK_BUILD_FOR_MAC + return {}; + #else + return GrBackendFormat::MakeMtl(MTLPixelFormatETC2_RGB8); + #endif + } + SK_ABORT("Invalid compression type"); ++ SkUNREACHABLE; + } + + GrSwizzle GrMtlCaps::getTextureSwizzle(const GrBackendFormat& format, GrColorType colorType) const { + MTLPixelFormat mtlFormat = GrBackendFormatAsMTLPixelFormat(format); + SkASSERT(mtlFormat != MTLPixelFormatInvalid); + const auto& info = this->getFormatInfo(mtlFormat); + for (int i = 0; i < info.fColorTypeInfoCount; ++i) { + const auto& ctInfo = info.fColorTypeInfos[i]; +diff --git a/gfx/skia/skia/src/gpu/mtl/GrMtlPipelineStateBuilder.mm b/gfx/skia/skia/src/gpu/mtl/GrMtlPipelineStateBuilder.mm +--- a/gfx/skia/skia/src/gpu/mtl/GrMtlPipelineStateBuilder.mm ++++ b/gfx/skia/skia/src/gpu/mtl/GrMtlPipelineStateBuilder.mm +@@ -150,16 +150,17 @@ static inline MTLVertexFormat attribute_ + return MTLVertexFormatUShortNormalized; + } else { + return MTLVertexFormatInvalid; + } + case kUShort4_norm_GrVertexAttribType: + return MTLVertexFormatUShort4Normalized; + } + SK_ABORT("Unknown vertex attribute type"); ++ SkUNREACHABLE; + } + + static MTLVertexDescriptor* create_vertex_descriptor(const GrPrimitiveProcessor& primProc) { + uint32_t vertexBinding = 0, instanceBinding = 0; + + int nextBinding = GrMtlUniformHandler::kLastUniformBinding + 1; + if (primProc.hasVertexAttributes()) { + vertexBinding = nextBinding++; +@@ -271,16 +272,17 @@ static MTLBlendFactor blend_coeff_to_mtl + } else { + return MTLBlendFactorZero; + } + case kIllegal_GrBlendCoeff: + return MTLBlendFactorZero; + } + + SK_ABORT("Unknown blend coefficient"); ++ SkUNREACHABLE; + } + + static MTLBlendOperation blend_equation_to_mtl_blend_op(GrBlendEquation equation) { + static const MTLBlendOperation gTable[] = { + MTLBlendOperationAdd, // kAdd_GrBlendEquation + MTLBlendOperationSubtract, // kSubtract_GrBlendEquation + MTLBlendOperationReverseSubtract, // kReverseSubtract_GrBlendEquation + }; +diff --git a/gfx/skia/skia/src/gpu/mtl/GrMtlSampler.mm b/gfx/skia/skia/src/gpu/mtl/GrMtlSampler.mm +--- a/gfx/skia/skia/src/gpu/mtl/GrMtlSampler.mm ++++ b/gfx/skia/skia/src/gpu/mtl/GrMtlSampler.mm +@@ -33,16 +33,17 @@ static inline MTLSamplerAddressMode wrap + } else + #endif + { + SkASSERT(false); + return MTLSamplerAddressModeClampToEdge; + } + } + SK_ABORT("Unknown wrap mode."); ++ SkUNREACHABLE; + } + + GrMtlSampler* GrMtlSampler::Create(const GrMtlGpu* gpu, const GrSamplerState& samplerState) { + static MTLSamplerMinMagFilter mtlMinMagFilterModes[] = { + MTLSamplerMinMagFilterNearest, + MTLSamplerMinMagFilterLinear, + MTLSamplerMinMagFilterLinear + }; +diff --git a/gfx/skia/skia/src/gpu/mtl/GrMtlUniformHandler.mm b/gfx/skia/skia/src/gpu/mtl/GrMtlUniformHandler.mm +--- a/gfx/skia/skia/src/gpu/mtl/GrMtlUniformHandler.mm ++++ b/gfx/skia/skia/src/gpu/mtl/GrMtlUniformHandler.mm +@@ -85,16 +85,17 @@ static uint32_t grsltype_to_alignment_ma + case kTexture2DSampler_GrSLType: + case kTextureExternalSampler_GrSLType: + case kTexture2DRectSampler_GrSLType: + case kSampler_GrSLType: + case kTexture2D_GrSLType: + break; + } + SK_ABORT("Unexpected type"); ++ SkUNREACHABLE; + } + + /** Returns the size in bytes taken up in Metal buffers for GrSLTypes. */ + static inline uint32_t grsltype_to_mtl_size(GrSLType type) { + switch(type) { + case kByte_GrSLType: + return sizeof(int8_t); + case kByte2_GrSLType: +@@ -167,16 +168,17 @@ static inline uint32_t grsltype_to_mtl_s + case kTexture2DSampler_GrSLType: + case kTextureExternalSampler_GrSLType: + case kTexture2DRectSampler_GrSLType: + case kSampler_GrSLType: + case kTexture2D_GrSLType: + break; + } + SK_ABORT("Unexpected type"); ++ SkUNREACHABLE; + } + + // Given the current offset into the ubo, calculate the offset for the uniform we're trying to add + // taking into consideration all alignment requirements. The uniformOffset is set to the offset for + // the new uniform, and currentOffset is updated to be the offset to the end of the new uniform. + static void get_ubo_aligned_offset(uint32_t* uniformOffset, + uint32_t* currentOffset, + uint32_t* maxAlignment, +diff --git a/gfx/skia/skia/src/gpu/mtl/GrMtlUtil.mm b/gfx/skia/skia/src/gpu/mtl/GrMtlUtil.mm +--- a/gfx/skia/skia/src/gpu/mtl/GrMtlUtil.mm ++++ b/gfx/skia/skia/src/gpu/mtl/GrMtlUtil.mm +@@ -107,16 +107,17 @@ bool GrPixelConfigToMTLFormat(GrPixelCon + case kRGBA_16161616_GrPixelConfig: + *format = MTLPixelFormatRGBA16Unorm; + return true; + case kRG_half_GrPixelConfig: + *format = MTLPixelFormatRG16Float; + return true; + } + SK_ABORT("Unexpected config"); ++ SkUNREACHABLE; + } + + MTLTextureDescriptor* GrGetMTLTextureDescriptor(id mtlTexture) { + MTLTextureDescriptor* texDesc = [[MTLTextureDescriptor alloc] init]; + texDesc.textureType = mtlTexture.textureType; + texDesc.pixelFormat = mtlTexture.pixelFormat; + texDesc.width = mtlTexture.width; + texDesc.height = mtlTexture.height; +diff --git a/gfx/skia/skia/src/gpu/ops/GrDrawVerticesOp.cpp b/gfx/skia/skia/src/gpu/ops/GrDrawVerticesOp.cpp +--- a/gfx/skia/skia/src/gpu/ops/GrDrawVerticesOp.cpp ++++ b/gfx/skia/skia/src/gpu/ops/GrDrawVerticesOp.cpp +@@ -605,16 +605,17 @@ static uint32_t seed_vertices(GrPrimitiv + case GrPrimitiveType::kLines: + case GrPrimitiveType::kLineStrip: + return 2; + case GrPrimitiveType::kPath: + SkASSERT(0); + return 0; + } + SK_ABORT("Incomplete switch\n"); ++ SkUNREACHABLE; + } + + static uint32_t primitive_vertices(GrPrimitiveType type) { + switch (type) { + case GrPrimitiveType::kTriangles: + return 3; + case GrPrimitiveType::kLines: + return 2; +@@ -622,16 +623,17 @@ static uint32_t primitive_vertices(GrPri + case GrPrimitiveType::kPoints: + case GrPrimitiveType::kLineStrip: + return 1; + case GrPrimitiveType::kPath: + SkASSERT(0); + return 0; + } + SK_ABORT("Incomplete switch\n"); ++ SkUNREACHABLE; + } + + static SkPoint random_point(SkRandom* random, SkScalar min, SkScalar max) { + SkPoint p; + p.fX = random->nextRangeScalar(min, max); + p.fY = random->nextRangeScalar(min, max); + return p; + } +diff --git a/gfx/skia/skia/src/gpu/ops/GrFillRRectOp.cpp b/gfx/skia/skia/src/gpu/ops/GrFillRRectOp.cpp +--- a/gfx/skia/skia/src/gpu/ops/GrFillRRectOp.cpp ++++ b/gfx/skia/skia/src/gpu/ops/GrFillRRectOp.cpp +@@ -818,9 +818,10 @@ static bool can_use_hw_derivatives_with_ + if (!can_use_hw_derivatives_with_coverage(devScale, rrect.radii(corner))) { + return false; + } + } + return true; + } + } + SK_ABORT("Invalid round rect type."); ++ SkUNREACHABLE; + } +diff --git a/gfx/skia/skia/src/gpu/ops/GrOvalOpFactory.cpp b/gfx/skia/skia/src/gpu/ops/GrOvalOpFactory.cpp +--- a/gfx/skia/skia/src/gpu/ops/GrOvalOpFactory.cpp ++++ b/gfx/skia/skia/src/gpu/ops/GrOvalOpFactory.cpp +@@ -2278,39 +2278,42 @@ static int rrect_type_to_vert_count(RRec + switch (type) { + case kFill_RRectType: + case kStroke_RRectType: + return kVertsPerStandardRRect; + case kOverstroke_RRectType: + return kVertsPerOverstrokeRRect; + } + SK_ABORT("Invalid type"); ++ SkUNREACHABLE; + } + + static int rrect_type_to_index_count(RRectType type) { + switch (type) { + case kFill_RRectType: + return kIndicesPerFillRRect; + case kStroke_RRectType: + return kIndicesPerStrokeRRect; + case kOverstroke_RRectType: + return kIndicesPerOverstrokeRRect; + } + SK_ABORT("Invalid type"); ++ SkUNREACHABLE; + } + + static const uint16_t* rrect_type_to_indices(RRectType type) { + switch (type) { + case kFill_RRectType: + case kStroke_RRectType: + return gStandardRRectIndices; + case kOverstroke_RRectType: + return gOverstrokeRRectIndices; + } + SK_ABORT("Invalid type"); ++ SkUNREACHABLE; + } + + /////////////////////////////////////////////////////////////////////////////////////////////////// + + // For distance computations in the interior of filled rrects we: + // + // add a interior degenerate (point or line) rect + // each vertex of that rect gets -outerRad as its radius +diff --git a/gfx/skia/skia/src/gpu/ops/GrShadowRRectOp.cpp b/gfx/skia/skia/src/gpu/ops/GrShadowRRectOp.cpp +--- a/gfx/skia/skia/src/gpu/ops/GrShadowRRectOp.cpp ++++ b/gfx/skia/skia/src/gpu/ops/GrShadowRRectOp.cpp +@@ -150,39 +150,42 @@ static int rrect_type_to_vert_count(RRec + case kFill_RRectType: + return kVertsPerFillRRect; + case kStroke_RRectType: + return kVertsPerStrokeRRect; + case kOverstroke_RRectType: + return kVertsPerOverstrokeRRect; + } + SK_ABORT("Invalid type"); ++ SkUNREACHABLE; + } + + static int rrect_type_to_index_count(RRectType type) { + switch (type) { + case kFill_RRectType: + return kIndicesPerFillRRect; + case kStroke_RRectType: + return kIndicesPerStrokeRRect; + case kOverstroke_RRectType: + return kIndicesPerOverstrokeRRect; + } + SK_ABORT("Invalid type"); ++ SkUNREACHABLE; + } + + static const uint16_t* rrect_type_to_indices(RRectType type) { + switch (type) { + case kFill_RRectType: + case kStroke_RRectType: + return gRRectIndices + 6*4; + case kOverstroke_RRectType: + return gRRectIndices; + } + SK_ABORT("Invalid type"); ++ SkUNREACHABLE; + } + + /////////////////////////////////////////////////////////////////////////////// + namespace { + + class ShadowCircularRRectOp final : public GrMeshDrawOp { + public: + DEFINE_OP_CLASS_ID +diff --git a/gfx/skia/skia/src/gpu/text/GrTextBlob.h b/gfx/skia/skia/src/gpu/text/GrTextBlob.h +--- a/gfx/skia/skia/src/gpu/text/GrTextBlob.h ++++ b/gfx/skia/skia/src/gpu/text/GrTextBlob.h +@@ -120,16 +120,17 @@ public: + } + + void operator delete(void* p) { + ::operator delete(p); + } + + void* operator new(size_t) { + SK_ABORT("All blobs are created by placement new."); ++ SkUNREACHABLE; + } + + void* operator new(size_t, void* p) { return p; } + + bool hasDistanceField() const { return SkToBool(fTextType & kHasDistanceField_TextType); } + bool hasBitmap() const { return SkToBool(fTextType & kHasBitmap_TextType); } + void setHasDistanceField() { fTextType |= kHasDistanceField_TextType; } + void setHasBitmap() { fTextType |= kHasBitmap_TextType; } +diff --git a/gfx/skia/skia/src/gpu/text/GrTextBlobVertexRegenerator.cpp b/gfx/skia/skia/src/gpu/text/GrTextBlobVertexRegenerator.cpp +--- a/gfx/skia/skia/src/gpu/text/GrTextBlobVertexRegenerator.cpp ++++ b/gfx/skia/skia/src/gpu/text/GrTextBlobVertexRegenerator.cpp +@@ -279,9 +279,10 @@ bool GrTextBlob::VertexRegenerator::rege + // set use tokens for all of the glyphs in our subrun. This is only valid if we + // have a valid atlas generation + fFullAtlasManager->setUseTokenBulk(*fSubRun->bulkUseToken(), + fUploadTarget->tokenTracker()->nextDrawToken(), + fSubRun->maskFormat()); + return true; + } + SK_ABORT("Should not get here"); ++ SkUNREACHABLE; + } +diff --git a/gfx/skia/skia/src/gpu/vk/GrVkCaps.cpp b/gfx/skia/skia/src/gpu/vk/GrVkCaps.cpp +--- a/gfx/skia/skia/src/gpu/vk/GrVkCaps.cpp ++++ b/gfx/skia/skia/src/gpu/vk/GrVkCaps.cpp +@@ -103,16 +103,17 @@ static FormatCompatibilityClass format_c + case VK_FORMAT_R8G8B8_UNORM: + return FormatCompatibilityClass::k24_3_1; + + case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK: + return FormatCompatibilityClass::kETC2_RGB_8_16; + + default: + SK_ABORT("Unsupported VkFormat"); ++ SkUNREACHABLE; + } + } + + bool GrVkCaps::canCopyImage(VkFormat dstFormat, int dstSampleCnt, bool dstHasYcbcr, + VkFormat srcFormat, int srcSampleCnt, bool srcHasYcbcr) const { + if ((dstSampleCnt > 1 || srcSampleCnt > 1) && dstSampleCnt != srcSampleCnt) { + return false; + } +@@ -1651,16 +1652,17 @@ GrBackendFormat GrVkCaps::onGetDefaultBa + + GrBackendFormat GrVkCaps::getBackendFormatFromCompressionType( + SkImage::CompressionType compressionType) const { + switch (compressionType) { + case SkImage::kETC1_CompressionType: + return GrBackendFormat::MakeVk(VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK); + } + SK_ABORT("Invalid compression type"); ++ SkUNREACHABLE; + } + + GrSwizzle GrVkCaps::getTextureSwizzle(const GrBackendFormat& format, GrColorType colorType) const { + VkFormat vkFormat; + SkAssertResult(format.asVkFormat(&vkFormat)); + const auto& info = this->getFormatInfo(vkFormat); + for (int i = 0; i < info.fColorTypeInfoCount; ++i) { + const auto& ctInfo = info.fColorTypeInfos[i]; +diff --git a/gfx/skia/skia/src/gpu/vk/GrVkMemory.cpp b/gfx/skia/skia/src/gpu/vk/GrVkMemory.cpp +--- a/gfx/skia/skia/src/gpu/vk/GrVkMemory.cpp ++++ b/gfx/skia/skia/src/gpu/vk/GrVkMemory.cpp +@@ -23,16 +23,17 @@ static BufferUsage get_buffer_usage(GrVk + case GrVkBuffer::kUniform_Type: + SkASSERT(dynamic); + return BufferUsage::kCpuWritesGpuReads; + case GrVkBuffer::kCopyRead_Type: // fall through + case GrVkBuffer::kCopyWrite_Type: + return BufferUsage::kCpuOnly; + } + SK_ABORT("Invalid GrVkBuffer::Type"); ++ SkUNREACHABLE; + } + + bool GrVkMemory::AllocAndBindBufferMemory(const GrVkGpu* gpu, + VkBuffer buffer, + GrVkBuffer::Type type, + bool dynamic, + GrVkAlloc* alloc) { + GrVkMemoryAllocator* allocator = gpu->memoryAllocator(); +diff --git a/gfx/skia/skia/src/gpu/vk/GrVkPipeline.cpp b/gfx/skia/skia/src/gpu/vk/GrVkPipeline.cpp +--- a/gfx/skia/skia/src/gpu/vk/GrVkPipeline.cpp ++++ b/gfx/skia/skia/src/gpu/vk/GrVkPipeline.cpp +@@ -75,16 +75,17 @@ static inline VkFormat attrib_type_to_vk + case kUint_GrVertexAttribType: + return VK_FORMAT_R32_UINT; + case kUShort_norm_GrVertexAttribType: + return VK_FORMAT_R16_UNORM; + case kUShort4_norm_GrVertexAttribType: + return VK_FORMAT_R16G16B16A16_UNORM; + } + SK_ABORT("Unknown vertex attrib type"); ++ SkUNREACHABLE; + } + + static void setup_vertex_input_state(const GrPrimitiveProcessor& primProc, + VkPipelineVertexInputStateCreateInfo* vertexInputInfo, + SkSTArray<2, VkVertexInputBindingDescription, true>* bindingDescs, + VkVertexInputAttributeDescription* attributeDesc) { + uint32_t vertexBinding = 0, instanceBinding = 0; + +@@ -157,18 +158,20 @@ static VkPrimitiveTopology gr_primitive_ + case GrPrimitiveType::kPoints: + return VK_PRIMITIVE_TOPOLOGY_POINT_LIST; + case GrPrimitiveType::kLines: + return VK_PRIMITIVE_TOPOLOGY_LINE_LIST; + case GrPrimitiveType::kLineStrip: + return VK_PRIMITIVE_TOPOLOGY_LINE_STRIP; + case GrPrimitiveType::kPath: + SK_ABORT("Unsupported primitive type"); ++ SkUNREACHABLE; + } + SK_ABORT("invalid GrPrimitiveType"); ++ SkUNREACHABLE; + } + + static void setup_input_assembly_state(GrPrimitiveType primitiveType, + VkPipelineInputAssemblyStateCreateInfo* inputAssemblyInfo) { + memset(inputAssemblyInfo, 0, sizeof(VkPipelineInputAssemblyStateCreateInfo)); + inputAssemblyInfo->sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; + inputAssemblyInfo->pNext = nullptr; + inputAssemblyInfo->flags = 0; +diff --git a/gfx/skia/skia/src/gpu/vk/GrVkSampler.cpp b/gfx/skia/skia/src/gpu/vk/GrVkSampler.cpp +--- a/gfx/skia/skia/src/gpu/vk/GrVkSampler.cpp ++++ b/gfx/skia/skia/src/gpu/vk/GrVkSampler.cpp +@@ -18,16 +18,17 @@ static inline VkSamplerAddressMode wrap_ + case GrSamplerState::WrapMode::kRepeat: + return VK_SAMPLER_ADDRESS_MODE_REPEAT; + case GrSamplerState::WrapMode::kMirrorRepeat: + return VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT; + case GrSamplerState::WrapMode::kClampToBorder: + return VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER; + } + SK_ABORT("Unknown wrap mode."); ++ SkUNREACHABLE; + } + + GrVkSampler* GrVkSampler::Create(GrVkGpu* gpu, const GrSamplerState& samplerState, + const GrVkYcbcrConversionInfo& ycbcrInfo) { + static VkFilter vkMinFilterModes[] = { + VK_FILTER_NEAREST, + VK_FILTER_LINEAR, + VK_FILTER_LINEAR +diff --git a/gfx/skia/skia/src/gpu/vk/GrVkTransferBuffer.h b/gfx/skia/skia/src/gpu/vk/GrVkTransferBuffer.h +--- a/gfx/skia/skia/src/gpu/vk/GrVkTransferBuffer.h ++++ b/gfx/skia/skia/src/gpu/vk/GrVkTransferBuffer.h +@@ -29,16 +29,17 @@ private: + const SkString& dumpName) const override; + + void onMap() override { this->GrGpuBuffer::fMapPtr = this->vkMap(this->getVkGpu()); } + + void onUnmap() override { this->vkUnmap(this->getVkGpu()); } + + bool onUpdateData(const void* src, size_t srcSizeInBytes) override { + SK_ABORT("Not implemented for transfer buffers."); ++ SkUNREACHABLE; + } + + GrVkGpu* getVkGpu() const { + SkASSERT(!this->wasDestroyed()); + return reinterpret_cast(this->getGpu()); + } + + typedef GrGpuBuffer INHERITED; +diff --git a/gfx/skia/skia/src/gpu/vk/GrVkUniformHandler.cpp b/gfx/skia/skia/src/gpu/vk/GrVkUniformHandler.cpp +--- a/gfx/skia/skia/src/gpu/vk/GrVkUniformHandler.cpp ++++ b/gfx/skia/skia/src/gpu/vk/GrVkUniformHandler.cpp +@@ -84,16 +84,17 @@ static uint32_t grsltype_to_alignment_ma + case kTexture2DSampler_GrSLType: + case kTextureExternalSampler_GrSLType: + case kTexture2DRectSampler_GrSLType: + case kSampler_GrSLType: + case kTexture2D_GrSLType: + break; + } + SK_ABORT("Unexpected type"); ++ SkUNREACHABLE; + } + + /** Returns the size in bytes taken up in vulkanbuffers for GrSLTypes. */ + static inline uint32_t grsltype_to_vk_size(GrSLType type) { + switch(type) { + case kByte_GrSLType: + return sizeof(int8_t); + case kByte2_GrSLType: +@@ -167,16 +168,17 @@ static inline uint32_t grsltype_to_vk_si + case kTexture2DSampler_GrSLType: + case kTextureExternalSampler_GrSLType: + case kTexture2DRectSampler_GrSLType: + case kSampler_GrSLType: + case kTexture2D_GrSLType: + break; + } + SK_ABORT("Unexpected type"); ++ SkUNREACHABLE; + } + + + // Given the current offset into the ubo, calculate the offset for the uniform we're trying to add + // taking into consideration all alignment requirements. The uniformOffset is set to the offset for + // the new uniform, and currentOffset is updated to be the offset to the end of the new uniform. + static void get_ubo_aligned_offset(uint32_t* uniformOffset, + uint32_t* currentOffset, +diff --git a/gfx/skia/skia/src/gpu/vk/GrVkVaryingHandler.cpp b/gfx/skia/skia/src/gpu/vk/GrVkVaryingHandler.cpp +--- a/gfx/skia/skia/src/gpu/vk/GrVkVaryingHandler.cpp ++++ b/gfx/skia/skia/src/gpu/vk/GrVkVaryingHandler.cpp +@@ -69,16 +69,17 @@ static inline int grsltype_to_location_s + case kByte_GrSLType: + return 1; + case kUint_GrSLType: // fall through + case kUShort_GrSLType: + case kUByte_GrSLType: + return 1; + } + SK_ABORT("Unexpected type"); ++ SkUNREACHABLE; + } + + static void finalize_helper(GrVkVaryingHandler::VarArray& vars) { + int locationIndex = 0; + for (int i = 0; i < vars.count(); ++i) { + GrShaderVar& var = vars[i]; + SkString location; + location.appendf("location = %d", locationIndex); +diff --git a/gfx/skia/skia/src/pdf/SkPDFTag.cpp b/gfx/skia/skia/src/pdf/SkPDFTag.cpp +--- a/gfx/skia/skia/src/pdf/SkPDFTag.cpp ++++ b/gfx/skia/skia/src/pdf/SkPDFTag.cpp +@@ -59,16 +59,17 @@ static const char* tag_name_from_type(Sk + M(WT); + M(WP); + M(Figure); + M(Formula); + M(Form); + #undef M + } + SK_ABORT("bad tag"); ++ SkUNREACHABLE; + } + + struct SkPDFTagNode { + SkPDFTagNode* fChildren = nullptr; + size_t fChildCount = 0; + struct MarkedContentInfo { + unsigned fPageIndex; + int fMarkId; +diff --git a/gfx/skia/skia/src/ports/SkFontMgr_FontConfigInterface.cpp b/gfx/skia/skia/src/ports/SkFontMgr_FontConfigInterface.cpp +--- a/gfx/skia/skia/src/ports/SkFontMgr_FontConfigInterface.cpp ++++ b/gfx/skia/skia/src/ports/SkFontMgr_FontConfigInterface.cpp +@@ -168,28 +168,32 @@ public: + SkFontMgr_FCI(sk_sp fci) + : fFCI(std::move(fci)) + , fCache(kMaxSize) + {} + + protected: + int onCountFamilies() const override { + SK_ABORT("Not implemented."); ++ SkUNREACHABLE; + } + + void onGetFamilyName(int index, SkString* familyName) const override { + SK_ABORT("Not implemented."); ++ SkUNREACHABLE; + } + + SkFontStyleSet* onCreateStyleSet(int index) const override { + SK_ABORT("Not implemented."); ++ SkUNREACHABLE; + } + + SkFontStyleSet* onMatchFamily(const char familyName[]) const override { + SK_ABORT("Not implemented."); ++ SkUNREACHABLE; + } + + SkTypeface* onMatchFamilyStyle(const char requestedFamilyName[], + const SkFontStyle& requestedStyle) const override + { + SkAutoMutexExclusive ama(fMutex); + + SkFontConfigInterface::FontIdentity identity; +@@ -210,20 +214,22 @@ protected: + } + return face.release(); + } + + SkTypeface* onMatchFamilyStyleCharacter(const char familyName[], const SkFontStyle&, + const char* bcp47[], int bcp47Count, + SkUnichar character) const override { + SK_ABORT("Not implemented."); ++ SkUNREACHABLE; + } + + SkTypeface* onMatchFaceStyle(const SkTypeface*, const SkFontStyle&) const override { + SK_ABORT("Not implemented."); ++ SkUNREACHABLE; + } + + sk_sp onMakeFromData(sk_sp data, int ttcIndex) const override { + return this->onMakeFromStreamIndex(SkMemoryStream::Make(std::move(data)), ttcIndex); + } + + sk_sp onMakeFromStreamIndex(std::unique_ptr stream, + int ttcIndex) const override { +diff --git a/gfx/skia/skia/src/shaders/SkImageShader.cpp b/gfx/skia/skia/src/shaders/SkImageShader.cpp +--- a/gfx/skia/skia/src/shaders/SkImageShader.cpp ++++ b/gfx/skia/skia/src/shaders/SkImageShader.cpp +@@ -178,16 +178,17 @@ static GrSamplerState::WrapMode tile_mod + case SkTileMode::kRepeat: + return GrSamplerState::WrapMode::kRepeat; + case SkTileMode::kMirror: + return GrSamplerState::WrapMode::kMirrorRepeat; + case SkTileMode::kDecal: + return GrSamplerState::WrapMode::kClampToBorder; + } + SK_ABORT("Unknown tile mode."); ++ SkUNREACHABLE; + } + + std::unique_ptr SkImageShader::asFragmentProcessor( + const GrFPArgs& args) const { + const auto lm = this->totalLocalMatrix(args.fPreLocalMatrix, args.fPostLocalMatrix); + SkMatrix lmInverse; + if (!lm->invert(&lmInverse)) { + return nullptr; +diff --git a/gfx/skia/skia/src/utils/SkShadowUtils.cpp b/gfx/skia/skia/src/utils/SkShadowUtils.cpp +--- a/gfx/skia/skia/src/utils/SkShadowUtils.cpp ++++ b/gfx/skia/skia/src/utils/SkShadowUtils.cpp +@@ -144,16 +144,17 @@ struct SpotVerticesFactory { + // if the offsets don't match. + if (fOffset == that.fOffset) { + translate->set(0, 0); + return true; + } + return false; + } + SK_ABORT("Uninitialized occluder type?"); ++ SkUNREACHABLE; + } + + sk_sp makeVertices(const SkPath& path, const SkMatrix& ctm, + SkVector* translate) const { + bool transparent = OccluderType::kTransparent == fOccluderType; + SkPoint3 zParams = SkPoint3::Make(0, 0, fOccluderHeight); + if (ctm.hasPerspective() || OccluderType::kOpaquePartialUmbra == fOccluderType) { + translate->set(0, 0); +diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp +--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp ++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp +@@ -2646,16 +2646,17 @@ get_type_name_for_precision_qualifier(co + unreachable("Unsupported sampler/image type"); + } /* sampler/image type */ + break; + } /* GLSL_TYPE_SAMPLER/GLSL_TYPE_IMAGE */ + break; + default: + unreachable("Unsupported type"); + } /* base type */ ++ return ""; + } + + static unsigned + select_gles_precision(unsigned qual_precision, + const glsl_type *type, + struct _mesa_glsl_parse_state *state, YYLTYPE *loc) + { + /* Precision qualifiers do not have any meaning in Desktop GLSL. +diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir.cpp +--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir.cpp ++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/ir.cpp +@@ -619,16 +619,17 @@ ir_expression::get_num_operands(ir_expre + + if (op <= ir_last_triop) + return 3; + + if (op <= ir_last_quadop) + return 4; + + unreachable("Could not calculate number of operands"); ++ return -1; + } + + #include "ir_expression_operation_strings.h" + + const char* + depth_layout_string(ir_depth_layout layout) + { + switch(layout) { +diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/loop_analysis.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/loop_analysis.cpp +--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/loop_analysis.cpp ++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/loop_analysis.cpp +@@ -234,16 +234,17 @@ incremented_before_terminator(ir_loop *l + } + + default: + break; + } + } + + unreachable("Unable to find induction variable"); ++ return false; + } + + /** + * Record the fact that the given loop variable was referenced inside the loop. + * + * \arg in_assignee is true if the reference was on the LHS of an assignment. + * + * \arg in_conditional_code_or_nested_loop is true if the reference occurred +diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp +--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp ++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp +@@ -224,16 +224,17 @@ write_mask_to_swizzle(unsigned write_mas + { + switch (write_mask) { + case WRITEMASK_X: return SWIZZLE_X; + case WRITEMASK_Y: return SWIZZLE_Y; + case WRITEMASK_Z: return SWIZZLE_Z; + case WRITEMASK_W: return SWIZZLE_W; + } + unreachable("not reached"); ++ return 0; + } + + /** + * Returns whether a single-channeled write mask matches a swizzle. + */ + static bool + write_mask_matches_swizzle(unsigned write_mask, + const ir_swizzle *swz) +diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.cpp +--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.cpp ++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl_types.cpp +@@ -455,16 +455,17 @@ const glsl_type *glsl_type::get_bare_typ + case GLSL_TYPE_VOID: + case GLSL_TYPE_SUBROUTINE: + case GLSL_TYPE_FUNCTION: + case GLSL_TYPE_ERROR: + return this; + } + + unreachable("Invalid base type"); ++ return nullptr; + } + + const glsl_type *glsl_type::get_float16_type() const + { + assert(this->base_type == GLSL_TYPE_FLOAT); + + return get_instance(GLSL_TYPE_FLOAT16, + this->vector_elements, +@@ -2011,16 +2012,17 @@ glsl_type::get_explicit_std140_type(bool + (enum glsl_interface_packing)this->interface_packing, + this->interface_row_major, + this->name); + + delete[] fields; + return type; + } else { + unreachable("Invalid type for UBO or SSBO"); ++ return nullptr; + } + } + + unsigned + glsl_type::std430_base_alignment(bool row_major) const + { + + unsigned N = is_64bit() ? 8 : 4; +@@ -2369,16 +2371,17 @@ glsl_type::get_explicit_std430_type(bool + (enum glsl_interface_packing)this->interface_packing, + this->interface_row_major, + this->name); + + delete[] fields; + return type; + } else { + unreachable("Invalid type for SSBO"); ++ return nullptr; + } + } + + const glsl_type * + glsl_type::get_explicit_interface_type(bool supports_std430) const + { + enum glsl_interface_packing packing = + this->get_internal_ifc_packing(supports_std430); +@@ -2443,16 +2446,17 @@ glsl_type::get_explicit_type_for_size_al + unsigned stride = align(col_size, col_align); + + *size = this->matrix_columns * stride; + *alignment = col_align; + return glsl_type::get_instance(this->base_type, this->vector_elements, + this->matrix_columns, stride, false); + } else { + unreachable("Unhandled type."); ++ return nullptr; + } + } + + unsigned + glsl_type::count_vec4_slots(bool is_gl_vertex_input, bool is_bindless) const + { + /* From page 31 (page 37 of the PDF) of the GLSL 1.50 spec: + * +@@ -2943,12 +2947,13 @@ glsl_get_sampler_dim_coordinate_componen + case GLSL_SAMPLER_DIM_SUBPASS: + case GLSL_SAMPLER_DIM_SUBPASS_MS: + return 2; + case GLSL_SAMPLER_DIM_3D: + case GLSL_SAMPLER_DIM_CUBE: + return 3; + default: + unreachable("Unknown sampler dim"); ++ return -1; + } + } + + } +diff --git a/third_party/rust/glslopt/glsl-optimizer/src/mesa/main/shaderobj.h b/third_party/rust/glslopt/glsl-optimizer/src/mesa/main/shaderobj.h +--- a/third_party/rust/glslopt/glsl-optimizer/src/mesa/main/shaderobj.h ++++ b/third_party/rust/glslopt/glsl-optimizer/src/mesa/main/shaderobj.h +@@ -180,16 +180,17 @@ static inline gl_shader_stage + case GL_COMPUTE_SUBROUTINE_UNIFORM: + return MESA_SHADER_COMPUTE; + case GL_TESS_CONTROL_SUBROUTINE_UNIFORM: + return MESA_SHADER_TESS_CTRL; + case GL_TESS_EVALUATION_SUBROUTINE_UNIFORM: + return MESA_SHADER_TESS_EVAL; + } + unreachable("not reached"); ++ return MESA_SHADER_NONE; + } + + static inline gl_shader_stage + _mesa_shader_stage_from_subroutine(GLenum subroutine) + { + switch (subroutine) { + case GL_VERTEX_SUBROUTINE: + return MESA_SHADER_VERTEX; +@@ -200,16 +201,17 @@ static inline gl_shader_stage + case GL_COMPUTE_SUBROUTINE: + return MESA_SHADER_COMPUTE; + case GL_TESS_CONTROL_SUBROUTINE: + return MESA_SHADER_TESS_CTRL; + case GL_TESS_EVALUATION_SUBROUTINE: + return MESA_SHADER_TESS_EVAL; + } + unreachable("not reached"); ++ return MESA_SHADER_NONE; + } + + static inline GLenum + _mesa_shader_stage_to_subroutine(gl_shader_stage stage) + { + switch (stage) { + case MESA_SHADER_VERTEX: + return GL_VERTEX_SUBROUTINE; +@@ -225,16 +227,17 @@ static inline GLenum + return GL_TESS_EVALUATION_SUBROUTINE; + case MESA_SHADER_NONE: + break; + case MESA_SHADER_KERNEL: + unreachable("not reached"); + break; + } + unreachable("not reached"); ++ return GL_VERTEX_PROGRAM_ARB; + } + + static inline GLenum + _mesa_shader_stage_to_subroutine_uniform(gl_shader_stage stage) + { + switch (stage) { + case MESA_SHADER_VERTEX: + return GL_VERTEX_SUBROUTINE_UNIFORM; +@@ -248,16 +251,17 @@ static inline GLenum + return GL_TESS_CONTROL_SUBROUTINE_UNIFORM; + case MESA_SHADER_TESS_EVAL: + return GL_TESS_EVALUATION_SUBROUTINE_UNIFORM; + case MESA_SHADER_NONE: + case MESA_SHADER_KERNEL: + break; + } + unreachable("not reached"); ++ return GL_VERTEX_PROGRAM_ARB; + } + + extern bool + _mesa_validate_pipeline_io(struct gl_pipeline_object *); + + #ifdef __cplusplus + } + #endif diff --git a/mozilla.sh.in b/mozilla.sh.in new file mode 100644 index 0000000000000000000000000000000000000000..416d0af70a6ed4f0b22cadfd6e25e6aee84d159e --- /dev/null +++ b/mozilla.sh.in @@ -0,0 +1,163 @@ +#!/bin/sh +# +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is mozilla.org Code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Wolfgang Rosenauer +# +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +## +## Usage: +## +## $ mozilla [args] +## +## This script is meant to run a mozilla program from the mozilla +## rpm installation. +## +## The script will setup all the environment voodoo needed to make +## mozilla work. + +cmdname=`basename $0` + +## +## Variables +## +MOZ_DIST_BIN="%PREFIX" +MOZ_DIST_LIB="%PROGDIR" +MOZ_APPNAME="%APPNAME" +MOZ_PROGRAM="$MOZ_DIST_LIB/$MOZ_APPNAME-bin" +MOZ_LANGPACKS_DIR="$MOZ_DIST_LIB/langpacks" +MOZ_EXTENSIONS_PROFILE_DIR="$HOME/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}" + +MOZ_APP_LAUNCHER="$MOZ_DIST_LIB/$MOZ_APPNAME.sh" +if [ "$0" = "$MOZ_APP_LAUNCHER" ]; then + [ -h "/usr/bin/$MOZ_APPNAME" ] && \ + _link=$(readlink -f "/usr/bin/$MOZ_APPNAME") + if [ "$_link" = "$MOZ_APP_LAUNCHER" ]; then + export MOZ_APP_LAUNCHER="/usr/bin/$MOZ_APPNAME" + fi +else + export MOZ_APP_LAUNCHER="/usr/bin/$MOZ_APPNAME" +fi + +MOZILLA_FIVE_HOME="$MOZ_DIST_LIB" +export MOZILLA_FIVE_HOME +LD_LIBRARY_PATH=$MOZ_DIST_LIB${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} +export LD_LIBRARY_PATH + +# needed for SUN Java under Xorg >= 7.2 +export LIBXCB_ALLOW_SLOPPY_LOCK=1 + +# disable Gnome crash dialog (doesn't make sense anyway) +export GNOME_DISABLE_CRASH_DIALOG=1 + +# Wayland +# Only supported on newer systems +WAYLAND_SUPPORTED=%WAYLAND_SUPPORTED + +# $XDG_SESSION_TYPE should contain either x11 or wayland +if [ $WAYLAND_SUPPORTED -eq 1 ] && [ "$XDG_SESSION_TYPE" = "wayland" ] && [ -z "$MOZ_ENABLE_WAYLAND" ]; then + export MOZ_ENABLE_WAYLAND=1 +fi + +## +## Use D-Bus remote exclusively when there's Wayland display. +## +if [ "$WAYLAND_DISPLAY" ]; then + export MOZ_DBUS_REMOTE=1 +fi + +source /etc/os-release + +## +## To disable the use of Firefox localization handling for +## the home profile, set MOZ_DISABLE_LANGPACKS=1 +## in your environment before launching Firefox. +## currently disabled by default since langpacks +## are shipped as app sideloading addons +## +# +MOZ_DISABLE_LANGPACKS=1 +export MOZ_DISABLE_LANGPACKS +# + + +# MOZ_DISABLE_LANGPACKS disables language packs completely +MOZILLA_DOWN=0 +if ! [ $MOZ_DISABLE_LANGPACKS ] || [ $MOZ_DISABLE_LANGPACKS -eq 0 ]; then + if [ -x $MOZ_PROGRAM ]; then + # Is firefox running? + /bin/pidof %APPNAME% > /dev/null 2>&1 + MOZILLA_DOWN=$? + fi +fi + + +moz_debug=0 +script_args="" +pass_arg_count=0 +while [ $# -gt $pass_arg_count ] +do + case "$1" in + -d | --debugger) + moz_debugger=$2; + if [ "${moz_debugger}" != "" ]; then + shift 2 + moz_debug=1 + else + echo "-d requires an argument" + exit 1 + fi + ;; + *) + # Move the unrecognized argument to the end of the list. + arg="$1" + shift + set -- "$@" "$arg" + pass_arg_count=`expr $pass_arg_count + 1` + ;; + esac +done + +if [ $moz_debug -eq 1 ]; then + tmpfile=`mktemp /tmp/mozargs.XXXXXX` || { echo "Cannot create temporary file" >&2; exit 1; } + trap " [ -f \"$tmpfile\" ] && /bin/rm -f -- \"$tmpfile\"" 0 1 2 3 13 15 + echo "set args ${1+"$@"}" > $tmpfile + echo "run" >> $tmpfile + echo "$moz_debugger $MOZ_PROGRAM -x $tmpfile" + exec $moz_debugger "$MOZ_PROGRAM" -x $tmpfile +else + exec $MOZ_PROGRAM "$@" +fi diff --git a/riscv.patch b/riscv.patch new file mode 100644 index 0000000000000000000000000000000000000000..d7c5518837877518957d0f756a07c2453ff2902b --- /dev/null +++ b/riscv.patch @@ -0,0 +1,51 @@ +Index: b/third_party/rust/authenticator/.cargo-checksum.json +=================================================================== +--- a/third_party/rust/authenticator/.cargo-checksum.json ++++ b/third_party/rust/authenticator/.cargo-checksum.json +@@ -1 +1 @@ +-{"files":{"Cargo.lock":"abaed4932db2206e5fdb7cb73a8c100f6c91fc84a8f33e8763677040ae8ea9bf","Cargo.toml":"9b56d5495021e7cd8ab7e019cceda45e906a2a3629a68e9019c6e5cb682dbc43","Cross.toml":"8d132da818d48492aa9f4b78a348f0df3adfae45d988d42ebd6be8a5adadb6c3","LICENSE":"e866c8f5864d4cacfe403820e722e9dc03fe3c7565efa5e4dad9051d827bb92a","README.md":"c87d9c7cc44f1dd4ef861a3a9f8cd2eb68aedd3814768871f5fb63c2070806cd","build.rs":"bc308b771ae9741d775370e3efe45e9cca166fd1d0335f4214b00497042ccc55","examples/main.rs":"d899646fa396776d0bb66efb86099ffb195566ecdb6fc4c1765ae3d54d696a8d","rustfmt.toml":"ceb6615363d6fff16426eb56f5727f98a7f7ed459ba9af735b1d8b672e2c3b9b","src/authenticatorservice.rs":"9fc5bcdd1e4f32e58ae920f96f40619a870b0a1b8d05db650803b2402a37fbf9","src/capi.rs":"1d3145ce81293bec697b0d385357fb1b0b495b0c356e2da5e6f15d028d328c70","src/consts.rs":"3dbcdfced6241822062e1aa2e6c8628af5f539ea18ee41edab51a3d33ebb77c6","src/errors.rs":"de89e57435ed1f9ff10f1f2d997a5b29d61cb215551e0ab40861a08ca52d1447","src/freebsd/device.rs":"595df4b3f66b90dd73f8df67e1a2ba9a20c0b5fd893afbadbec564aa34f89981","src/freebsd/mod.rs":"42dcb57fbeb00140003a8ad39acac9b547062b8f281a3fa5deb5f92a6169dde6","src/freebsd/monitor.rs":"c10b154632fbedc3dca27197f7fc890c3d50ac1744b927e9f1e44a9e8a13506e","src/freebsd/transaction.rs":"bfb92dcf2edeb5d620a019907fff1025eb36ef322055e78649a3055b074fa851","src/freebsd/uhid.rs":"84f564d337637c1cd107ccc536b8fce2230628e144e4031e8db4d7163c9c0cb3","src/hidproto.rs":"362fc8e24b94ba431aad5ee0002f5a3364badd937c706c0ae119a5a7a2abc7c2","src/lib.rs":"12f62285a3d33347f95236b71341462a76ea1ded67651fc96ba25d7bd1dd8298","src/linux/device.rs":"d27c5f877cf96b97668579ac5db0f2685f7c969e7a5d0ddc68043eb16bfcddb8","src/linux/hidraw.rs":"ed55caa40fd518d67bb67d5af08f9adcab34f89e0ca591142d45b87f172926dd","src/linux/hidwrapper.h":"72785db3a9b27ea72b6cf13a958fee032af54304522d002f56322473978a20f9","src/linux/hidwrapper.rs":"4be65676cf3220929700bf4906938dcbd1538ba53d40c60b08f9ba8890c910f6","src/linux/ioctl_aarch64le.rs":"2d8b265cd39a9f46816f83d5a5df0701c13eb842bc609325bad42ce50add3bf0","src/linux/ioctl_armle.rs":"2d8b265cd39a9f46816f83d5a5df0701c13eb842bc609325bad42ce50add3bf0","src/linux/ioctl_mips64le.rs":"fbda309934ad8bda689cd4fb5c0ca696fe26dedb493fe9d5a5322c3047d474fd","src/linux/ioctl_mipsbe.rs":"fbda309934ad8bda689cd4fb5c0ca696fe26dedb493fe9d5a5322c3047d474fd","src/linux/ioctl_mipsle.rs":"fbda309934ad8bda689cd4fb5c0ca696fe26dedb493fe9d5a5322c3047d474fd","src/linux/ioctl_powerpc64be.rs":"fbda309934ad8bda689cd4fb5c0ca696fe26dedb493fe9d5a5322c3047d474fd","src/linux/ioctl_powerpc64le.rs":"fbda309934ad8bda689cd4fb5c0ca696fe26dedb493fe9d5a5322c3047d474fd","src/linux/ioctl_powerpcbe.rs":"fbda309934ad8bda689cd4fb5c0ca696fe26dedb493fe9d5a5322c3047d474fd","src/linux/ioctl_s390xbe.rs":"2d8b265cd39a9f46816f83d5a5df0701c13eb842bc609325bad42ce50add3bf0","src/linux/ioctl_x86.rs":"2d8b265cd39a9f46816f83d5a5df0701c13eb842bc609325bad42ce50add3bf0","src/linux/ioctl_x86_64.rs":"2d8b265cd39a9f46816f83d5a5df0701c13eb842bc609325bad42ce50add3bf0","src/linux/mod.rs":"446e435126d2a58f167f648dd95cba28e8ac9c17f1f799e1eaeab80ea800fc57","src/linux/monitor.rs":"9ef4e22fdcf005dd5201b42595d958ea462998c75dbfc68c8a403e7be64328e4","src/linux/transaction.rs":"bfb92dcf2edeb5d620a019907fff1025eb36ef322055e78649a3055b074fa851","src/macos/device.rs":"cc97b773254a89526164987e4b8e4181910fc3decb32acf51ca86c596ad0147b","src/macos/iokit.rs":"7dc4e7bbf8e42e2fcde0cee8e48d14d6234a5a910bd5d3c4e966d8ba6b73992f","src/macos/mod.rs":"333e561554fc901d4f6092f6e4c85823e2b0c4ff31c9188d0e6d542b71a0a07c","src/macos/monitor.rs":"d059861b4739c9272fa305b6dd91ebeb08530bd0e70a013dd999565d6f06fb30","src/macos/transaction.rs":"935b4bc79b0e50a984604a1ada96a7ef723cc283b7d33ca07f3150b1752b99f7","src/manager.rs":"5a4cdc26b9fde20e1a3dc2389f15d38d9153109bfee5119c092fbfdbd19bad8d","src/netbsd/device.rs":"3a99a989a7a8411ddb9893c371644076662a3b488d40b436601c27fd92fdf159","src/netbsd/fd.rs":"260f1a8ae04896c0eb35ab0914e11ca9291e7317a086c94328aa219c0e1fc1d2","src/netbsd/mod.rs":"b1c52aa29537330cebe67427062d6c94871cab2a9b0c04b2305d686f07e88fd5","src/netbsd/monitor.rs":"dfd68e026c52271b68a3a9263837c793127e9d54ed19b748ef6d13ab4c44e09a","src/netbsd/transaction.rs":"9334a832a57e717a981c13c364ed4ee80ce9798460fc6c8954723d2fcf20585a","src/netbsd/uhid.rs":"154a4587767f151e3f846cc0b79f615d5137de67afed84f19176f27ac9097908","src/openbsd/device.rs":"ae1c8de90bb515a12d571372a30322fadb5122bc69ab71caf154452caa8a644f","src/openbsd/mod.rs":"514274d414042ff84b3667a41a736e78581e22fda87ccc97c2bc05617e381a30","src/openbsd/monitor.rs":"5eb071dd3719ea305eac21ec20596463f63790f8cd1f908a59e3f9cb0b71b5ad","src/openbsd/transaction.rs":"2380c9430f4c95a1fefaaab729d8ece0d149674708d705a71dd5d2513d9e1a4c","src/statecallback.rs":"6b16f97176db1ae3fc3851fe8394e4ffc324bc6fe59313845ac3a88132fd52f1","src/statemachine.rs":"27e2655411ebc1077c200f0aa2ba429ca656fc7dd6f90e08b51492b59ec72e61","src/stub/device.rs":"5e378147e113e20160a45d395b717bd3deecb327247c24b6735035f7d50861b7","src/stub/mod.rs":"6a7fec504a52d403b0241b18cd8b95088a31807571f4c0a67e4055afc74f4453","src/stub/transaction.rs":"4a2ccb2d72070a8bc61442254e063278c68212d5565ba5bfe4d47cacebf5bd1c","src/u2fhid-capi.h":"10f2658df774bb7f7f197a9f217b9e20d67b232b60a554e8ee3c3f71480ea1f6","src/u2fprotocol.rs":"72120773a948ffd667b5976c26ae27a4327769d97b0eef7a3b1e6b2b4bbb46a9","src/u2ftypes.rs":"a02d2c29790c5edfec9af320b1d4bcb93be0bbf02b881fa5aa403cfb687a25ae","src/util.rs":"d2042b2db4864f2b1192606c3251709361de7fb7521e1519190ef26a77de8e64","src/virtualdevices/mod.rs":"2c7df7691d5c150757304241351612aed4260d65b70ab0f483edbc1a5cfb5674","src/virtualdevices/software_u2f.rs":"1b86b94c6eadec6a22dffdd2b003c5324247c6412eeddb28a6094feb1c523f8e","src/virtualdevices/webdriver/mod.rs":"4a36e6dfa9f45f941d863b4039bfbcfa8eaca660bd6ed78aeb1a2962db64be5a","src/virtualdevices/webdriver/testtoken.rs":"7146e02f1a5dad2c8827dd11c12ee408c0e42a0706ac65f139998feffd42570f","src/virtualdevices/webdriver/virtualmanager.rs":"a55a28995c81b5affb0a74207b6dd556d272086a554676df2e675fe991d730a9","src/virtualdevices/webdriver/web_api.rs":"27206ee09c83fe25b34cad62174e42383defd8c8a5e917d30691412aacdae08f","src/windows/device.rs":"bc3f9587677c185a624c0aae7537baf9f780484ab8337929db994800b9064ba9","src/windows/mod.rs":"218e7f2fe91ecb390c12bba5a5ffdad2c1f0b22861c937f4d386262e5b3dd617","src/windows/monitor.rs":"3804dc67de46a1a6b7925c83e0df95d94ddfa1aa53a88fc845f4ff26aede57f8","src/windows/transaction.rs":"ee639f28b2dcdb7e00c922d8762fe6aa33def8c7aaeb46ec93e3a772407a9d86","src/windows/winapi.rs":"de92afb17df26216161138f18eb3b9162f3fb2cdeb74aa78173afe804ba02e00","testing/cross/powerpc64le-unknown-linux-gnu.Dockerfile":"d7463ff4376e3e0ca3fed879fab4aa975c4c0a3e7924c5b88aef9381a5d013de","testing/cross/x86_64-unknown-linux-gnu.Dockerfile":"11c79c04b07a171b0c9b63ef75fa75f33263ce76e3c1eda0879a3e723ebd0c24","testing/run_cross.sh":"cc2a7e0359f210eba2e7121f81eb8ab0125cea6e0d0f2698177b0fe2ad0c33d8","webdriver-tools/requirements.txt":"8236aa3dedad886f213c9b778fec80b037212d30e640b458984110211d546005","webdriver-tools/webdriver-driver.py":"82327c26ba271d1689acc87b612ab8436cb5475f0a3c0dba7baa06e7f6f5e19c"},"package":"08cee7a0952628fde958e149507c2bb321ab4fccfafd225da0b20adc956ef88a"} +\ No newline at end of file ++{"files":{"Cargo.lock":"abaed4932db2206e5fdb7cb73a8c100f6c91fc84a8f33e8763677040ae8ea9bf","Cargo.toml":"9b56d5495021e7cd8ab7e019cceda45e906a2a3629a68e9019c6e5cb682dbc43","Cross.toml":"8d132da818d48492aa9f4b78a348f0df3adfae45d988d42ebd6be8a5adadb6c3","LICENSE":"e866c8f5864d4cacfe403820e722e9dc03fe3c7565efa5e4dad9051d827bb92a","README.md":"c87d9c7cc44f1dd4ef861a3a9f8cd2eb68aedd3814768871f5fb63c2070806cd","build.rs":"bc308b771ae9741d775370e3efe45e9cca166fd1d0335f4214b00497042ccc55","examples/main.rs":"d899646fa396776d0bb66efb86099ffb195566ecdb6fc4c1765ae3d54d696a8d","rustfmt.toml":"ceb6615363d6fff16426eb56f5727f98a7f7ed459ba9af735b1d8b672e2c3b9b","src/authenticatorservice.rs":"9fc5bcdd1e4f32e58ae920f96f40619a870b0a1b8d05db650803b2402a37fbf9","src/capi.rs":"1d3145ce81293bec697b0d385357fb1b0b495b0c356e2da5e6f15d028d328c70","src/consts.rs":"3dbcdfced6241822062e1aa2e6c8628af5f539ea18ee41edab51a3d33ebb77c6","src/errors.rs":"de89e57435ed1f9ff10f1f2d997a5b29d61cb215551e0ab40861a08ca52d1447","src/freebsd/device.rs":"595df4b3f66b90dd73f8df67e1a2ba9a20c0b5fd893afbadbec564aa34f89981","src/freebsd/mod.rs":"42dcb57fbeb00140003a8ad39acac9b547062b8f281a3fa5deb5f92a6169dde6","src/freebsd/monitor.rs":"c10b154632fbedc3dca27197f7fc890c3d50ac1744b927e9f1e44a9e8a13506e","src/freebsd/transaction.rs":"bfb92dcf2edeb5d620a019907fff1025eb36ef322055e78649a3055b074fa851","src/freebsd/uhid.rs":"84f564d337637c1cd107ccc536b8fce2230628e144e4031e8db4d7163c9c0cb3","src/hidproto.rs":"362fc8e24b94ba431aad5ee0002f5a3364badd937c706c0ae119a5a7a2abc7c2","src/lib.rs":"12f62285a3d33347f95236b71341462a76ea1ded67651fc96ba25d7bd1dd8298","src/linux/device.rs":"d27c5f877cf96b97668579ac5db0f2685f7c969e7a5d0ddc68043eb16bfcddb8","src/linux/hidraw.rs":"ed55caa40fd518d67bb67d5af08f9adcab34f89e0ca591142d45b87f172926dd","src/linux/hidwrapper.h":"72785db3a9b27ea72b6cf13a958fee032af54304522d002f56322473978a20f9","src/linux/hidwrapper.rs":"65a84a9f803889baf01852eca6dbf5c0381c33c153b7194bd71da99197ba593b","src/linux/ioctl_aarch64le.rs":"2d8b265cd39a9f46816f83d5a5df0701c13eb842bc609325bad42ce50add3bf0","src/linux/ioctl_armle.rs":"2d8b265cd39a9f46816f83d5a5df0701c13eb842bc609325bad42ce50add3bf0","src/linux/ioctl_mips64le.rs":"fbda309934ad8bda689cd4fb5c0ca696fe26dedb493fe9d5a5322c3047d474fd","src/linux/ioctl_mipsbe.rs":"fbda309934ad8bda689cd4fb5c0ca696fe26dedb493fe9d5a5322c3047d474fd","src/linux/ioctl_mipsle.rs":"fbda309934ad8bda689cd4fb5c0ca696fe26dedb493fe9d5a5322c3047d474fd","src/linux/ioctl_powerpc64be.rs":"fbda309934ad8bda689cd4fb5c0ca696fe26dedb493fe9d5a5322c3047d474fd","src/linux/ioctl_powerpc64le.rs":"fbda309934ad8bda689cd4fb5c0ca696fe26dedb493fe9d5a5322c3047d474fd","src/linux/ioctl_powerpcbe.rs":"fbda309934ad8bda689cd4fb5c0ca696fe26dedb493fe9d5a5322c3047d474fd","src/linux/ioctl_s390xbe.rs":"2d8b265cd39a9f46816f83d5a5df0701c13eb842bc609325bad42ce50add3bf0","src/linux/ioctl_x86.rs":"2d8b265cd39a9f46816f83d5a5df0701c13eb842bc609325bad42ce50add3bf0","src/linux/ioctl_x86_64.rs":"2d8b265cd39a9f46816f83d5a5df0701c13eb842bc609325bad42ce50add3bf0","src/linux/mod.rs":"446e435126d2a58f167f648dd95cba28e8ac9c17f1f799e1eaeab80ea800fc57","src/linux/monitor.rs":"9ef4e22fdcf005dd5201b42595d958ea462998c75dbfc68c8a403e7be64328e4","src/linux/transaction.rs":"bfb92dcf2edeb5d620a019907fff1025eb36ef322055e78649a3055b074fa851","src/macos/device.rs":"cc97b773254a89526164987e4b8e4181910fc3decb32acf51ca86c596ad0147b","src/macos/iokit.rs":"7dc4e7bbf8e42e2fcde0cee8e48d14d6234a5a910bd5d3c4e966d8ba6b73992f","src/macos/mod.rs":"333e561554fc901d4f6092f6e4c85823e2b0c4ff31c9188d0e6d542b71a0a07c","src/macos/monitor.rs":"d059861b4739c9272fa305b6dd91ebeb08530bd0e70a013dd999565d6f06fb30","src/macos/transaction.rs":"935b4bc79b0e50a984604a1ada96a7ef723cc283b7d33ca07f3150b1752b99f7","src/manager.rs":"5a4cdc26b9fde20e1a3dc2389f15d38d9153109bfee5119c092fbfdbd19bad8d","src/netbsd/device.rs":"3a99a989a7a8411ddb9893c371644076662a3b488d40b436601c27fd92fdf159","src/netbsd/fd.rs":"260f1a8ae04896c0eb35ab0914e11ca9291e7317a086c94328aa219c0e1fc1d2","src/netbsd/mod.rs":"b1c52aa29537330cebe67427062d6c94871cab2a9b0c04b2305d686f07e88fd5","src/netbsd/monitor.rs":"dfd68e026c52271b68a3a9263837c793127e9d54ed19b748ef6d13ab4c44e09a","src/netbsd/transaction.rs":"9334a832a57e717a981c13c364ed4ee80ce9798460fc6c8954723d2fcf20585a","src/netbsd/uhid.rs":"154a4587767f151e3f846cc0b79f615d5137de67afed84f19176f27ac9097908","src/openbsd/device.rs":"ae1c8de90bb515a12d571372a30322fadb5122bc69ab71caf154452caa8a644f","src/openbsd/mod.rs":"514274d414042ff84b3667a41a736e78581e22fda87ccc97c2bc05617e381a30","src/openbsd/monitor.rs":"5eb071dd3719ea305eac21ec20596463f63790f8cd1f908a59e3f9cb0b71b5ad","src/openbsd/transaction.rs":"2380c9430f4c95a1fefaaab729d8ece0d149674708d705a71dd5d2513d9e1a4c","src/statecallback.rs":"6b16f97176db1ae3fc3851fe8394e4ffc324bc6fe59313845ac3a88132fd52f1","src/statemachine.rs":"27e2655411ebc1077c200f0aa2ba429ca656fc7dd6f90e08b51492b59ec72e61","src/stub/device.rs":"5e378147e113e20160a45d395b717bd3deecb327247c24b6735035f7d50861b7","src/stub/mod.rs":"6a7fec504a52d403b0241b18cd8b95088a31807571f4c0a67e4055afc74f4453","src/stub/transaction.rs":"4a2ccb2d72070a8bc61442254e063278c68212d5565ba5bfe4d47cacebf5bd1c","src/u2fhid-capi.h":"10f2658df774bb7f7f197a9f217b9e20d67b232b60a554e8ee3c3f71480ea1f6","src/u2fprotocol.rs":"72120773a948ffd667b5976c26ae27a4327769d97b0eef7a3b1e6b2b4bbb46a9","src/u2ftypes.rs":"a02d2c29790c5edfec9af320b1d4bcb93be0bbf02b881fa5aa403cfb687a25ae","src/util.rs":"d2042b2db4864f2b1192606c3251709361de7fb7521e1519190ef26a77de8e64","src/virtualdevices/mod.rs":"2c7df7691d5c150757304241351612aed4260d65b70ab0f483edbc1a5cfb5674","src/virtualdevices/software_u2f.rs":"1b86b94c6eadec6a22dffdd2b003c5324247c6412eeddb28a6094feb1c523f8e","src/virtualdevices/webdriver/mod.rs":"4a36e6dfa9f45f941d863b4039bfbcfa8eaca660bd6ed78aeb1a2962db64be5a","src/virtualdevices/webdriver/testtoken.rs":"7146e02f1a5dad2c8827dd11c12ee408c0e42a0706ac65f139998feffd42570f","src/virtualdevices/webdriver/virtualmanager.rs":"a55a28995c81b5affb0a74207b6dd556d272086a554676df2e675fe991d730a9","src/virtualdevices/webdriver/web_api.rs":"27206ee09c83fe25b34cad62174e42383defd8c8a5e917d30691412aacdae08f","src/windows/device.rs":"bc3f9587677c185a624c0aae7537baf9f780484ab8337929db994800b9064ba9","src/windows/mod.rs":"218e7f2fe91ecb390c12bba5a5ffdad2c1f0b22861c937f4d386262e5b3dd617","src/windows/monitor.rs":"3804dc67de46a1a6b7925c83e0df95d94ddfa1aa53a88fc845f4ff26aede57f8","src/windows/transaction.rs":"ee639f28b2dcdb7e00c922d8762fe6aa33def8c7aaeb46ec93e3a772407a9d86","src/windows/winapi.rs":"de92afb17df26216161138f18eb3b9162f3fb2cdeb74aa78173afe804ba02e00","testing/cross/powerpc64le-unknown-linux-gnu.Dockerfile":"d7463ff4376e3e0ca3fed879fab4aa975c4c0a3e7924c5b88aef9381a5d013de","testing/cross/x86_64-unknown-linux-gnu.Dockerfile":"11c79c04b07a171b0c9b63ef75fa75f33263ce76e3c1eda0879a3e723ebd0c24","testing/run_cross.sh":"cc2a7e0359f210eba2e7121f81eb8ab0125cea6e0d0f2698177b0fe2ad0c33d8","webdriver-tools/requirements.txt":"8236aa3dedad886f213c9b778fec80b037212d30e640b458984110211d546005","webdriver-tools/webdriver-driver.py":"82327c26ba271d1689acc87b612ab8436cb5475f0a3c0dba7baa06e7f6f5e19c"},"package":"08cee7a0952628fde958e149507c2bb321ab4fccfafd225da0b20adc956ef88a"} +Index: b/third_party/rust/authenticator/src/linux/hidwrapper.rs +=================================================================== +--- a/third_party/rust/authenticator/src/linux/hidwrapper.rs ++++ b/third_party/rust/authenticator/src/linux/hidwrapper.rs +@@ -46,3 +46,6 @@ include!("ioctl_aarch64be.rs"); + + #[cfg(all(target_arch = "s390x", target_endian = "big"))] + include!("ioctl_s390xbe.rs"); ++ ++#[cfg(target_arch = "riscv64")] ++include!("ioctl_riscv64.rs"); +Index: b/third_party/rust/authenticator/src/linux/ioctl_riscv64.rs +=================================================================== +--- a/dev/null ++++ b/third_party/rust/authenticator/src/linux/ioctl_riscv64.rs +@@ -0,0 +1,5 @@ ++/* automatically generated by rust-bindgen */ ++ ++pub type __u32 = ::std::os::raw::c_uint; ++pub const _HIDIOCGRDESCSIZE: __u32 = 2147764225; ++pub const _HIDIOCGRDESC: __u32 = 2416199682; +Index: b/third_party/rust/nix/.cargo-checksum.json +=================================================================== +--- a/third_party/rust/nix/.cargo-checksum.json ++++ b/third_party/rust/nix/.cargo-checksum.json +@@ -1 +1 @@ +-{"files":{"CHANGELOG.md":"91af9fd5f2d9cdb9c8bb750e24b625742e95a6c74bcff419f3de70eb26578281","CONTRIBUTING.md":"a9101e3d1487170d691d5f062ff49a433c167582ac8984dd41a744be92652f74","CONVENTIONS.md":"e150ce43c1d188c392c1a3bf7f2e08e3cf84906705c7bef43f319037d29ea385","Cargo.toml":"af0cc0ae7ff4bf6c2e5b35fe062f54fe2d619f70ba67795f4f43a981420b5de0","LICENSE":"66e3ee1fa7f909ad3c612d556f2a0cdabcd809ad6e66f3b0605015ac64841b70","README.md":"80d71b9eaac7bf7f0d307372592ed1467f994291e6fad816a44f3c70e2887d0f","build.rs":"14c9c678c33f5894509da47f77d6a326b14aecb4190ce87a24cce98687ca63b2","src/dir.rs":"21e330cbe6594274335b94d9e9b6059f1fa8e53d2e5b5c697058c52ec6b3c5ff","src/errno.rs":"a009ccf18b45c0a4c9319c65b0dc5bc322d9ad43cfe462ec4661559f44162451","src/errno_dragonfly.c":"a857e47b114acb85fddcb252a610ab5734d225c26b7bedd7c35d7789d46c8526","src/fcntl.rs":"6ae2f7f01dd2568b82a4e57f86e02b1d63eec6c26111c5adb2ca5d78a2a99fe7","src/features.rs":"22ff626ff8287a07dd55bcfc63c9f518c19c56144e15f9b6f9e3bbdcda51c2a8","src/ifaddrs.rs":"9a93de176edcca4613e668b8ccc2c3e3b6b711aa2d8d94ccb0ba08694d1ef35f","src/kmod.rs":"4d8a695d3d761f351a39d654303a1bd168e74295b7d142b918737e355b24f34d","src/lib.rs":"fdd8049a79ffb92384c72f0a6b0bab717001ddfa9b01f2b33413c83f424f2ac8","src/macros.rs":"aec27fa0fd98900913fada926c9a4581cd28f2640e3a7b5480707f923c9200f8","src/mount.rs":"cdf5db8409017483132db9d7493b5d6cc96df5560d0fa5ad8f385aff72db10ca","src/mqueue.rs":"82af42b31381af73e7966f845d1ed93957f0b9976bf2da524b178fad15b2b08d","src/net/if_.rs":"f7e02076fcf3cadf3fdf141884c9bd2c468a7047ba60bc490f0057df802b53ce","src/net/mod.rs":"577f70170e53d4a6de1abb70bf8f1031ec3e65c0e63ef5fcf05c907125e7ac17","src/poll.rs":"7305e250066cd1a7318cd239ed3db787937ee98426fe9289cf00fa874d76b6c7","src/pty.rs":"6b965b586579933af47d4efef4c82c391b927037eaa08d8c83fc974ef17fc7c8","src/sched.rs":"f9b214fa60006b5450ffb3589a55ec59c3694bd49597c65c38ac813fcd96c7dd","src/sys/aio.rs":"a1ba629258b3ce1268e5fe8e5b41dce3581f77d415dc5e2455c1f82f26dd3085","src/sys/epoll.rs":"f0b539e0645569657f2142db91a38c94ebe1925f44852d64c61c818758dbbf0b","src/sys/event.rs":"ef8bc02a08d9ce7924c87f8f891fa051587b195a36913712fe85237a2fe0685b","src/sys/eventfd.rs":"08008cf3dc64c2216847c02c0dd8d7189cf08edbaafe35ba2c57c053fde09ef4","src/sys/inotify.rs":"687c8417d737939aa93f805d6003afc4f84f50828b1bd9429ef5d00bef0e0955","src/sys/ioctl/bsd.rs":"56ca6ecf5f7cfb566f4f3ba589fcc778f747a517dd45e13780981922e6215344","src/sys/ioctl/linux.rs":"6cfbdff4dbfa1a3782acdedebe89ffa9f000fdfc4ab68cb46f52890ebc1c6f2d","src/sys/ioctl/mod.rs":"20bc3cf1fcbbc7c31e4d507baa4e576a793ea42fb33618d2e7afeda730c4324f","src/sys/memfd.rs":"11cd93c867fdbdbc9588cecb94268691de42b2ef2a38fe33525be7c7f60c85d5","src/sys/mman.rs":"f77d28611a7ff3bf62784a3c4f26d7d79969395b1d9bbc6ff15e734f52dc404f","src/sys/mod.rs":"f39a08c72e37638c7cecfb9c087e0a41e2b69409aa545b0ef7bbd59c0a063ee2","src/sys/pthread.rs":"cfa9ccd6f3b86c0c3fe012773c9c82a7813b298c2f20f8ab629781db627ce56b","src/sys/ptrace/bsd.rs":"8a7eacfc172b55763ae32109bf9b252669ba68b72cd5122f7504eb35c0c08345","src/sys/ptrace/linux.rs":"f09b45148004f4b28d8503c397a8d112d31046c98e68335bf4e89425d5b33f07","src/sys/ptrace/mod.rs":"671a6ccac955e75d5998f7e53ffc45ed4c7b6522a0f24a0937d60141f692dd39","src/sys/quota.rs":"7eb8e797466b506f6ed882f18eda92c4639cf43d9384a19bc39cd1bf982989c9","src/sys/reboot.rs":"fde9da27c2928f7026231430fa14fec2058df4e49a0aeda2a237a60524f11241","src/sys/select.rs":"57d6c4403d1bf788bd52ab6f03cfc16a189d31b6bfb338b135cb775fe369121f","src/sys/sendfile.rs":"ea386e83baf9b5b23488aca26635aacdc92f2bfe238e4399a7380bd0331e0ef7","src/sys/signal.rs":"9216cdd609b4dfb9c2e559c411be6b7c722f7ddd8024682c0895a32126b488aa","src/sys/signalfd.rs":"bfcfce619bf199e50f9cc80a3eb778d48474a015cfdafc64a0c3517373a225a9","src/sys/socket/addr.rs":"8b297ce13cd8ad200b3e764888c26ceb582ee505385d1e172440de94ade99644","src/sys/socket/mod.rs":"e0353f04f3d098a8bf5e2aae431645897b96e0889fb76537dc0330159c6f233d","src/sys/socket/sockopt.rs":"c663505d6a7a7ae9d76e03fbc17e53d308ea6b1eae92212812e1d76b2bf2916f","src/sys/stat.rs":"c4807048f86be67026756737cf81f448ec23c2a4745776cb40f40b533a88e0c8","src/sys/statfs.rs":"d2b72069f20aa7782ce5de4ec2d00c76a82a92376c2066bbb270cdac2167719e","src/sys/statvfs.rs":"2d328cf525ba04ab1e1351128624a7df7d0c55ea91fda6c8d620d13710d61606","src/sys/sysinfo.rs":"0c05244655aa9e6dff5138392c5c1ae97630d35bae0e5510d7f51a75c31fd425","src/sys/termios.rs":"a2e99afdfc3526641a2cb82b57bfd0a25a362fb9be5ad37ff9f11acaeb0b9439","src/sys/time.rs":"8a1224b9262026086af698630aedbed21b45d661fbd045fc6c6af41a16a23374","src/sys/uio.rs":"60a974275ff8c485ea183bdd6f7e25894e6f2360a5bfb25442391a825a3b9b8c","src/sys/utsname.rs":"c977a1aec6e051c72b27506395e942abab9cbd9523e6d345ea66dc10875ee87d","src/sys/wait.rs":"30b14a8f518d031805cae6c6ff644116f162d8c8a75fddcfce4479d8d55fd1c0","src/ucontext.rs":"075560ec08a362881534211f8c6b78844886d6b767c2f7067174600e38ed3f63","src/unistd.rs":"82308ec31b6293b55f86fafd04e976a41127fedebb8f158abd1399c7399af947","test/sys/mod.rs":"e0821cbc289ad952f17229609c7de4282cca1e44cd13e1a7494a6378ecbc12f8","test/sys/test_aio.rs":"b2544bfb321ca7fbed276ee637c769fb438156d14666cdc1e1d547b3514a44e3","test/sys/test_aio_drop.rs":"30dd1d238269d00381fa50f6d3cb2b13794b7cceb9f6455f3878fcbffa9aa62d","test/sys/test_epoll.rs":"35093d0cb1096a934dfc4f6efc737eadc4bdc2e2134d2a879061374a51b10c97","test/sys/test_inotify.rs":"a4f804bcf414b6635d9863c8534769a609009c451c3476cc839cdc30c439b3b1","test/sys/test_ioctl.rs":"eea690ed386da0a666df5eb23a417421fddb99dc8e39556f63b30969bb6cf779","test/sys/test_lio_listio_resubmit.rs":"203a583313542593148f375b087ae30620222a745680173fa98fc448d1e5ae7f","test/sys/test_pthread.rs":"3890e5ecbf2082e0d05d102cc9cec6e76ede3c15f250d104e3483b1c1c3400b1","test/sys/test_ptrace.rs":"4e8d5dff5fe6bc56e4ae53bdfd10f5e8ea567d8099576d1c690cf7a6b2bc955f","test/sys/test_select.rs":"bdb20211fc6ec1e3f186337eac51e08757acb6901d307d67c71bf9011f0d54bd","test/sys/test_signal.rs":"84ae63c2baa49eebeabe5bbd347b9c5417e14ba97f342719d753dc1c1c768d60","test/sys/test_signalfd.rs":"71b5d6d782283f6db64ca90f7fb06617faec71091d59d2587e41bbc9d8c43d5c","test/sys/test_socket.rs":"09a7ef0322e07b4579893e0307a7c4f81fbbc653d005b827a519c33a33e185ce","test/sys/test_sockopt.rs":"b3d386c8279f86bf9439c772317bafcdba5630fa806c8319e87ddac0ccfa3a03","test/sys/test_sysinfo.rs":"1e1bea9130fe38ccb07cd0ad7334c7be1e45efc33f7656a5973f8cad7126f225","test/sys/test_termios.rs":"fa4be3ade859b527bf33408f85a6f57b127917cf5f2afb662d09f6019d07913a","test/sys/test_uio.rs":"9da234e3bd5003fd200cc37c4a5be147ecda1a7670feb1d505f23d646d3e1c57","test/sys/test_wait.rs":"e6c5147e213daa93892cd828f53214995d2e019ff2372cc48d85ce9b93d26ec9","test/test.rs":"e6307f82a39426a949b8e925a2df4a62e31c0e43081d7a33d23759bdfeeece1f","test/test_dir.rs":"5d137a62f11d1a4993b4bb35dccc38a4c4416b7da374887f2335a9895b4fdee4","test/test_fcntl.rs":"730e64e99dc867ba5af7cc4ca83a4489c8b96b1a52f8937bcc666d673af27002","test/test_kmod/hello_mod/Makefile":"0219f7bce0603f97d997fb377ca071966c90333ecc665e78a54dfeb97a9c811b","test/test_kmod/hello_mod/hello.c":"bcac6b19c5bd807e1f3878c15e426acc85785a8ade9840c3bb4d068635c9188c","test/test_kmod/mod.rs":"f4754f028402a8ba788c87686288424cd3784e77c7eb5d96682ef491b1dd5262","test/test_mount.rs":"78ddc657f5098360c764fffa3a7d844503e4b6b65b44bfd42d9aa9045b415cb6","test/test_mq.rs":"5806f8825e91edc79dd0e2bc81d8be3ba094c2de6c0b2ac0268221ae2ad22701","test/test_net.rs":"ec6d580b87292519d514b0236bdd5abdd576fcf4835cfe49ed1ddb47c5f1aea3","test/test_nix_path.rs":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","test/test_poll.rs":"46c71ee988fe1b85561ea0530d099750be8c1b8f95ab6e845c8a9f46f16f060c","test/test_pty.rs":"be04f99904fa47b60400c2bd156a388b73df4b9aec2eebf13df7dcdfc9aacf45","test/test_ptymaster_drop.rs":"5cfbbb79551c205ab510c2d4ef497bf937ceac9151fbe2f2e543d6515e406990","test/test_sendfile.rs":"e0cbabbd34052ccaa03d6555d5631686aa076728f6378ee90f7ecec68f891144","test/test_stat.rs":"1dc420d3119bf4d863a7ae0ba63efa7f1416f6e46e4100ea161003fe1c3f66ba","test/test_unistd.rs":"0325c998acca1e826e9e2b3d351d55ab9723a6cb2ca2072245978e7f5a9acee8"},"package":"3b2e0b4f3320ed72aaedb9a5ac838690a8047c7b275da22711fddff4f8a14229"} +\ No newline at end of file ++{"files":{"CHANGELOG.md":"91af9fd5f2d9cdb9c8bb750e24b625742e95a6c74bcff419f3de70eb26578281","CONTRIBUTING.md":"a9101e3d1487170d691d5f062ff49a433c167582ac8984dd41a744be92652f74","CONVENTIONS.md":"e150ce43c1d188c392c1a3bf7f2e08e3cf84906705c7bef43f319037d29ea385","Cargo.toml":"af0cc0ae7ff4bf6c2e5b35fe062f54fe2d619f70ba67795f4f43a981420b5de0","LICENSE":"66e3ee1fa7f909ad3c612d556f2a0cdabcd809ad6e66f3b0605015ac64841b70","README.md":"80d71b9eaac7bf7f0d307372592ed1467f994291e6fad816a44f3c70e2887d0f","build.rs":"14c9c678c33f5894509da47f77d6a326b14aecb4190ce87a24cce98687ca63b2","src/dir.rs":"21e330cbe6594274335b94d9e9b6059f1fa8e53d2e5b5c697058c52ec6b3c5ff","src/errno.rs":"a009ccf18b45c0a4c9319c65b0dc5bc322d9ad43cfe462ec4661559f44162451","src/errno_dragonfly.c":"a857e47b114acb85fddcb252a610ab5734d225c26b7bedd7c35d7789d46c8526","src/fcntl.rs":"6ae2f7f01dd2568b82a4e57f86e02b1d63eec6c26111c5adb2ca5d78a2a99fe7","src/features.rs":"22ff626ff8287a07dd55bcfc63c9f518c19c56144e15f9b6f9e3bbdcda51c2a8","src/ifaddrs.rs":"9a93de176edcca4613e668b8ccc2c3e3b6b711aa2d8d94ccb0ba08694d1ef35f","src/kmod.rs":"4d8a695d3d761f351a39d654303a1bd168e74295b7d142b918737e355b24f34d","src/lib.rs":"fdd8049a79ffb92384c72f0a6b0bab717001ddfa9b01f2b33413c83f424f2ac8","src/macros.rs":"aec27fa0fd98900913fada926c9a4581cd28f2640e3a7b5480707f923c9200f8","src/mount.rs":"cdf5db8409017483132db9d7493b5d6cc96df5560d0fa5ad8f385aff72db10ca","src/mqueue.rs":"82af42b31381af73e7966f845d1ed93957f0b9976bf2da524b178fad15b2b08d","src/net/if_.rs":"f7e02076fcf3cadf3fdf141884c9bd2c468a7047ba60bc490f0057df802b53ce","src/net/mod.rs":"577f70170e53d4a6de1abb70bf8f1031ec3e65c0e63ef5fcf05c907125e7ac17","src/poll.rs":"7305e250066cd1a7318cd239ed3db787937ee98426fe9289cf00fa874d76b6c7","src/pty.rs":"6b965b586579933af47d4efef4c82c391b927037eaa08d8c83fc974ef17fc7c8","src/sched.rs":"f9b214fa60006b5450ffb3589a55ec59c3694bd49597c65c38ac813fcd96c7dd","src/sys/aio.rs":"a1ba629258b3ce1268e5fe8e5b41dce3581f77d415dc5e2455c1f82f26dd3085","src/sys/epoll.rs":"f0b539e0645569657f2142db91a38c94ebe1925f44852d64c61c818758dbbf0b","src/sys/event.rs":"ef8bc02a08d9ce7924c87f8f891fa051587b195a36913712fe85237a2fe0685b","src/sys/eventfd.rs":"08008cf3dc64c2216847c02c0dd8d7189cf08edbaafe35ba2c57c053fde09ef4","src/sys/inotify.rs":"687c8417d737939aa93f805d6003afc4f84f50828b1bd9429ef5d00bef0e0955","src/sys/ioctl/bsd.rs":"56ca6ecf5f7cfb566f4f3ba589fcc778f747a517dd45e13780981922e6215344","src/sys/ioctl/linux.rs":"642b25d3997518815dea454fa976e9067ad5fe4ed75622e7540e3f0d0c7d320a","src/sys/ioctl/mod.rs":"20bc3cf1fcbbc7c31e4d507baa4e576a793ea42fb33618d2e7afeda730c4324f","src/sys/memfd.rs":"11cd93c867fdbdbc9588cecb94268691de42b2ef2a38fe33525be7c7f60c85d5","src/sys/mman.rs":"f77d28611a7ff3bf62784a3c4f26d7d79969395b1d9bbc6ff15e734f52dc404f","src/sys/mod.rs":"f39a08c72e37638c7cecfb9c087e0a41e2b69409aa545b0ef7bbd59c0a063ee2","src/sys/pthread.rs":"cfa9ccd6f3b86c0c3fe012773c9c82a7813b298c2f20f8ab629781db627ce56b","src/sys/ptrace/bsd.rs":"8a7eacfc172b55763ae32109bf9b252669ba68b72cd5122f7504eb35c0c08345","src/sys/ptrace/linux.rs":"f09b45148004f4b28d8503c397a8d112d31046c98e68335bf4e89425d5b33f07","src/sys/ptrace/mod.rs":"671a6ccac955e75d5998f7e53ffc45ed4c7b6522a0f24a0937d60141f692dd39","src/sys/quota.rs":"7eb8e797466b506f6ed882f18eda92c4639cf43d9384a19bc39cd1bf982989c9","src/sys/reboot.rs":"fde9da27c2928f7026231430fa14fec2058df4e49a0aeda2a237a60524f11241","src/sys/select.rs":"57d6c4403d1bf788bd52ab6f03cfc16a189d31b6bfb338b135cb775fe369121f","src/sys/sendfile.rs":"ea386e83baf9b5b23488aca26635aacdc92f2bfe238e4399a7380bd0331e0ef7","src/sys/signal.rs":"9216cdd609b4dfb9c2e559c411be6b7c722f7ddd8024682c0895a32126b488aa","src/sys/signalfd.rs":"bfcfce619bf199e50f9cc80a3eb778d48474a015cfdafc64a0c3517373a225a9","src/sys/socket/addr.rs":"8b297ce13cd8ad200b3e764888c26ceb582ee505385d1e172440de94ade99644","src/sys/socket/mod.rs":"e0353f04f3d098a8bf5e2aae431645897b96e0889fb76537dc0330159c6f233d","src/sys/socket/sockopt.rs":"c663505d6a7a7ae9d76e03fbc17e53d308ea6b1eae92212812e1d76b2bf2916f","src/sys/stat.rs":"c4807048f86be67026756737cf81f448ec23c2a4745776cb40f40b533a88e0c8","src/sys/statfs.rs":"d2b72069f20aa7782ce5de4ec2d00c76a82a92376c2066bbb270cdac2167719e","src/sys/statvfs.rs":"2d328cf525ba04ab1e1351128624a7df7d0c55ea91fda6c8d620d13710d61606","src/sys/sysinfo.rs":"0c05244655aa9e6dff5138392c5c1ae97630d35bae0e5510d7f51a75c31fd425","src/sys/termios.rs":"a2e99afdfc3526641a2cb82b57bfd0a25a362fb9be5ad37ff9f11acaeb0b9439","src/sys/time.rs":"8a1224b9262026086af698630aedbed21b45d661fbd045fc6c6af41a16a23374","src/sys/uio.rs":"60a974275ff8c485ea183bdd6f7e25894e6f2360a5bfb25442391a825a3b9b8c","src/sys/utsname.rs":"c977a1aec6e051c72b27506395e942abab9cbd9523e6d345ea66dc10875ee87d","src/sys/wait.rs":"30b14a8f518d031805cae6c6ff644116f162d8c8a75fddcfce4479d8d55fd1c0","src/ucontext.rs":"075560ec08a362881534211f8c6b78844886d6b767c2f7067174600e38ed3f63","src/unistd.rs":"82308ec31b6293b55f86fafd04e976a41127fedebb8f158abd1399c7399af947","test/sys/mod.rs":"e0821cbc289ad952f17229609c7de4282cca1e44cd13e1a7494a6378ecbc12f8","test/sys/test_aio.rs":"b2544bfb321ca7fbed276ee637c769fb438156d14666cdc1e1d547b3514a44e3","test/sys/test_aio_drop.rs":"30dd1d238269d00381fa50f6d3cb2b13794b7cceb9f6455f3878fcbffa9aa62d","test/sys/test_epoll.rs":"35093d0cb1096a934dfc4f6efc737eadc4bdc2e2134d2a879061374a51b10c97","test/sys/test_inotify.rs":"a4f804bcf414b6635d9863c8534769a609009c451c3476cc839cdc30c439b3b1","test/sys/test_ioctl.rs":"eea690ed386da0a666df5eb23a417421fddb99dc8e39556f63b30969bb6cf779","test/sys/test_lio_listio_resubmit.rs":"203a583313542593148f375b087ae30620222a745680173fa98fc448d1e5ae7f","test/sys/test_pthread.rs":"3890e5ecbf2082e0d05d102cc9cec6e76ede3c15f250d104e3483b1c1c3400b1","test/sys/test_ptrace.rs":"4e8d5dff5fe6bc56e4ae53bdfd10f5e8ea567d8099576d1c690cf7a6b2bc955f","test/sys/test_select.rs":"bdb20211fc6ec1e3f186337eac51e08757acb6901d307d67c71bf9011f0d54bd","test/sys/test_signal.rs":"84ae63c2baa49eebeabe5bbd347b9c5417e14ba97f342719d753dc1c1c768d60","test/sys/test_signalfd.rs":"71b5d6d782283f6db64ca90f7fb06617faec71091d59d2587e41bbc9d8c43d5c","test/sys/test_socket.rs":"09a7ef0322e07b4579893e0307a7c4f81fbbc653d005b827a519c33a33e185ce","test/sys/test_sockopt.rs":"b3d386c8279f86bf9439c772317bafcdba5630fa806c8319e87ddac0ccfa3a03","test/sys/test_sysinfo.rs":"1e1bea9130fe38ccb07cd0ad7334c7be1e45efc33f7656a5973f8cad7126f225","test/sys/test_termios.rs":"fa4be3ade859b527bf33408f85a6f57b127917cf5f2afb662d09f6019d07913a","test/sys/test_uio.rs":"9da234e3bd5003fd200cc37c4a5be147ecda1a7670feb1d505f23d646d3e1c57","test/sys/test_wait.rs":"e6c5147e213daa93892cd828f53214995d2e019ff2372cc48d85ce9b93d26ec9","test/test.rs":"e6307f82a39426a949b8e925a2df4a62e31c0e43081d7a33d23759bdfeeece1f","test/test_dir.rs":"5d137a62f11d1a4993b4bb35dccc38a4c4416b7da374887f2335a9895b4fdee4","test/test_fcntl.rs":"730e64e99dc867ba5af7cc4ca83a4489c8b96b1a52f8937bcc666d673af27002","test/test_kmod/hello_mod/Makefile":"0219f7bce0603f97d997fb377ca071966c90333ecc665e78a54dfeb97a9c811b","test/test_kmod/hello_mod/hello.c":"bcac6b19c5bd807e1f3878c15e426acc85785a8ade9840c3bb4d068635c9188c","test/test_kmod/mod.rs":"f4754f028402a8ba788c87686288424cd3784e77c7eb5d96682ef491b1dd5262","test/test_mount.rs":"78ddc657f5098360c764fffa3a7d844503e4b6b65b44bfd42d9aa9045b415cb6","test/test_mq.rs":"5806f8825e91edc79dd0e2bc81d8be3ba094c2de6c0b2ac0268221ae2ad22701","test/test_net.rs":"ec6d580b87292519d514b0236bdd5abdd576fcf4835cfe49ed1ddb47c5f1aea3","test/test_nix_path.rs":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","test/test_poll.rs":"46c71ee988fe1b85561ea0530d099750be8c1b8f95ab6e845c8a9f46f16f060c","test/test_pty.rs":"be04f99904fa47b60400c2bd156a388b73df4b9aec2eebf13df7dcdfc9aacf45","test/test_ptymaster_drop.rs":"5cfbbb79551c205ab510c2d4ef497bf937ceac9151fbe2f2e543d6515e406990","test/test_sendfile.rs":"e0cbabbd34052ccaa03d6555d5631686aa076728f6378ee90f7ecec68f891144","test/test_stat.rs":"1dc420d3119bf4d863a7ae0ba63efa7f1416f6e46e4100ea161003fe1c3f66ba","test/test_unistd.rs":"0325c998acca1e826e9e2b3d351d55ab9723a6cb2ca2072245978e7f5a9acee8"},"package":"3b2e0b4f3320ed72aaedb9a5ac838690a8047c7b275da22711fddff4f8a14229"} +Index: b/third_party/rust/nix/src/sys/ioctl/linux.rs +=================================================================== +--- a/third_party/rust/nix/src/sys/ioctl/linux.rs ++++ b/third_party/rust/nix/src/sys/ioctl/linux.rs +@@ -33,7 +33,8 @@ mod consts { + target_arch = "arm", + target_arch = "s390x", + target_arch = "x86_64", +- target_arch = "aarch64"))] ++ target_arch = "aarch64", ++ target_arch = "riscv64"))] + mod consts { + #[doc(hidden)] + pub const NONE: u8 = 0; diff --git a/rust-opt-level.patch b/rust-opt-level.patch new file mode 100644 index 0000000000000000000000000000000000000000..92008c0ff1317887bd58500362c57446a1511063 --- /dev/null +++ b/rust-opt-level.patch @@ -0,0 +1,23 @@ +diff --git a/Cargo.toml b/Cargo.toml +index 2d3e6f954f..efea3dfb84 100644 +--- a/Cargo.toml ++++ b/Cargo.toml +@@ -78,6 +78,18 @@ opt-level = 2 + [profile.release.package.glsl] + opt-level = 2 + ++[profile.dev.package.neqo-transport] ++opt-level = 1 ++ ++[profile.release.package.neqo-transport] ++opt-level = 1 ++ ++[profile.dev.package.gkrust] ++opt-level = 1 ++ ++[profile.release.package.gkrust] ++opt-level = 1 ++ + [patch.crates-io] + # The build system doesn't want those to be used, but they are pulled anyways (because + # dependencies can't be disabled based on features), but remain unused. We ensure they diff --git a/spellcheck.js b/spellcheck.js new file mode 100644 index 0000000000000000000000000000000000000000..9adfb8f76bb899c114672e657774e89a7e685440 --- /dev/null +++ b/spellcheck.js @@ -0,0 +1 @@ +pref("spellchecker.dictionary_path", "/usr/share/myspell"); diff --git a/thunderbird-97.0.tar.zst b/thunderbird-97.0.tar.zst new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/thunderbird-97.0.tar.zst00 b/thunderbird-97.0.tar.zst00 new file mode 100644 index 0000000000000000000000000000000000000000..116e940768d283863edb63b10dc3c68599919bc9 Binary files /dev/null and b/thunderbird-97.0.tar.zst00 differ diff --git a/thunderbird-97.0.tar.zst01 b/thunderbird-97.0.tar.zst01 new file mode 100644 index 0000000000000000000000000000000000000000..738d096ea436048a44c47773ff3d7f325d731ba5 Binary files /dev/null and b/thunderbird-97.0.tar.zst01 differ diff --git a/thunderbird-97.0.tar.zst02 b/thunderbird-97.0.tar.zst02 new file mode 100644 index 0000000000000000000000000000000000000000..c28b583519cf47bc2af0782ade223f9ac2fd12da Binary files /dev/null and b/thunderbird-97.0.tar.zst02 differ diff --git a/thunderbird-97.0.tar.zst03 b/thunderbird-97.0.tar.zst03 new file mode 100644 index 0000000000000000000000000000000000000000..544a52c64055c39cddcd13076edc10ee78da7d70 Binary files /dev/null and b/thunderbird-97.0.tar.zst03 differ diff --git a/thunderbird-mozconfig b/thunderbird-mozconfig new file mode 100644 index 0000000000000000000000000000000000000000..3a4c8f257f8fe169b8dca0c9befd94669e7bb8a0 --- /dev/null +++ b/thunderbird-mozconfig @@ -0,0 +1,45 @@ +export MOZ_TELEMETRY_REPORTING=1 +export MACH_USE_SYSTEM_PYTHON=1 +export MOZ_NOSPAM=1 +export MOZ_ENABLE_FULL_SYMBOLS=1 +export LIBGL_ALWAYS_SOFTWARE=1 +export BUILD_OFFICIAL=1 +export MOZILLA_OFFICIAL=1 +export RUSTC_OPT_LEVEL=3 + +mk_add_options MOZILLA_OFFICIAL=1 +mk_add_options BUILD_OFFICIAL=1 + +ac_add_options --enable-official-branding +ac_add_options --enable-chrome-format=omni +ac_add_options --disable-bootstrap +ac_add_options --enable-release +ac_add_options --disable-updater +ac_add_options --enable-update-channel=release +ac_add_options --without-wasm-sandboxed-libraries +ac_add_options --with-unsigned-addon-scopes=app,system +ac_add_options --enable-application=comm/mail +ac_add_options --allow-addon-sideload + +ac_add_options --enable-optimize="-Ofast -fno-fast-math" +ac_add_options --disable-debug-symbols +ac_add_options --enable-linker=bfd +ac_add_options --disable-install-strip +ac_add_options --disable-jit +ac_add_options --enable-hardening +ac_add_options --disable-tests +ac_add_options --enable-rust-simd + +ac_add_options --with-system-nspr +ac_add_options --with-system-nss +ac_add_options --with-system-zlib +ac_add_options --with-system-jpeg +ac_add_options --enable-system-ffi +ac_add_options --enable-jack +ac_add_options --enable-av1 +ac_add_options --enable-pulseaudio +ac_add_options --enable-alsa +ac_add_options --enable-libproxy +ac_add_options --disable-necko-wifi + + diff --git a/thunderbird-rpmlintrc b/thunderbird-rpmlintrc new file mode 100644 index 0000000000000000000000000000000000000000..b6f4339657e29607ce270d346d3d29b8d6702ce0 --- /dev/null +++ b/thunderbird-rpmlintrc @@ -0,0 +1 @@ +addFilter("no-jar-manifest") diff --git a/thunderbird.appdata.xml b/thunderbird.appdata.xml new file mode 100644 index 0000000000000000000000000000000000000000..7a84aed1758cebc5f22fe8d706fc667d15e7a122 --- /dev/null +++ b/thunderbird.appdata.xml @@ -0,0 +1,22 @@ + + + + + thunderbird.desktop + CC0-1.0 + +

+ Thunderbird is a free, open-source, cross-platform application for + managing email, news feeds, chat, and news groups. It is a local + (rather than browser- or web-based) email application that is powerful + yet easy to use. +

+
+ https://www.thunderbird.net/ + + https://upload.wikimedia.org/wikipedia/commons/9/9d/Mozilla_Thunderbird_GNOME.png + +
diff --git a/thunderbird.desktop b/thunderbird.desktop new file mode 100644 index 0000000000000000000000000000000000000000..7f37f9774a8f59307b71d225bb675c3d26e8b820 --- /dev/null +++ b/thunderbird.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Thunderbird +GenericName=Mail/News Client +Comment=Mail/News Client +TryExec=thunderbird +Exec=thunderbird %u +Icon=thunderbird +Terminal=false +Type=Application +StartupNotify=true +MimeType=x-scheme-handler/mailto; diff --git a/thunderbird.js b/thunderbird.js new file mode 100644 index 0000000000000000000000000000000000000000..8638469dcf3c1141cd1893865b7afe1f5564f2d4 --- /dev/null +++ b/thunderbird.js @@ -0,0 +1,19 @@ +pref("general.useragent.vendorSub", "RPM_VERSION"); +pref("font.default", "sans-serif"); +pref("font.default.x-western", "sans-serif"); +pref("font.name.monospace.x-western", "monospace"); +pref("font.name.monospace.x-unicode", "monospace"); +pref("network.negotiate-auth.gsslib", "GSSAPI"); +pref("print.print_edge_top", 14); // 1/100 of an inch +pref("print.print_edge_left", 16); // 1/100 of an inch +pref("print.print_edge_right", 16); // 1/100 of an inch +pref("print.print_edge_bottom", 14); // 1/100 of an inch +pref("intl.locale.requested", ""); +pref("intl.multilingual.enabled", true); + +// do not disable system-global or app-global extensions +pref("extensions.autoDisableScopes", 3); +pref("extensions.shownSelectionUI", true); + +// spellcheck +pref("spellchecker.dictionary_path", "/usr/share/myspell"); diff --git a/thunderbird.spec b/thunderbird.spec new file mode 100644 index 0000000000000000000000000000000000000000..cc1ffb83b95a8a3d83005ac9d27907553bb9be40 --- /dev/null +++ b/thunderbird.spec @@ -0,0 +1,369 @@ +%global RELEASE_REPO "https://hg.mozilla.org/releases/comm-esr91" +%global RELEASE_TAG "8b44d29de6525d6379f163f50c1a900d4540ef1b" +%global RELEASE_TIMESTAMP "20220502180952" +%global __provides_exclude ^lib.*\\.so.*$ +%global __requires_exclude ^(libmoz.*|liblgpllibs.*|libxul.*|libldap.*|libldif.*|libprldap.*|librnp.*)$ +%global mainver 97.0b3 +%global jobs %{?_smp_mflags} + +%global clang_build 1 +%global crashreporter 0 +%global with_pipewire0_3 0 +%global wayland_supported 1 +%global valgrind 0 +%global lto 0 + +# Firefox only supports i686 +%ifarch %ix86 +ExclusiveArch: i586 i686 +BuildArch: i686 +%{expand:%%global optflags %(echo "%optflags"|sed -e s/i586/i686/) -march=i686 -mtune=generic} +%endif + +Name: thunderbird +Version: 97.0 +Release: 1 +Summary: An integrated email, news feeds, chat, and newsgroups client +License: MPL-2.0 +URL: https://www.thunderbird.net/ +Source: %{name}-%{version}.tar.zst +Source1: %{name}.desktop +Source2: %{name}-rpmlintrc +Source3: mozilla.sh.in +Source4: %{name}-mozconfig +Source5: spellcheck.js +Source6: %{name}.js +Source7: %{name}.appdata.xml +Source8: %{name}-%{version}.tar.zst00 +Source9: %{name}-%{version}.tar.zst01 +Source10: %{name}-%{version}.tar.zst02 +Source11: %{name}-%{version}.tar.zst03 + +BuildRequires: git +BuildRequires: psutils +BuildRequires: gcc-c++ +BuildRequires: llvm +BuildRequires: clang-devel >= 12 +BuildRequires: rust >= 1.57 +BuildRequires: cargo >= 1.57 +BuildRequires: rustfmt +BuildRequires: rust-cbindgen +BuildRequires: spirv-headers-devel +BuildRequires: nodejs >= 10.22.1 +BuildRequires: python3 >= 3.5 +BuildRequires: python3-devel +BuildRequires: python3-libxml2 +BuildRequires: autoconf +BuildRequires: fdupes +BuildRequires: desktop-file-utils +BuildRequires: yasm +BuildRequires: unzip +BuildRequires: zstd +BuildRequires: nspr-devel >= 4.32 +BuildRequires: nss-devel >= 3.74 +BuildRequires: nasm >= 2.14 +BuildRequires: pkgconfig(gconf-2.0) >= 1.2.1 +BuildRequires: zip +BuildRequires: mesa-dri-drivers +BuildRequires: mesa-libEGL-devel +BuildRequires: mesa-libGL-devel +BuildRequires: pkgconfig(glesv1_cm) +BuildRequires: pkgconfig(glesv2) +BuildRequires: mesa-libglapi +BuildRequires: mesa-libOSMesa-devel +BuildRequires: mesa-libgbm-devel +BuildRequires: xorg-x11-drivers +BuildRequires: xorg-x11-proto-devel +BuildRequires: libXcomposite-devel +BuildRequires: libcurl-devel +BuildRequires: wireless-tools-devel +BuildRequires: libproxy-devel +BuildRequires: pkgconfig(dbus-glib-1) +BuildRequires: dejavu-fonts +BuildRequires: harfbuzz +BuildRequires: NetworkManager hyphen +BuildRequires: ffmpeg +BuildRequires: libnotify +BuildRequires: wget +BuildRequires: pkgconfig(ice) +BuildRequires: pkgconfig(sm) +BuildRequires: alsa-lib-devel +BuildRequires: libjpeg-devel +BuildRequires: pkgconfig(glib-2.0) >= 2.22 +BuildRequires: pkgconfig(gobject-2.0) +BuildRequires: pkgconfig(gtk+-3.0) >= 3.14.0 +BuildRequires: pkgconfig(gtk+-unix-print-3.0) +BuildRequires: pkgconfig(libffi) +BuildRequires: pkgconfig(jack) +BuildRequires: pulseaudio-libs-devel +BuildRequires: jemalloc +%if %{with_pipewire0_3} +BuildRequires: pkgconfig(libpipewire-0.3) +%endif +%if 0%{?valgrind} +BuildRequires: pkgconfig(valgrind) +%endif + +# require any OpenPGP backend with the librnp interface +Requires: thunderbird-librnp%{?_isa} +# prefer the librnp implementation bundled with thunderbird +Suggests: thunderbird-librnp-rnp%{?_isa} + +# Gecko/Toolkit +Patch1: mozilla-nongnome-proxies.patch +Patch2: mozilla-ntlm-full-path.patch +Patch3: mozilla-pgo.patch +Patch4: mozilla-reduce-rust-debuginfo.patch +Patch5: mozilla-bmo1568145.patch +Patch6: mozilla-fix-top-level-asm.patch +Patch7: mozilla-libavcodec58_91.patch +# Firefox/browser +Patch8: firefox-branded-icons.patch +Patch9: riscv.patch +Patch10: rust-opt-level.patch + +BuildRoot: %{_tmppath}/%{name}-%{version}-build +### build options end +Requires: nspr +Requires: nss +Requires: freetype +Recommends: libcanberra0 +Recommends: libotr5 +Recommends: libpulse0 +Requires(post): desktop-file-utils coreutils shared-mime-info fileutils textutils +Requires(postun): desktop-file-utils shared-mime-info +%global libgssapi libgssapi_krb5.so.2 +ExcludeArch: armv6l armv6hl + +%description +Thunderbird is a free, open-source, cross-platform application for +managing email, news feeds, chat, and news groups. It is a local +(rather than browser- or web-based) email application that is powerful +yet easy to use. + +%if %crashreporter +%package buildsymbols +Summary: Breakpad buildsymbols for %{name} +Group: Development/Debug + +%description buildsymbols +This subpackage contains the Breakpad created and compatible debugging +symbols meant for upload to Mozilla's crash collector database. +%endif + +%package librnp-rnp +Summary: OpenPGP implementation for Thunderbird based on RNP +Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +Provides: thunderbird-librnp +Provides: thunderbird-librnp%{?_isa} +Conflicts: thunderbird-librnp%{?_isa} +%description librnp-rnp +The thunderbird-librnp-rnp package contains an OpenPGP implementation +based on RNP. +%files librnp-rnp +%{_libdir}/%{name}/librnp.so + + +%global debug_package %{nil} +%prep +%{__cat} %{SOURCE8} %{SOURCE9} %{SOURCE10} %{SOURCE11} > %{SOURCE0} + +%setup -q -n %{name}-%{version} +%autopatch -p1 +%build + +export CARGO_HOME=${RPM_BUILD_DIR}/%{name}-%{version}/.cargo +export MOZ_SOURCE_CHANGESET=%{RELEASE_TAG} +export SOURCE_REPO=%{RELEASE_REPO} +export source_repo=%{RELEASE_REPO} +export MOZ_SOURCE_REPO=%{RELEASE_REPO} +export MOZ_BUILD_DATE=%{RELEASE_TIMESTAMP} + +%if 0%{?clang_build} == 0 +export CC=gcc +export CXX=g++ +%if 0%{?gcc_version:%{gcc_version}} >= 12 +export CFLAGS="$CFLAGS -fimplicit-constexpr" +%endif +%endif +# %endif +%ifarch %arm %ix86 +# Limit RAM usage during link +export LDFLAGS="${LDFLAGS} -Wl,--no-keep-memory -Wl,--reduce-memory-overheads" +export GC_SECTIONS_BREAKS_DEBUG_RANGES=yes +%endif +export LDFLAGS="${LDFLAGS} -fPIC -Wl,-z,relro,-z,now" +export CXXFLAGS="$CFLAGS" +export MOZCONFIG=$RPM_BUILD_DIR/mozconfig + +%{__cp} -f %{SOURCE4} $MOZCONFIG +cat << EOF >> $MOZCONFIG +mk_add_options MOZ_MAKE_FLAGS=%{?jobs:%jobs} +mk_add_options MOZ_OBJDIR=$RPM_BUILD_DIR/obj +ac_add_options --prefix=%{_prefix} +ac_add_options --libdir=%{_libdir} +ac_add_options --includedir=%{_includedir} +%if 0%{wayland_supported} +ac_add_options --enable-default-toolkit=cairo-gtk3-wayland +%else +ac_add_options --enable-default-toolkit=cairo-gtk3 +%endif +# building with elf-hack started to fail everywhere with FF73 +%ifnarch aarch64 ppc64 ppc64le s390x riscv64 +ac_add_options --disable-elf-hack +%endif +%if ! %crashreporter +ac_add_options --disable-crashreporter +%endif +%ifnarch %ix86 x86_64 riscv64 +ac_add_options --disable-jemalloc +%endif +%if 0%{?valgrind} +ac_add_options --enable-valgrind +%endif +%if 0%{?lto} +ac_add_options --enable-lto +%endif +EOF + +./mach build -v + +%install +cd $RPM_BUILD_DIR/obj +export MOZ_SOURCE_STAMP=%{RELEASE_TAG} +export MOZ_SOURCE_REPO=%{RELEASE_REPO} +make -C comm/mail/installer STRIP=/bin/true MOZ_PKG_FATAL_WARNINGS=0 +# copy tree into RPM_BUILD_ROOT +mkdir -p %{buildroot}%{_prefix}/%_lib/%{name} +cp -rf $RPM_BUILD_DIR/obj/dist/%{name}/* %{buildroot}%{_prefix}/%_lib/%{name} +mkdir -p %{buildroot}%{_prefix}/%_lib/%{name}/extensions + +# remove some executable permissions +find %{buildroot}%{_prefix}/%_lib/%{name} \ + -name "*.js" -o \ + -name "*.jsm" -o \ + -name "*.rdf" -o \ + -name "*.properties" -o \ + -name "*.dtd" -o \ + -name "*.txt" -o \ + -name "*.xml" -o \ + -name "*.css" \ + -exec chmod a-x {} + +# remove mkdir.done files from installed base +find %{buildroot}%{_prefix}/%_lib/%{name} -type f -name ".mkdir.done" -delete +# overwrite the mozilla start-script and link it to /usr/bin +mkdir --parents %{buildroot}%{_bindir}/ +sed "s:%%PREFIX:%{_prefix}:g +s:%%PROGDIR:%{_prefix}/%_lib/%{name}:g +s:%%APPNAME:%{name}:g +s:%%WAYLAND_SUPPORTED:%{wayland_supported}:g +s:%%PROFILE:.thunderbird:g" \ + %{SOURCE3} > %{buildroot}%{_prefix}/%_lib/%{name}/%{name}.sh +chmod 755 %{buildroot}%{_prefix}/%_lib/%{name}/%{name}.sh +ln -sf ../..%{_prefix}/%_lib/%{name}/%{name}.sh %{buildroot}%{_bindir}/%{name} +# desktop file +mkdir -p %{buildroot}%{_datadir}/applications +install -m 644 %{SOURCE1} \ + %{buildroot}%{_datadir}/applications/%{name}.desktop +# appdata +mkdir -p %{buildroot}%{_datadir}/appdata +cp %{SOURCE7} %{buildroot}%{_datadir}/appdata/%{name}.appdata.xml +sed -e 's,RPM_VERSION,%{mainversion},g +s,GSSAPI,%{libgssapi},g' %{SOURCE6} > %{buildroot}%{_prefix}/%_lib/%{name}/defaults/pref/%{name}.js + +# Install symbolic icon for GNOME +mkdir -p %{buildroot}%{_prefix}/share/icons/hicolor/symbolic/apps/ +cp %{_builddir}/%{name}-%{version}/comm/mail/branding/thunderbird/TB-symbolic.svg \ + %{buildroot}%{_prefix}/share/icons/hicolor/symbolic/apps/%{name}-symbolic.svg +for size in 16 22 24 32 48 64 128; do + mkdir -p %{buildroot}%{_datadir}/icons/hicolor/${size}x${size}/apps/ + cp %{buildroot}%{_prefix}/%_lib/%{name}/chrome/icons/default/default$size.png \ + %{buildroot}%{_datadir}/icons/hicolor/${size}x${size}/apps/%{name}.png +done +# excluded files +rm -f %{buildroot}%{_prefix}/%_lib/%{name}/thunderbird +rm -f %{buildroot}%{_prefix}/%_lib/%{name}/removed-files +rm -f %{buildroot}%{_prefix}/%_lib/%{name}/precomplete +rm -f %{buildroot}%{_prefix}/%_lib/%{name}/updater +rm -f %{buildroot}%{_prefix}/%_lib/%{name}/updater.ini +rm -f %{buildroot}%{_prefix}/%_lib/%{name}/update.locale +rm -f %{buildroot}%{_prefix}/%_lib/%{name}/dictionaries/en-US* +rm -f %{buildroot}%{_prefix}/%_lib/%{name}/nspr-config + +# Some sites use different partitions for /usr/(lib|lib64) and /usr/share. Since you +# can't create hardlinks across partitions, we'll do this more than once. +%fdupes %{buildroot}%{_prefix}/%_lib/%{name} +%fdupes %{buildroot}%{_datadir} +# create breakpad debugsymbols +%if %crashreporter +SYMBOLS_NAME="thunderbird-%{version}-%{release}.%{_arch}-symbols" +make buildsymbols \ + SYMBOL_INDEX_NAME="$SYMBOLS_NAME.txt" \ + SYMBOL_FULL_ARCHIVE_BASENAME="$SYMBOLS_NAME-full" \ + SYMBOL_ARCHIVE_BASENAME="$SYMBOLS_NAME" +if [ -e dist/*symbols.zip ]; then + mkdir -p %{buildroot}%{_datadir}/mozilla/ + cp dist/*symbols.zip %{buildroot}%{_datadir}/mozilla/ +fi +%endif + +%clean +rm -rf %{buildroot} + +%post +# update mime and desktop database +update-desktop-database &> /dev/null || : +touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : + +%postun +update-desktop-database &> /dev/null || : +if [ $1 -eq 0 ] ; then + touch --no-create %{_datadir}/icons/hicolor &>/dev/null + gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : +fi + +%posttrans +gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : + +%files +%defattr(-,root,root) +%attr(755,root,root) %{_prefix}/%_lib/%{name}/%{name}.sh +%dir %{_prefix}/%_lib/%{name} +%{_prefix}/%_lib/%{name}/application.ini +%{_prefix}/%_lib/%{name}/dependentlibs.list +%{_prefix}/%_lib/%{name}/fonts/ +%{_prefix}/%_lib/%{name}/*.so +%exclude %{_libdir}/%{name}/librnp.so +%{_prefix}/%_lib/%{name}/omni.ja +%{_prefix}/%_lib/%{name}/pingsender +%{_prefix}/%_lib/%{name}/platform.ini +%{_prefix}/%_lib/%{name}/plugin-container +%{_prefix}/%_lib/%{name}/thunderbird-bin +# crashreporter files +%if %crashreporter +%{_prefix}/%_lib/%{name}/crashreporter +%{_prefix}/%_lib/%{name}/crashreporter.ini +%{_prefix}/%_lib/%{name}/minidump-analyzer +%{_prefix}/%_lib/%{name}/Throbber-small.gif +%endif +%dir %{_prefix}/%_lib/%{name}/chrome/ +%{_prefix}/%_lib/%{name}/chrome/icons/ +%{_prefix}/%_lib/%{name}/defaults/ +%{_prefix}/%_lib/%{name}/isp/ +%{_datadir}/appdata/ +%{_datadir}/applications/%{name}.desktop +%{_datadir}/icons/hicolor/*/apps/%{name}.png +%{_datadir}/icons/hicolor/symbolic/apps/%{name}-symbolic.svg +%{_bindir}/%{name} +%{_prefix}/%_lib/%{name}/rnp-cli +%{_prefix}/%_lib/%{name}/rnpkeys + +%if %crashreporter +%files buildsymbols +%defattr(-,root,root) +%{_datadir}/mozilla/ +%endif + +%changelog +*Wed Jun 1 2022 Jingwiw - 97.0-1 +- init thunderbird 97 \ No newline at end of file