crux-commits
Threads by month
- ----- 2025 -----
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
September 2022
- 1 participants
- 826 discussions
ports/contrib (3.6): [notify] thunderbird: 91.10.0 -> 102.2.2 new dependency: wasi-libc++
by crux@crux.nu 19 Sep '22
by crux@crux.nu 19 Sep '22
19 Sep '22
commit 0d0ea08ae380320997d3fa6b1c53f489a30c7e14
Author: Danny Rawlins <contact(a)romster.me>
Date: Mon Sep 19 18:38:30 2022 +1000
[notify] thunderbird: 91.10.0 -> 102.2.2 new dependency: wasi-libc++
diff --git a/thunderbird/.footprint b/thunderbird/.footprint
index 9266255cb..63e2121c6 100644
--- a/thunderbird/.footprint
+++ b/thunderbird/.footprint
@@ -32,13 +32,10 @@ drwxr-xr-x root/root usr/lib/thunderbird/isp/
-rw-r--r-- root/root usr/lib/thunderbird/isp/POPFile.sfd
-rw-r--r-- root/root usr/lib/thunderbird/isp/SpamAssassin.sfd
-rw-r--r-- root/root usr/lib/thunderbird/isp/SpamPal.sfd
--rwxr-xr-x root/root usr/lib/thunderbird/libldap60.so
--rwxr-xr-x root/root usr/lib/thunderbird/libldif60.so
-rwxr-xr-x root/root usr/lib/thunderbird/liblgpllibs.so
-rwxr-xr-x root/root usr/lib/thunderbird/libmozgtk.so
-rwxr-xr-x root/root usr/lib/thunderbird/libmozsandbox.so
-rwxr-xr-x root/root usr/lib/thunderbird/libmozsqlite3.so
--rwxr-xr-x root/root usr/lib/thunderbird/libprldap60.so
-rwxr-xr-x root/root usr/lib/thunderbird/librnp.so
-rwxr-xr-x root/root usr/lib/thunderbird/libxul.so
-rw-r--r-- root/root usr/lib/thunderbird/omni.ja
@@ -46,6 +43,8 @@ drwxr-xr-x root/root usr/lib/thunderbird/isp/
-rw-r--r-- root/root usr/lib/thunderbird/platform.ini
-rwxr-xr-x root/root usr/lib/thunderbird/plugin-container
-rw-r--r-- root/root usr/lib/thunderbird/removed-files
+-rwxr-xr-x root/root usr/lib/thunderbird/rnp-cli
+-rwxr-xr-x root/root usr/lib/thunderbird/rnpkeys
-rwxr-xr-x root/root usr/lib/thunderbird/thunderbird
-rwxr-xr-x root/root usr/lib/thunderbird/thunderbird-bin
drwxr-xr-x root/root usr/share/
diff --git a/thunderbird/.signature b/thunderbird/.signature
index 5a6813030..373cb94ad 100644
--- a/thunderbird/.signature
+++ b/thunderbird/.signature
@@ -1,6 +1,9 @@
untrusted comment: verify with /etc/ports/contrib.pub
-RWSagIOpLGJF37xKpe2pqzTdV0Ixp8mJQKXjX+0hmlPjXEXgnQU5zVl/9nucxLbwE7uf3wzo8+qMapiYpN2Z3h8Oz2Iw3mIQHwE=
-SHA256 (Pkgfile) = 1d78662c8b84090ca8676106a0164882da2aebdfc27155a8d128d099ded5d3bd
-SHA256 (.footprint) = 923d578f9d9e0dbd81a35f85c1d0228c2c29722327104100bdd991a056632803
-SHA256 (thunderbird-91.10.0.source.tar.xz) = a0dbf9a8083a4dff8a0506b5f4c6910f681476e2c5fce081beda4493168e66f9
+RWSagIOpLGJF38HbEpaIOWMVTtUXV6SoCQKuhiqYZXi6vhNI3OjRMbGVT3gfHxjX/Rh8EKOqaFRj2PU0bpdkJ+YdJk5Byz5ORwo=
+SHA256 (Pkgfile) = efea3318e264663e6f4ff2671507dc2883bdce8515dbb84ecade8ff94d6d25e5
+SHA256 (.footprint) = b4b411c70602919b2afe6fbf140755bd53ad1f77d2ff5013a899e0a3cf4543d2
+SHA256 (thunderbird-102.2.2.source.tar.xz) = 5d5f327ea450572ef2a135e5c849b3f38f7d54e897f41a1dec5223e184558f2b
SHA256 (thunderbird.desktop) = c6bc6a66f16951c4f7560d019dad48968169aef6587cef4e98380a300078299a
+SHA256 (cbindgen-0.24.patch) = 4628d136c3beada292e83cd8e89502cac4aa3836851b34259a665582a7713978
+SHA256 (rustc_version-0.4.0.patch) = 4e7bb6d1205d9b0ed226f5636f6270afefc3e60eee1d8a2f6ede41e874728dc6
+SHA256 (packed_simd_2-0.3.8.patch) = 8a5654094f17358acf166a185e037a2a008ca47d63ee0130c797a079e437ae42
diff --git a/thunderbird/Pkgfile b/thunderbird/Pkgfile
index 8ce3bd948..a30aa00cb 100644
--- a/thunderbird/Pkgfile
+++ b/thunderbird/Pkgfile
@@ -1,18 +1,25 @@
# Description: Email client from the Mozilla project
# URL: https://www.thunderbird.net/en-US/
# Maintainer: Danny Rawlins, crux at romster dot me
-# Depends on: alsa-lib autoconf-2.13 cbindgen clang dbus-glib gnupg gtk libwebp libevent libidl libnotify libvpx lld nodejs nss startup-notification unzip zip
+# Depends on: alsa-lib autoconf-2.13 cbindgen clang dbus-glib gnupg gtk libwebp libevent libidl libnotify libvpx lld nodejs nss startup-notification unzip zip wasi-libc++
# Optional: sccache
name=thunderbird
-version=91.10.0
+version=102.2.2
release=1
source=(https://archive.mozilla.org/pub/thunderbird/releases/$version/sourc…
- $name.desktop)
+ $name.desktop
+ cbindgen-0.24.patch
+ rustc_version-0.4.0.patch
+ packed_simd_2-0.3.8.patch)
build() {
cd $name-$version
+ patch -p1 -i $SRC/cbindgen-0.24.patch
+ patch -p1 -i $SRC/rustc_version-0.4.0.patch
+ patch -p1 -i $SRC/packed_simd_2-0.3.8.patch
+
if [ -e '/usr/bin/ccache' ]; then
export OS_CCACHE_COMPILERCHECK="$(/usr/bin/clang -dumpversion | sed -z 's/\n/ /g'; crux | cut -d' ' -f3)"
export CCACHE_COMPILERCHECK="string:$OS_CCACHE_COMPILERCHECK"
@@ -34,6 +41,7 @@ cat <<- EOF > .mozconfig
ac_add_options --with-system-libevent
ac_add_options --with-system-libvpx
ac_add_options --with-system-webp
+ ac_add_options --with-wasi-sysroot=/usr/share/wasi-sysroot
ac_add_options --enable-av1
ac_add_options --enable-system-ffi
ac_add_options --enable-system-pixman
diff --git a/thunderbird/cbindgen-0.24.patch b/thunderbird/cbindgen-0.24.patch
new file mode 100644
index 000000000..3011e8ada
--- /dev/null
+++ b/thunderbird/cbindgen-0.24.patch
@@ -0,0 +1,17 @@
+Description: Remove an extra constant definition that is now being generated by newer versions of cbindgen (0.24), and causing build failures because it is defined in several places.
+Author: Olivier Tilloy <olivier.tilloy(a)canonical.com>
+Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1773259
+Forwarded: not-needed
+
+--- a/gfx/webrender_bindings/webrender_ffi.h
++++ b/gfx/webrender_bindings/webrender_ffi.h
+@@ -73,8 +73,6 @@ struct WrPipelineInfo;
+ struct WrPipelineIdAndEpoch;
+ using WrPipelineIdEpochs = nsTArray<WrPipelineIdAndEpoch>;
+
+-const uint64_t ROOT_CLIP_CHAIN = ~0;
+-
+ } // namespace wr
+ } // namespace mozilla
+
+
diff --git a/thunderbird/packed_simd_2-0.3.8.patch b/thunderbird/packed_simd_2-0.3.8.patch
new file mode 100644
index 000000000..f3c4fca6a
--- /dev/null
+++ b/thunderbird/packed_simd_2-0.3.8.patch
@@ -0,0 +1,925 @@
+
+# HG changeset patch
+# User Mike Hommey <mh+mozilla(a)glandium.org>
+# Date 1660200949 0
+# Node ID fac963c3bc003f12171fbb706fbd0ef676aeaa52
+# Parent d6c758891f5d505f3dcb09cc559b9aa4d3199597
+Bug 1783784 - Update packed_simd_2 to 0.3.8. r=hsivonen,supply-chain-reviewers
+
+Differential Revision: https://phabricator.services.mozilla.com/D154063
+
+diff --git a/.cargo/config.in b/.cargo/config.in
+--- a/.cargo/config.in
++++ b/.cargo/config.in
+@@ -70,17 +70,17 @@ rev = "499b95580c8b276e52bd9757d73524950
+ [source."https://github.com/jfkthame/mapped_hyph.git"]
+ git = "https://github.com/jfkthame/mapped_hyph.git"
+ replace-with = "vendored-sources"
+ rev = "746743227485a83123784df0c53227ab466612ed"
+
+ [source."https://github.com/hsivonen/packed_simd"]
+ git = "https://github.com/hsivonen/packed_simd"
+ replace-with = "vendored-sources"
+-rev = "c149d0a519bf878567c7630096737669ec2ff15f"
++rev = "90eebb82a107cbec1c8e406d9223819417e96de1"
+
+ [source."https://github.com/hsivonen/chardetng_c"]
+ git = "https://github.com/hsivonen/chardetng_c"
+ replace-with = "vendored-sources"
+ rev = "ed8a4c6f900a90d4dbc1d64b856e61490a1c3570"
+
+ [source."https://github.com/hsivonen/chardetng"]
+ git = "https://github.com/hsivonen/chardetng"
+diff --git a/Cargo.lock b/Cargo.lock
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -3904,20 +3904,21 @@ version = "0.4.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "6ff55baddef9e4ad00f88b6c743a2a8062d4c6ade126c2a528644b8e444d52ce"
+ dependencies = [
+ "stable_deref_trait",
+ ]
+
+ [[package]]
+ name = "packed_simd_2"
+-version = "0.3.7"
+-source = "git+https://github.com/hsivonen/packed_simd?rev=c149d0a519bf878567c76300967…"
++version = "0.3.8"
++source = "git+https://github.com/hsivonen/packed_simd?rev=90eebb82a107cbec1c8e406d922…"
+ dependencies = [
+ "cfg-if 1.0.0",
++ "rustc_version",
+ ]
+
+ [[package]]
+ name = "parking_lot"
+ version = "0.11.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb"
+ dependencies = [
+diff --git a/Cargo.toml b/Cargo.toml
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -140,16 +140,16 @@ moz_asserts = { path = "mozglue/static/r
+
+ # Other overrides
+ async-task = { git = "https://github.com/smol-rs/async-task", rev="f6488e35beccb26eb6e85847b02aa78a42cd3d0e" }
+ 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" }
+ fog = { path = "toolkit/components/glean/api" }
+ libudev-sys = { path = "dom/webauthn/libudev-sys" }
+-packed_simd = { package = "packed_simd_2", git = "https://github.com/hsivonen/packed_simd", rev="c149d0a519bf878567c7630096737669ec2ff15f" }
++packed_simd = { package = "packed_simd_2", git = "https://github.com/hsivonen/packed_simd", rev="90eebb82a107cbec1c8e406d9223819417e96de1" }
+ midir = { git = "https://github.com/mozilla/midir.git", rev = "4c11f0ffb5d6a10de4aff40a7b81218b33b94e6f" }
+ minidump_writer_linux = { git = "https://github.com/rust-minidump/minidump-writer.git", rev = "75ada456c92a429704691a85e1cb42fef8cafc0d" }
+
+ # 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/third_party/rust/packed_simd_2/.cargo-checksum.json b/third_party/rust/packed_simd_2/.cargo-checksum.json
+--- a/third_party/rust/packed_simd_2/.cargo-checksum.json
++++ b/third_party/rust/packed_simd_2/.cargo-checksum.json
+@@ -1,1 +1,1 @@
+-{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"30a61a5ec53355fc1f3585e1690280308c2b7961701abc11e8389b235b647178","Cargo.toml":"f85e54e13a05f6e4f27c230ab81430af27b6ff80a1c036bd70c42ea115f89487","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"882f8894b333becf490d23c9024a86fd1327c8edea33aa8dbb98dc2f2ddb3956","bors.toml":"dee881dc69b9b7834e4eba5d95c3ed5a416d4628815a167d6a22d4cb4fb064b8","build.rs":"019ed29c43989782d8eec3a961654cfc172d7a7898da4eca8f654700af7e1988","ci/all.sh":"2ae6b2445b4db83833e40b37efd0016c6b9879ee988b9b3ef94db5439a3e1606","ci/android-install-ndk.sh":"0f1746108cc30bf9b9ba45bcde7b19fc1a8bdf5b0258035b4eb8dc69b75efac4","ci/android-install-sdk.sh":"3490432022c5c8f5a115c084f7a9aca1626f96c0c87ffb62019228c4346b47e4","ci/android-sysimage.sh":"ebf4e5daa1f0fe1b2092b79f0f3f161c4c4275cb744e52352c4d81ab451e4c5a","ci/benchmark.sh":"b61d19ef6b90deba8fb79dee74c8b062d94844676293da346da87bb78a9a49a4","ci/deploy_and_run_on_ios_simulator.rs":"ec8ecf82d92072676aa47f0d1a3d021b60a7ae3531153ef12d2ff4541fc294dc","ci/docker/aarch64-linux-android/Dockerfile":"ace2e7d33c87bc0f6d3962a4a3408c04557646f7f51ab99cfbf574906796b016","ci/docker/aarch64-unknown-linux-gnu/Dockerfile":"da88c0d50f16dc08448c7fdf1fa5ed2cbe576acf9e7dd85b5b818621b2a8c702","ci/docker/arm-linux-androideabi/Dockerfile":"370e55d3330a413a3ccf677b3afb3e0ef9018a5fab263faa97ae8ac017fc2286","ci/docker/arm-unknown-linux-gnueabi/Dockerfile":"bb5f8ae890707c128652290ffc544447643bf12037ddd73c6ad6989f848cb380","ci/docker/arm-unknown-linux-gnueabihf/Dockerfile":"1afaefcbc05b740859acd4e067bc92439be6bcbe8f2e9678474fb434bcd398d9","ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile":"8282ea707a94109beed47a57574755e2d58401735904a03f85fb64c578c53b4f","ci/docker/i586-unknown-linux-gnu/Dockerfile":"49792922269f371bd29da4727e9085101b27be67a6b97755d0196c63317f7abb","ci/docker/i686-unknown-linux-gnu/Dockerfile":"49792922269f371bd29da4727e9085101b27be67a6b97755d0196c63317f7abb","ci/docker/mips-unknown-linux-gnu/Dockerfile":"b2ebc25797612c4f8395fe9d407725156044955bfbcf442036b7f55b43a5f9da","ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile":"b0c1692ac65bc56dd30494b1993d8e929c48cc9c4b92029b7c7592af6d4f9220","ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile":"4e9249c179300138141d0b2b7401b11897f64aed69f541f078c1db4594df2827","ci/docker/mipsel-unknown-linux-musl/Dockerfile":"3164c52b0dcbb01afa78292b15b5c43503ccf0491cf6eb801ec2bf22ae274e52","ci/docker/powerpc-unknown-linux-gnu/Dockerfile":"786f799d0b56eb54d7b6c4b00e1aed4ce81776e14e44767e083c89d014b72004","ci/docker/powerpc64-unknown-linux-gnu/Dockerfile":"e8bc363837cd9c2d8b22402acb8c1c329efc11ba5d12170603d2fe2eae9da059","ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile":"47998d45b781d797b9e6085ebe898d90de0c952b54537a8db4e8d7503eb032d9","ci/docker/s390x-unknown-linux-gnu/Dockerfile":"93fb44df3d7fd31ead158570667c97b5076a05c3d968af4a84bc13819a8f2db8","ci/docker/sparc64-unknown-linux-gnu/Dockerfile":"da1c39a3ff1fe22e41395fa7c8934e90b4c1788e551b9aec6e38bfd94effc437","ci/docker/thumbv7neon-linux-androideabi/Dockerfile":"c2decd5591bd7a09378901bef629cd944acf052eb55e4f35b79eb9cb4d62246a","ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile":"51955a8bf3c4d440f47382af6f5426ebff94ab01a04da36175babda9a057740f","ci/docker/wasm32-unknown-unknown/Dockerfile":"5a022299f56730cf8c432a07391e95e199cfa36dc8da2a96c9d185c8de93e913","ci/docker/x86_64-linux-android/Dockerfile":"685040273cf350d5509e580ac451555efa19790c8723ca2af066adadc6880ad2","ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile":"44b6203d9290bfdc53d81219f0937e1110847a23dd982ec8c4de388354f01536","ci/docker/x86_64-unknown-linux-gnu/Dockerfile":"7f4e3ca5fa288ea70edb4d1f75309708cd30b192e2e4444e61c4d5b3b58f89cf","ci/dox.sh":"434e9611c52e389312d2b03564adf09429f10cc76fe66a8644adb104903b87b7","ci/linux-s390x.sh":"d6b732d7795b4ba131326aff893bca6228a7d2eb0e9402f135705413dbbe0dce","ci/linux-sparc64.sh":"c92966838b1ab7ad3b7a344833ee726aba6b647cf5952e56f0ad1ba420b13325","ci/lld-shim.rs":"3d7f71ec23a49e2b67f694a0168786f9a954dda15f5a138815d966643fd3fcc3","ci/max_line_width.sh":"0a1518bba4c9ecaa55694cb2e9930d0e19c265baabf73143f17f9cf285aaa5bb","ci/run-docker.sh":"92e036390ad9b0d16f109579df1b5ced2e72e9afea40c7d011400ebd3a2a90de","ci/run.sh":"41dd6a60efaaeae9661a01370cce98b631f78392859a0cf68c946c0a16edf5f7","ci/run_examples.sh":"d1a23c6c35374a0678ba5114b9b8fefd8be0a79e774872a8bf0898d1baca18d0","ci/runtest-android.rs":"145a8e9799a5223975061fe7e586ade5669ee4877a7d7a4cf6b4ab48e8e36c7c","ci/setup_benchmarks.sh":"fae3960023f6f3d1388cd2ad22fdbab4b075f1f29dd4292d7994a20783beb6cf","ci/test-runner-linux":"c8aa6025cff5306f4f31d0c61dc5f9d4dd5a1d189ab613ef8d4c367c694d9ccd","contributing.md":"2d2629310ad4d464c482bdbb5819f0d6ce223c576aeef2cdce6a1f6857085ea5","perf-guide/.gitignore":"fe82c7da551079d832cf74200b0b359b4df9828cb4a0416fa7384f07a2ae6a13","perf-guide/book.toml":"115a98284126c6b180178b44713314cc494f08a71662ee2ce15cf67f17a51064","perf-guide/src/SUMMARY.md":"3e03bffc991fdc2050f3d51842d72d9d21ea6abab56a3baf3b2d5973a78b89e1","perf-guide/src/ascii.css":"29afb08833b2fe2250f0412e1fa1161a2432a0820a14953c87124407417c741a","perf-guide/src/bound_checks.md":"5e4991ff58a183ef0cd9fdc1feb4cd12d083b44bdf87393bbb0927808ef3ce7d","perf-guide/src/float-math/approx.md":"8c09032fa2d795a0c5db1775826c850d28eb2627846d0965c60ee72de63735ad","perf-guide/src/float-math/fma.md":"311076ba4b741d604a82e74b83a8d7e8c318fcbd7f64c4392d1cf5af95c60243","perf-guide/src/float-math/fp.md":"04153e775ab6e4f0d7837bcc515230d327b04edfa34c84ce9c9e10ebaeef2be8","perf-guide/src/float-math/svml.md":"0798873b8eedaeda5fed62dc91645b57c20775a02d3cd74d8bd06958f1516506","perf-guide/src/introduction.md":"9f5a19e9e6751f25d2daad39891a0cc600974527ec4c8305843f9618910671bd","perf-guide/src/prof/linux.md":"447731eb5de7d69166728fdbc5ecb0c0c9db678ea493b45a592d67dd002184c0","perf-guide/src/prof/mca.md":"f56d54f3d20e7aa4d32052186e8237b03d65971eb5d112802b442570ff11d344","perf-guide/src/prof/profiling.md":"8a650c0fd6ede0964789bb6577557eeef1d8226a896788602ce61528e260e43c","perf-guide/src/target-feature/attribute.md":"615f88dca0a707b6c416fa605435dd6e1fb5361cc639429cbf68cd87624bd78b","perf-guide/src/target-feature/features.md":"17077760ff24c006b606dd21889c53d87228f4311f3ba3a574f9afdeacd86165","perf-guide/src/target-feature/inlining.md":"7ed1d7068d8173a00d84c16cfe5871cd68b9f04f8d0cca2d01ebc84957ebf2f6","perf-guide/src/target-feature/practice.md":"c4b371842e0086df178488fec97f20def8f0c62ee588bcd25fd948b9b1fa227e","perf-guide/src/target-feature/runtime.md":"835425f5ee597fb3e51d36e725a81ebee29f4561231d19563cd4da81dbb1cfcb","perf-guide/src/target-feature/rustflags.md":"01197acf6f0adec8db32b8591811f69cecb6555a2b05dc5d5ec27d0e3f7b065e","perf-guide/src/vert-hor-ops.md":"c6211c0ee91e60552ec592d89d9d957eedc21dee3cbd89e1ad6765ea06a27471","rustfmt.toml":"d99a43f3f8ef9e425cf01c333fba9f0051f888f5d87ab4e8f63c2f7d0fe6620f","src/api.rs":"f6e92f056565e6fd93f98829a408aee9e790251e0cbd8a8bc30c8662b4d6fabb","src/api/bit_manip.rs":"c47a4d0f7451f7e35d07715e4f39a472e07457fd456fdb726864a4f6887252a3","src/api/bitmask.rs":"6d2beefd62ee5d9c8eb060bee6abc641616bf828c99f82abf97b21bf004e894b","src/api/cast.rs":"03b94a3d316ac7b7be7068810044911e965e889a0ace7bae762749ca74a92747","src/api/cast/macros.rs":"b0a14d0c83ad2ebb7a275180f6d9e3f2bc312ba57a7d3d6c39fad4e0f20f9408","src/api/cast/v128.rs":"edd0994efac4379dff26e178423a52dbb3ffeb38b1fc97cae975d744c00b4fb6","src/api/cast/v16.rs":"96bd98c2d21b0663abe6c0ab33005b1fa693f3db7ee6795351391343863484da","src/api/cast/v256.rs":"8c31fe91f5e78ef737dfba6979cc1240210cb094a89d284fe459bf8a991ca24b","src/api/cast/v32.rs":"a99a79dd84d2a5e6adf9db98705675915bd03fd1287d489c7fe38e84d7e4a086","src/api/cast/v512.rs":"c0dd526f41ed7b8a71c3743d91267554ec0a0c75834ccc2e3ecb0ef3004af642","src/api/cast/v64.rs":"6572fdba2a1241a6cd666d3f0cce3306cd2cb7e5e236172e59d5d4351c8a88af","src/api/cmp.rs":"357c3a2a09c6d4611c32dd7fa95be2fae933d513e229026ec9b44451a77b884e","src/api/cmp/eq.rs":"60f70f355bae4cb5b17db53204cacc3890f70670611c17df638d4c04f7cc8075","src/api/cmp/ord.rs":"589f7234761c294fa5df8f525bc4acd5a47cdb602207d524a0d4e19804cd9695","src/api/cmp/partial_eq.rs":"902ccb8aa01fd5738b30ba0b712669c21d4801958907e03bad23432c7dba0198","src/api/cmp/partial_ord.rs":"9db0c37d7434cdfc62d8d66912e972fa3d8c115ab2af051a6f45e414bd3e4f1c","src/api/cmp/vertical.rs":"de3d62f38eba817299aa16f1e1939954c9a447e316509397465c2830852ba053","src/api/default.rs":"67bf21c134127d12a7028c8b88a57f0ceee8ccbd74976da8ca74eb9f16a174d5","src/api/fmt.rs":"67fb804bb86b6cd77cf8cd492b5733ce437071b66fe3297278b8a6552c325dda","src/api/fmt/binary.rs":"02b2b287f7404f8a983813cf70c87108c8da3835578b63ab303116885f609413","src/api/fmt/debug.rs":"56e1c3bdc092747344fffaafff9da7163ee7827857f6fb7cb1c9923eca4f6fa0","src/api/fmt/lower_hex.rs":"558fd592f7f485712fb051509cecc7174a21e6bf62e5ce64766e75afc97bb8e1","src/api/fmt/octal.rs":"3b2e70877a4f368c7704f8e254236c014c365c74d93371c1feb5f030e6c66422","src/api/fmt/upper_hex.rs":"2a442f666bc80e22d41f903f881238fe114dd49344c3ed69849250e853cafc5d","src/api/from.rs":"2e599d8329cb05eaf06224cc441355c4b7b51254fc19256619333be8c149d444","src/api/from/from_array.rs":"dd3fc64fb17d6184bb60343f8da26a05edf0e5f3c14caf55d49fa15e21d948dc","src/api/from/from_vector.rs":"9764371aa9e6005aace74dea14f59e5611a095b7cf42707940924749282c52f0","src/api/hash.rs":"5076ece87969592c876486f5b1ea8affbeaec379d1a14a30859e0aa5592019de","src/api/into_bits.rs":"1ee15923352786b9ab4a31fa506762297116b18cfdb8e72853abc8ad001651d2","src/api/into_bits/arch_specific.rs":"e7445021f3908326bfee758835e5fc5ad56aa1baa77fc1c58abe4350c66c670a","src/api/into_bits/macros.rs":"bb4fe99be2af6a21d805efab44c8e4e61a7b2adb42a65504a0cf26d13efdadcd","src/api/into_bits/v128.rs":"145a44922b09a5ca5b62d88a461d327d399a997a15db4b11d7b17e554a9fa4c0","src/api/into_bits/v16.rs":"f4f4f61ba88aa51b158ec56ca3dce234349aea0daf2b3029a14ab5125d1e41e5","src/api/into_bits/v256.rs":"8cea9c5d9809f11323cb7cdc53b83df593fd17caf926251e412ae9777bed547f","src/api/into_bits/v32.rs":"905ba683d342fa32f4202b80bb46530807bd0a5b588f6c2e8c9f475223c47775","src/api/into_bits/v512.rs":"e25afa1fbf088a5d58e7d75d197b6cd4c56637ea28542ba18e46a451f29d04e7","src/api/into_bits/v64.rs":"d6238022ccff7b92e55b3f6017fc269acb6f36330a6d7e8fb389853a0f1b6478","src/api/math.rs":"8b2a2fc651917a850539f993aa0b9e5bf4da67b11685285b8de8cdca311719ec","src/api/math/float.rs":"61d2794d68262a1090ae473bd30793b5f65cf732f32a6694a3af2ce5d9225616","src/api/math/float/abs.rs":"5b6b2701e2e11135b7ce58a05052ea8120e10e4702c95d046b9d21b827b26bf8","src/api/math/float/consts.rs":"6302c9261da4291d144d5bb53493cdd073498feb40955fb6860ea3c4d06c978a","src/api/math/float/cos.rs":"4c2dd7173728ef189314f1576c9486e03be21b7da98843b2f9011282a7979e31","src/api/math/float/exp.rs":"7c6d5f1e304f498a01cfa23b92380c815d7da0ad94eae3483783bc377d287eef","src/api/math/float/ln.rs":"54c7583f3df793b39ff57534fade27b41bb992439e5dc178252f5ca3190a3e54","src/api/math/float/mul_add.rs":"62cac77660d20159276d4c9ef066eb90c81cbddb808e8e157182c607625ad2eb","src/api/math/float/mul_adde.rs":"bae056ee9f3a70df39ec3c3b2f6437c65303888a7b843ef1a5bcf1f5aca0e602","src/api/math/float/powf.rs":"9ddb938984b36d39d82a82f862f80df8f7fb013f1d222d45698d41d88472f568","src/api/math/float/recpre.rs":"589225794ff1dbf31158dff660e6d4509ecc8befbb57c633900dea5ac0b840d6","src/api/math/float/rsqrte.rs":"a32abdcc318d7ccc8448231f54d75b884b7cbeb03a7d595713ab6243036f4dbf","src/api/math/float/sin.rs":"cbd3622b7df74f19691743001c8cf747a201f8977ad90542fee915f37dcd1e49","src/api/math/float/sqrt.rs":"0c66d5d63fb08e4d99c6b82a8828e41173aff1ac9fa1a2764a11fac217ccf2ac","src/api/math/float/sqrte.rs":"731e1c9f321b662accdd27dacb3aac2e8043b7aecb2f2161dde733bd9f025362","src/api/minimal.rs":"1f22bcc528555444e76de569ec0ae2029b9ae9d04805efeafa93369c8098036b","src/api/minimal/iuf.rs":"819cff26d3e196f807645bcc1d79eb27d9f175edb89910f2274d52a1e913cd11","src/api/minimal/mask.rs":"0cae10ae1fc65f5070e686c0c79bfba27b86b33d6c399367bd4848fb367dcec4","src/api/minimal/ptr.rs":"f65ebf21866a863485344432d9a7a9b7418f7fad5fdf841a4e2fa56ec0766ad0","src/api/ops.rs":"3e273b277a0f3019d42c3c59ca94a5afd4885d5ae6d2182e5089bbeec9de42ee","src/api/ops/scalar_arithmetic.rs":"d2d5ad897a59dd0787544f927e0e7ca4072c3e58b0f4a2324083312b0d5a21d7","src/api/ops/scalar_bitwise.rs":"482204e459ca6be79568e1c9f70adbe2d2151412ddf122fb2161be8ebb51c40c","src/api/ops/scalar_mask_bitwise.rs":"c250f52042e37b22d57256c80d4604104cfd2fbe2a2e127c676267270ca5d350","src/api/ops/scalar_shifts.rs":"c4773d435c3f9da4454327e6fbb2b5b41a1c0ebb1cca7372e69dc7a344a1b6e4","src/api/ops/vector_arithmetic.rs":"ddca15d09ddeef502c2ed66117a62300ca65d87e959e8b622d767bdf1c307910","src/api/ops/vector_bitwise.rs":"b3968f7005b649edcc22a54e2379b14d5ee19045f2e784029805781ae043b5ee","src/api/ops/vector_float_min_max.rs":"76bf8cb607e2c442923c1da1061a6b80d742d607408033c2a3761161114cf2a0","src/api/ops/vector_int_min_max.rs":"a378789c6ff9b32a51fbd0a97ffd36ed102cd1fe6a067d2b02017c1df342def6","src/api/ops/vector_mask_bitwise.rs":"5052d18517d765415d40327e6e8e55a312daaca0a5e2aec959bfa54b1675f9c8","src/api/ops/vector_neg.rs":"5c62f6b0221983cdbd23cd0a3af3672e6ba1255f0dfe8b19aae6fbd6503e231b","src/api/ops/vector_rotates.rs":"ee319eaaa449dc50ea8ef05b89d38519c6faa6753dfdce432ea7bb8520e4e8e7","src/api/ops/vector_shifts.rs":"e510be14127c0ffd58a2573a39701da3557d66bedec09837ac8bbd44d579da00","src/api/ptr.rs":"8a793251bed6130dcfb2f1519ceaa18b751bbb15875928d0fb6deb5a5e07523a","src/api/ptr/gather_scatter.rs":"3d614f9d5b4ca201a9f7e46af4405e1d2c28ecee1620297c23b52e37b92cc0ea","src/api/reductions.rs":"ae5baca81352ecd44526d6c30c0a1feeda475ec73ddd3c3ec6b14e944e5448ee","src/api/reductions/bitwise.rs":"8bf910ae226188bd15fc7e125f058cd2566b6186fcd0cd8fd020f352c39ce139","src/api/reductions/float_arithmetic.rs":"47a5679896db2cbb56c31372fe42143da015b6beae7db5d2f3a0309ddf427ae1","src/api/reductions/integer_arithmetic.rs":"c2df3cf7493cca4174f2c65aea422a3d20d8a23af03f8d57cef72c19fee8f20d","src/api/reductions/mask.rs":"db83327a950e33a317f37fd33ca4e20c347fb415975ec024f3e23da8509425af","src/api/reductions/min_max.rs":"6af8c9aa45c69961b1b6fc205395f4767d4421869fb105fb3d563c5605fc13cd","src/api/select.rs":"6b07e7e8026df561f7307221a896f0fbb272536f41b9109040ac094c24c69331","src/api/shuffle.rs":"26458aec2557bfab41b7765f72aefbff3a7ee08cdc689981a81f133f58ee368b","src/api/shuffle1_dyn.rs":"bfea5a91905b31444e9ef7ca6eddb7a9606b7e22d3f71bb842eb2795a0346620","src/api/slice.rs":"ee87484e8af329547b9a5d4f2a69e8bed6ea10bbd96270d706083843d4eea2ac","src/api/slice/from_slice.rs":"9b6f01ace2d12ef45c84608bb7aad3a122e2cc319b2d99170fc332a568b8de63","src/api/slice/write_to_slice.rs":"244b6bd6ccffa6e5a195f8b1abc66d94251b6d16b2ec3fe4d76d32caec68261e","src/api/swap_bytes.rs":"4a6792a2e49a77475e1b237592b4b2804dbddb79c474331acd0dd71b36934259","src/codegen.rs":"a29d38fa0a85eaf787fb49989e625bf64effd5f39c126fbb2a24be206d2a3917","src/codegen/bit_manip.rs":"9991570a21ca98134b08b5c5935e2c259cea39c82d9d1529f52c561a84fec642","src/codegen/llvm.rs":"5bc6751293f9f184cf23d5df448c7d58b58b799e41c7a91f8ca41a5ba56e64ec","src/codegen/math.rs":"35f96e37a78fcf0cdb02146b7f27a45108fe06a37fc2a54d8851ce131a326178","src/codegen/math/float.rs":"dd86c0449e576c83b719700962ac017c332987fac08d91f2b7a2b1b883598170","src/codegen/math/float/abs.rs":"f56e2b4b8055ea861c1f5cbc6b6e1d8e7e5af163b62c13574ddee4e09513bfbc","src/codegen/math/float/cos.rs":"ef3b511a24d23045b310315e80348a9b7fedb576fc2de52d74290616a0abeb2a","src/codegen/math/float/cos_pi.rs":"4e7631a5d73dac21531e09ef1802d1180f8997509c2c8fa9f67f322194263a97","src/codegen/math/float/exp.rs":"61b691598c41b5622f24e4320c1bdd08701e612a516438bdddcc728fc3405c8c","src/codegen/math/float/ln.rs":"46b718b1ba8c9d99e1ad40f53d20dfde08a3063ca7bd2a9fdd6698e060da687e","src/codegen/math/float/macros.rs":"fc9924869ed85e4795983af228cacf23158f4f35919adce16c920ad4a3f0a009","src/codegen/math/float/mul_add.rs":"a37bf764345d4b1714f97e83897b7cf0855fc2811704bcbc0012db91825339e1","src/codegen/math/float/mul_adde.rs":"9aa6ed39825e61edb2522e002c59c9392d7c655c01af1cf8380ba22c8ddf69cd","src/codegen/math/float/powf.rs":"642346e982bc4c39203de0864d2149c4179cd7b21cf67a2951687932b4675872","src/codegen/math/float/sin.rs":"9d68164c90cdca6a85155040cdac42e27342ebe0b925273ef1593df721af4258","src/codegen/math/float/sin_cos_pi.rs":"e0c661d1d894fd4018723b9f3143ab6771c9405e41907cb1a7b9f9b380a97523","src/codegen/math/float/sin_pi.rs":"9890347905b4d4a3c7341c3eb06406e46e60582bcf6960688bd727e5dadc6c57","src/codegen/math/float/sqrt.rs":"e3c60dcfb0c6d2fc62adabcc931b2d4040b83cab294dea36443fb4b89eb79e34","src/codegen/math/float/sqrte.rs":"f0f4ef9eb475ae41bcc7ec6a95ad744ba6b36925faa8b2c2814004396d196b63","src/codegen/pointer_sized_int.rs":"a70697169c28218b56fd2e8d5353f2e00671d1150d0c8cef77d613bdfacd84cb","src/codegen/reductions.rs":"645e2514746d01387ddd07f0aa4ffd8430cc9ab428d4fb13773ea319fa25dd95","src/codegen/reductions/mask.rs":"dd68fd8bc5335fa2d0405e59dd1e9fff16fdf7651aa8db670ca86145fd5b5dda","src/codegen/reductions/mask/aarch64.rs":"84b101c17cad1ede4eb6d38cada0ac7da239dba8cea3badd3829b967e558431f","src/codegen/reductions/mask/arm.rs":"aaa07129bd078ae7e677cf8b8e67ec9f30536606a0c7ed1baaa18fd1793bb218","src/codegen/reductions/mask/fallback.rs":"3eb9319d2c7cf19216b607b8459612c4e027b643cf11b036937d36896bf76786","src/codegen/reductions/mask/fallback_impl.rs":"76547f396e55ef403327c77c314cf8db8c7a5c9b9819bfb925abeacf130249e5","src/codegen/reductions/mask/x86.rs":"36dcd8af4ab99730a078ed113d3955f74eb1a2876e2e6d9f224e0ff462c216d1","src/codegen/reductions/mask/x86/avx.rs":"3a40868b38c86e35aefb96d7578de6322efe89d8135e0366359b54ddd06f861a","src/codegen/reductions/mask/x86/avx2.rs":"677aed3f056285285daa3adff8bc65e739630b4424defa6d9665e160f027507e","src/codegen/reductions/mask/x86/sse.rs":"8522f6ed03f6c32dd577d4298df477c08aeaaa38563706f29096e1911ed731f2","src/codegen/reductions/mask/x86/sse2.rs":"54ec56e49b0c6841eccb719e4f310d65fe767c04136b2ec20bd8b9d7d9897b9e","src/codegen/shuffle.rs":"1ec2930f4e1acc43ac30b518af298d466a79e9e75734a51c380b7810efd1a27f","src/codegen/shuffle1_dyn.rs":"3f13ca1597378758d05106bf5ff3715eee531f3cb6d88f48b9182bd6c9386b51","src/codegen/swap_bytes.rs":"ac659780deb0c52daa9c73afb4ba8645c9fa35350cd897b23e567860492553b7","src/codegen/v128.rs":"94226b31ec403d18d9d2fe06713f147c9c79e9b5f9105089088266313f843185","src/codegen/v16.rs":"ddec4ffb66b6f7aaffb9a1780c5ddba82557abd74f45073d335047e04cf74924","src/codegen/v256.rs":"6b63917f0444118d6b1595bff2045e59b97c4d24012bd575f69f1f0efc5a0241","src/codegen/v32.rs":"3477b3c5540aed86e61e2f5807dd31db947413cec9181c587d93ed6ec74f0eba","src/codegen/v512.rs":"5854f99d3aabc4cd42b28a20d9ce447756dc2ba024a409a69b6a8ae1f1842fc5","src/codegen/v64.rs":"e9e89caebfe63d10c0cbca61e4dfdba3b7e02ee0989170f80beed23237ddd950","src/codegen/vPtr.rs":"711c753a08d53a2879c4fb87a0762c46ce4e34c22f0ca88d2e4c557a0f679969","src/codegen/vSize.rs":"c89f5fdeb28ac4c8272ed1816fce03d9d95308cc32bb2533bd8b20cd5ac102ac","src/lib.rs":"5efc09cb3d164e4e38b71fd4999afbfd234f5080dc84ce22fda2fc15d381e8c7","src/masks.rs":"70fc0abe4c2907ce2a491c574e1cfb9f3423385da2e1a923a48c9c13f8ba6ed8","src/sealed.rs":"ae7fdeaf5d84cd7710ed730ca72ca7eaba93df6cb0acb183e5c0a7327acf197f","src/testing.rs":"1d3a7862ef625e235a5734ad7204e68d350f902c0695182b1f08a0552432416e","src/testing/macros.rs":"403bbc5ecb7c786fe36156df302d0c07a8122408dbb15f7474d7682224ba1106","src/testing/utils.rs":"41912a92266dfe884647fc035e4242fd746100df8e839808ae0397af3759a3c8","src/v128.rs":"16cf9a8e7156b899ee9b9cd3f2dba9d13ec63289bea8c3ee9ae2e43ad9510288","src/v16.rs":"cb6465cf1e00bf530183af1819b9fe3d7eec978f8765d5e85d9b58a39a4b4045","src/v256.rs":"fe235017da18c7f3c361831c60e3173ad304d8ea1e95d64ebebc79da2d708511","src/v32.rs":"145d347855bac59b2de6508f9e594654e6c330423af9edc0e2ac8f4d1abdf45e","src/v512.rs":"f372f277f3e62eb5c945bb1c460333fdb17b6974fcc876633788ff53bded9599","src/v64.rs":"0b8079881b71575e3414be0b7f8f7eaba65281ba6732f2b2f61f73e95b6f48f7","src/vPtr.rs":"8b3e433d487180bb4304ff71245ecad90f0010f43e139a72027b672abe58facc","src/vSize.rs":"eda5aa020706cbf94d15bada41a0c2a35fc8f3f37cb7c2cd6f34d201399a495e","tests/endianness.rs":"2783d727e8ff8789211e03120634cd3ad9f8972fc484012681b5b63cf89408a7"},"package":null}
+\ No newline at end of file
++{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"30a61a5ec53355fc1f3585e1690280308c2b7961701abc11e8389b235b647178","Cargo.toml":"2cab084b3d55d0b307788b02a6206a3ec39fee027535dc62d6421bce70e2e2c1","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"fa4dd64f66972217d35b7653338c9e2011ccd8f3008ae7c0103272d4287f9b1d","bors.toml":"dee881dc69b9b7834e4eba5d95c3ed5a416d4628815a167d6a22d4cb4fb064b8","build.rs":"a766fba121243a9b617432c592873801adb74c3a2f4a24d9d45859b8ce9357fc","ci/all.sh":"2ae6b2445b4db83833e40b37efd0016c6b9879ee988b9b3ef94db5439a3e1606","ci/android-install-ndk.sh":"0f1746108cc30bf9b9ba45bcde7b19fc1a8bdf5b0258035b4eb8dc69b75efac4","ci/android-install-sdk.sh":"3490432022c5c8f5a115c084f7a9aca1626f96c0c87ffb62019228c4346b47e4","ci/android-sysimage.sh":"ebf4e5daa1f0fe1b2092b79f0f3f161c4c4275cb744e52352c4d81ab451e4c5a","ci/benchmark.sh":"b61d19ef6b90deba8fb79dee74c8b062d94844676293da346da87bb78a9a49a4","ci/deploy_and_run_on_ios_simulator.rs":"ec8ecf82d92072676aa47f0d1a3d021b60a7ae3531153ef12d2ff4541fc294dc","ci/docker/aarch64-linux-android/Dockerfile":"ace2e7d33c87bc0f6d3962a4a3408c04557646f7f51ab99cfbf574906796b016","ci/docker/aarch64-unknown-linux-gnu/Dockerfile":"da88c0d50f16dc08448c7fdf1fa5ed2cbe576acf9e7dd85b5b818621b2a8c702","ci/docker/arm-linux-androideabi/Dockerfile":"370e55d3330a413a3ccf677b3afb3e0ef9018a5fab263faa97ae8ac017fc2286","ci/docker/arm-unknown-linux-gnueabi/Dockerfile":"bb5f8ae890707c128652290ffc544447643bf12037ddd73c6ad6989f848cb380","ci/docker/arm-unknown-linux-gnueabihf/Dockerfile":"1afaefcbc05b740859acd4e067bc92439be6bcbe8f2e9678474fb434bcd398d9","ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile":"8282ea707a94109beed47a57574755e2d58401735904a03f85fb64c578c53b4f","ci/docker/i586-unknown-linux-gnu/Dockerfile":"49792922269f371bd29da4727e9085101b27be67a6b97755d0196c63317f7abb","ci/docker/i686-unknown-linux-gnu/Dockerfile":"49792922269f371bd29da4727e9085101b27be67a6b97755d0196c63317f7abb","ci/docker/mips-unknown-linux-gnu/Dockerfile":"b2ebc25797612c4f8395fe9d407725156044955bfbcf442036b7f55b43a5f9da","ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile":"b0c1692ac65bc56dd30494b1993d8e929c48cc9c4b92029b7c7592af6d4f9220","ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile":"4e9249c179300138141d0b2b7401b11897f64aed69f541f078c1db4594df2827","ci/docker/mipsel-unknown-linux-musl/Dockerfile":"3164c52b0dcbb01afa78292b15b5c43503ccf0491cf6eb801ec2bf22ae274e52","ci/docker/powerpc-unknown-linux-gnu/Dockerfile":"786f799d0b56eb54d7b6c4b00e1aed4ce81776e14e44767e083c89d014b72004","ci/docker/powerpc64-unknown-linux-gnu/Dockerfile":"e8bc363837cd9c2d8b22402acb8c1c329efc11ba5d12170603d2fe2eae9da059","ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile":"47998d45b781d797b9e6085ebe898d90de0c952b54537a8db4e8d7503eb032d9","ci/docker/s390x-unknown-linux-gnu/Dockerfile":"93fb44df3d7fd31ead158570667c97b5076a05c3d968af4a84bc13819a8f2db8","ci/docker/sparc64-unknown-linux-gnu/Dockerfile":"da1c39a3ff1fe22e41395fa7c8934e90b4c1788e551b9aec6e38bfd94effc437","ci/docker/thumbv7neon-linux-androideabi/Dockerfile":"c2decd5591bd7a09378901bef629cd944acf052eb55e4f35b79eb9cb4d62246a","ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile":"51955a8bf3c4d440f47382af6f5426ebff94ab01a04da36175babda9a057740f","ci/docker/wasm32-unknown-unknown/Dockerfile":"5a022299f56730cf8c432a07391e95e199cfa36dc8da2a96c9d185c8de93e913","ci/docker/x86_64-linux-android/Dockerfile":"685040273cf350d5509e580ac451555efa19790c8723ca2af066adadc6880ad2","ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile":"44b6203d9290bfdc53d81219f0937e1110847a23dd982ec8c4de388354f01536","ci/docker/x86_64-unknown-linux-gnu/Dockerfile":"7f4e3ca5fa288ea70edb4d1f75309708cd30b192e2e4444e61c4d5b3b58f89cf","ci/dox.sh":"434e9611c52e389312d2b03564adf09429f10cc76fe66a8644adb104903b87b7","ci/linux-s390x.sh":"d6b732d7795b4ba131326aff893bca6228a7d2eb0e9402f135705413dbbe0dce","ci/linux-sparc64.sh":"c92966838b1ab7ad3b7a344833ee726aba6b647cf5952e56f0ad1ba420b13325","ci/lld-shim.rs":"3d7f71ec23a49e2b67f694a0168786f9a954dda15f5a138815d966643fd3fcc3","ci/max_line_width.sh":"0a1518bba4c9ecaa55694cb2e9930d0e19c265baabf73143f17f9cf285aaa5bb","ci/run-docker.sh":"92e036390ad9b0d16f109579df1b5ced2e72e9afea40c7d011400ebd3a2a90de","ci/run.sh":"41dd6a60efaaeae9661a01370cce98b631f78392859a0cf68c946c0a16edf5f7","ci/run_examples.sh":"d1a23c6c35374a0678ba5114b9b8fefd8be0a79e774872a8bf0898d1baca18d0","ci/runtest-android.rs":"145a8e9799a5223975061fe7e586ade5669ee4877a7d7a4cf6b4ab48e8e36c7c","ci/setup_benchmarks.sh":"fae3960023f6f3d1388cd2ad22fdbab4b075f1f29dd4292d7994a20783beb6cf","ci/test-runner-linux":"c8aa6025cff5306f4f31d0c61dc5f9d4dd5a1d189ab613ef8d4c367c694d9ccd","contributing.md":"2d2629310ad4d464c482bdbb5819f0d6ce223c576aeef2cdce6a1f6857085ea5","perf-guide/.gitignore":"fe82c7da551079d832cf74200b0b359b4df9828cb4a0416fa7384f07a2ae6a13","perf-guide/book.toml":"115a98284126c6b180178b44713314cc494f08a71662ee2ce15cf67f17a51064","perf-guide/src/SUMMARY.md":"3e03bffc991fdc2050f3d51842d72d9d21ea6abab56a3baf3b2d5973a78b89e1","perf-guide/src/ascii.css":"29afb08833b2fe2250f0412e1fa1161a2432a0820a14953c87124407417c741a","perf-guide/src/bound_checks.md":"5e4991ff58a183ef0cd9fdc1feb4cd12d083b44bdf87393bbb0927808ef3ce7d","perf-guide/src/float-math/approx.md":"8c09032fa2d795a0c5db1775826c850d28eb2627846d0965c60ee72de63735ad","perf-guide/src/float-math/fma.md":"311076ba4b741d604a82e74b83a8d7e8c318fcbd7f64c4392d1cf5af95c60243","perf-guide/src/float-math/fp.md":"04153e775ab6e4f0d7837bcc515230d327b04edfa34c84ce9c9e10ebaeef2be8","perf-guide/src/float-math/svml.md":"0798873b8eedaeda5fed62dc91645b57c20775a02d3cd74d8bd06958f1516506","perf-guide/src/introduction.md":"9f5a19e9e6751f25d2daad39891a0cc600974527ec4c8305843f9618910671bd","perf-guide/src/prof/linux.md":"447731eb5de7d69166728fdbc5ecb0c0c9db678ea493b45a592d67dd002184c0","perf-guide/src/prof/mca.md":"f56d54f3d20e7aa4d32052186e8237b03d65971eb5d112802b442570ff11d344","perf-guide/src/prof/profiling.md":"8a650c0fd6ede0964789bb6577557eeef1d8226a896788602ce61528e260e43c","perf-guide/src/target-feature/attribute.md":"615f88dca0a707b6c416fa605435dd6e1fb5361cc639429cbf68cd87624bd78b","perf-guide/src/target-feature/features.md":"17077760ff24c006b606dd21889c53d87228f4311f3ba3a574f9afdeacd86165","perf-guide/src/target-feature/inlining.md":"7ed1d7068d8173a00d84c16cfe5871cd68b9f04f8d0cca2d01ebc84957ebf2f6","perf-guide/src/target-feature/practice.md":"c4b371842e0086df178488fec97f20def8f0c62ee588bcd25fd948b9b1fa227e","perf-guide/src/target-feature/runtime.md":"835425f5ee597fb3e51d36e725a81ebee29f4561231d19563cd4da81dbb1cfcb","perf-guide/src/target-feature/rustflags.md":"01197acf6f0adec8db32b8591811f69cecb6555a2b05dc5d5ec27d0e3f7b065e","perf-guide/src/vert-hor-ops.md":"c6211c0ee91e60552ec592d89d9d957eedc21dee3cbd89e1ad6765ea06a27471","rustfmt.toml":"d99a43f3f8ef9e425cf01c333fba9f0051f888f5d87ab4e8f63c2f7d0fe6620f","src/api.rs":"bb1795e9657a8298d37d2349b45443f08e9e455399ad4b727018600728478c10","src/api/bit_manip.rs":"c47a4d0f7451f7e35d07715e4f39a472e07457fd456fdb726864a4f6887252a3","src/api/bitmask.rs":"6d2beefd62ee5d9c8eb060bee6abc641616bf828c99f82abf97b21bf004e894b","src/api/cast.rs":"03b94a3d316ac7b7be7068810044911e965e889a0ace7bae762749ca74a92747","src/api/cast/macros.rs":"b0a14d0c83ad2ebb7a275180f6d9e3f2bc312ba57a7d3d6c39fad4e0f20f9408","src/api/cast/v128.rs":"edd0994efac4379dff26e178423a52dbb3ffeb38b1fc97cae975d744c00b4fb6","src/api/cast/v16.rs":"96bd98c2d21b0663abe6c0ab33005b1fa693f3db7ee6795351391343863484da","src/api/cast/v256.rs":"8c31fe91f5e78ef737dfba6979cc1240210cb094a89d284fe459bf8a991ca24b","src/api/cast/v32.rs":"a99a79dd84d2a5e6adf9db98705675915bd03fd1287d489c7fe38e84d7e4a086","src/api/cast/v512.rs":"c0dd526f41ed7b8a71c3743d91267554ec0a0c75834ccc2e3ecb0ef3004af642","src/api/cast/v64.rs":"6572fdba2a1241a6cd666d3f0cce3306cd2cb7e5e236172e59d5d4351c8a88af","src/api/cmp.rs":"357c3a2a09c6d4611c32dd7fa95be2fae933d513e229026ec9b44451a77b884e","src/api/cmp/eq.rs":"60f70f355bae4cb5b17db53204cacc3890f70670611c17df638d4c04f7cc8075","src/api/cmp/ord.rs":"589f7234761c294fa5df8f525bc4acd5a47cdb602207d524a0d4e19804cd9695","src/api/cmp/partial_eq.rs":"902ccb8aa01fd5738b30ba0b712669c21d4801958907e03bad23432c7dba0198","src/api/cmp/partial_ord.rs":"9db0c37d7434cdfc62d8d66912e972fa3d8c115ab2af051a6f45e414bd3e4f1c","src/api/cmp/vertical.rs":"de3d62f38eba817299aa16f1e1939954c9a447e316509397465c2830852ba053","src/api/default.rs":"67bf21c134127d12a7028c8b88a57f0ceee8ccbd74976da8ca74eb9f16a174d5","src/api/fmt.rs":"67fb804bb86b6cd77cf8cd492b5733ce437071b66fe3297278b8a6552c325dda","src/api/fmt/binary.rs":"02b2b287f7404f8a983813cf70c87108c8da3835578b63ab303116885f609413","src/api/fmt/debug.rs":"56e1c3bdc092747344fffaafff9da7163ee7827857f6fb7cb1c9923eca4f6fa0","src/api/fmt/lower_hex.rs":"558fd592f7f485712fb051509cecc7174a21e6bf62e5ce64766e75afc97bb8e1","src/api/fmt/octal.rs":"3b2e70877a4f368c7704f8e254236c014c365c74d93371c1feb5f030e6c66422","src/api/fmt/upper_hex.rs":"2a442f666bc80e22d41f903f881238fe114dd49344c3ed69849250e853cafc5d","src/api/from.rs":"2e599d8329cb05eaf06224cc441355c4b7b51254fc19256619333be8c149d444","src/api/from/from_array.rs":"dd3fc64fb17d6184bb60343f8da26a05edf0e5f3c14caf55d49fa15e21d948dc","src/api/from/from_vector.rs":"9764371aa9e6005aace74dea14f59e5611a095b7cf42707940924749282c52f0","src/api/hash.rs":"5076ece87969592c876486f5b1ea8affbeaec379d1a14a30859e0aa5592019de","src/api/into_bits.rs":"1ee15923352786b9ab4a31fa506762297116b18cfdb8e72853abc8ad001651d2","src/api/into_bits/arch_specific.rs":"e7445021f3908326bfee758835e5fc5ad56aa1baa77fc1c58abe4350c66c670a","src/api/into_bits/macros.rs":"bb4fe99be2af6a21d805efab44c8e4e61a7b2adb42a65504a0cf26d13efdadcd","src/api/into_bits/v128.rs":"145a44922b09a5ca5b62d88a461d327d399a997a15db4b11d7b17e554a9fa4c0","src/api/into_bits/v16.rs":"f4f4f61ba88aa51b158ec56ca3dce234349aea0daf2b3029a14ab5125d1e41e5","src/api/into_bits/v256.rs":"8cea9c5d9809f11323cb7cdc53b83df593fd17caf926251e412ae9777bed547f","src/api/into_bits/v32.rs":"905ba683d342fa32f4202b80bb46530807bd0a5b588f6c2e8c9f475223c47775","src/api/into_bits/v512.rs":"e25afa1fbf088a5d58e7d75d197b6cd4c56637ea28542ba18e46a451f29d04e7","src/api/into_bits/v64.rs":"d6238022ccff7b92e55b3f6017fc269acb6f36330a6d7e8fb389853a0f1b6478","src/api/math.rs":"8b2a2fc651917a850539f993aa0b9e5bf4da67b11685285b8de8cdca311719ec","src/api/math/float.rs":"61d2794d68262a1090ae473bd30793b5f65cf732f32a6694a3af2ce5d9225616","src/api/math/float/abs.rs":"5b6b2701e2e11135b7ce58a05052ea8120e10e4702c95d046b9d21b827b26bf8","src/api/math/float/consts.rs":"6302c9261da4291d144d5bb53493cdd073498feb40955fb6860ea3c4d06c978a","src/api/math/float/cos.rs":"4c2dd7173728ef189314f1576c9486e03be21b7da98843b2f9011282a7979e31","src/api/math/float/exp.rs":"7c6d5f1e304f498a01cfa23b92380c815d7da0ad94eae3483783bc377d287eef","src/api/math/float/ln.rs":"54c7583f3df793b39ff57534fade27b41bb992439e5dc178252f5ca3190a3e54","src/api/math/float/mul_add.rs":"62cac77660d20159276d4c9ef066eb90c81cbddb808e8e157182c607625ad2eb","src/api/math/float/mul_adde.rs":"bae056ee9f3a70df39ec3c3b2f6437c65303888a7b843ef1a5bcf1f5aca0e602","src/api/math/float/powf.rs":"9ddb938984b36d39d82a82f862f80df8f7fb013f1d222d45698d41d88472f568","src/api/math/float/recpre.rs":"589225794ff1dbf31158dff660e6d4509ecc8befbb57c633900dea5ac0b840d6","src/api/math/float/rsqrte.rs":"a32abdcc318d7ccc8448231f54d75b884b7cbeb03a7d595713ab6243036f4dbf","src/api/math/float/sin.rs":"cbd3622b7df74f19691743001c8cf747a201f8977ad90542fee915f37dcd1e49","src/api/math/float/sqrt.rs":"0c66d5d63fb08e4d99c6b82a8828e41173aff1ac9fa1a2764a11fac217ccf2ac","src/api/math/float/sqrte.rs":"731e1c9f321b662accdd27dacb3aac2e8043b7aecb2f2161dde733bd9f025362","src/api/minimal.rs":"1f22bcc528555444e76de569ec0ae2029b9ae9d04805efeafa93369c8098036b","src/api/minimal/iuf.rs":"819cff26d3e196f807645bcc1d79eb27d9f175edb89910f2274d52a1e913cd11","src/api/minimal/mask.rs":"0cae10ae1fc65f5070e686c0c79bfba27b86b33d6c399367bd4848fb367dcec4","src/api/minimal/ptr.rs":"f65ebf21866a863485344432d9a7a9b7418f7fad5fdf841a4e2fa56ec0766ad0","src/api/ops.rs":"3e273b277a0f3019d42c3c59ca94a5afd4885d5ae6d2182e5089bbeec9de42ee","src/api/ops/scalar_arithmetic.rs":"d2d5ad897a59dd0787544f927e0e7ca4072c3e58b0f4a2324083312b0d5a21d7","src/api/ops/scalar_bitwise.rs":"482204e459ca6be79568e1c9f70adbe2d2151412ddf122fb2161be8ebb51c40c","src/api/ops/scalar_mask_bitwise.rs":"c250f52042e37b22d57256c80d4604104cfd2fbe2a2e127c676267270ca5d350","src/api/ops/scalar_shifts.rs":"c4773d435c3f9da4454327e6fbb2b5b41a1c0ebb1cca7372e69dc7a344a1b6e4","src/api/ops/vector_arithmetic.rs":"ddca15d09ddeef502c2ed66117a62300ca65d87e959e8b622d767bdf1c307910","src/api/ops/vector_bitwise.rs":"b3968f7005b649edcc22a54e2379b14d5ee19045f2e784029805781ae043b5ee","src/api/ops/vector_float_min_max.rs":"76bf8cb607e2c442923c1da1061a6b80d742d607408033c2a3761161114cf2a0","src/api/ops/vector_int_min_max.rs":"a378789c6ff9b32a51fbd0a97ffd36ed102cd1fe6a067d2b02017c1df342def6","src/api/ops/vector_mask_bitwise.rs":"5052d18517d765415d40327e6e8e55a312daaca0a5e2aec959bfa54b1675f9c8","src/api/ops/vector_neg.rs":"5c62f6b0221983cdbd23cd0a3af3672e6ba1255f0dfe8b19aae6fbd6503e231b","src/api/ops/vector_rotates.rs":"ee319eaaa449dc50ea8ef05b89d38519c6faa6753dfdce432ea7bb8520e4e8e7","src/api/ops/vector_shifts.rs":"e510be14127c0ffd58a2573a39701da3557d66bedec09837ac8bbd44d579da00","src/api/ptr.rs":"8a793251bed6130dcfb2f1519ceaa18b751bbb15875928d0fb6deb5a5e07523a","src/api/ptr/gather_scatter.rs":"3d614f9d5b4ca201a9f7e46af4405e1d2c28ecee1620297c23b52e37b92cc0ea","src/api/reductions.rs":"ae5baca81352ecd44526d6c30c0a1feeda475ec73ddd3c3ec6b14e944e5448ee","src/api/reductions/bitwise.rs":"8bf910ae226188bd15fc7e125f058cd2566b6186fcd0cd8fd020f352c39ce139","src/api/reductions/float_arithmetic.rs":"47a5679896db2cbb56c31372fe42143da015b6beae7db5d2f3a0309ddf427ae1","src/api/reductions/integer_arithmetic.rs":"c2df3cf7493cca4174f2c65aea422a3d20d8a23af03f8d57cef72c19fee8f20d","src/api/reductions/mask.rs":"db83327a950e33a317f37fd33ca4e20c347fb415975ec024f3e23da8509425af","src/api/reductions/min_max.rs":"6af8c9aa45c69961b1b6fc205395f4767d4421869fb105fb3d563c5605fc13cd","src/api/select.rs":"6b07e7e8026df561f7307221a896f0fbb272536f41b9109040ac094c24c69331","src/api/shuffle.rs":"26458aec2557bfab41b7765f72aefbff3a7ee08cdc689981a81f133f58ee368b","src/api/shuffle1_dyn.rs":"bfea5a91905b31444e9ef7ca6eddb7a9606b7e22d3f71bb842eb2795a0346620","src/api/slice.rs":"ee87484e8af329547b9a5d4f2a69e8bed6ea10bbd96270d706083843d4eea2ac","src/api/slice/from_slice.rs":"9b6f01ace2d12ef45c84608bb7aad3a122e2cc319b2d99170fc332a568b8de63","src/api/slice/write_to_slice.rs":"244b6bd6ccffa6e5a195f8b1abc66d94251b6d16b2ec3fe4d76d32caec68261e","src/api/swap_bytes.rs":"4a6792a2e49a77475e1b237592b4b2804dbddb79c474331acd0dd71b36934259","src/codegen.rs":"db4f232fb9f5728db310b87dc8c4733be48afacab1053798c06106bef9a42b05","src/codegen/bit_manip.rs":"525ea6ff7ad1e043b6f6136992166f1803ed5563b7f6fc292c1c40257d20e264","src/codegen/llvm.rs":"b4ccbc0bad90038f00fc3c158736462d01d0053df3afa00f9169e67d1a264444","src/codegen/math.rs":"dfcf02ad34e2fdfe22c3f1cc2822001cc895e65031b4d06e585e5047839febb7","src/codegen/math/float.rs":"2c1cbce155bc527ce34d472c0fef6bc3dadb79cd7a357dd7aa5b1ebeb1d77a13","src/codegen/math/float/abs.rs":"d5aaadcf540bdb9b4264dca6471a255fd7bf509e763bef0239c0144a68466fea","src/codegen/math/float/cos.rs":"17f28d2900c852dca221fa9c92a9cd5fe7fd2df8d427bbc60216c749b2be013d","src/codegen/math/float/cos_pi.rs":"dbaf9f443f9846a491d4ec52210a7b5835dd593b03366e3135b05c37d70f9d6c","src/codegen/math/float/exp.rs":"d300058a4bcc7ae7976f216f81902cd73a9e603ad63880dff3bbc866c27a9f37","src/codegen/math/float/ln.rs":"c851e211e43f8256093ba75b03ae0c307c9962ee66d94f09b4dd80068190cbdf","src/codegen/math/float/macros.rs":"fc9924869ed85e4795983af228cacf23158f4f35919adce16c920ad4a3f0a009","src/codegen/math/float/mul_add.rs":"041a5b69d5991d93ef795351b17560c10faf80b78fd26ad7df42a239b32cf9de","src/codegen/math/float/mul_adde.rs":"d71d5f0f3333b62a7439b823cb7adf5340ea1555ce820fb4a3f4cb922f73f5f5","src/codegen/math/float/powf.rs":"9742c3877f1a5509ca5c9492a40884b6579ba6dd11c26b7112e63f70666b395d","src/codegen/math/float/sin.rs":"0e9868d35531566509f3a01d85d5253045eb4afa8525d8407dcc1f5f33c56036","src/codegen/math/float/sin_cos_pi.rs":"8e6b6142d7dd240cdb36669722e82ab9810a2261e86e659f7d97a942ad8b1258","src/codegen/math/float/sin_pi.rs":"bb6d39db8f921e03a301fc5206ac1a61a97def8a2cb83b87ccf189f3fc48d548","src/codegen/math/float/sqrt.rs":"e6ebb0c5f428efad1f672b9a8fe4e58534dbf1ea5a8fe092ce5ce76b52fe89cb","src/codegen/math/float/sqrte.rs":"23acfaea38d0e081a6d9021c1094e813d0cfd12c58c1eca9662aade5e625d51c","src/codegen/pointer_sized_int.rs":"6ca13c214b6cf7e0929dbe18e96a16fc0bb7d8799608df29c4c8115490f99e01","src/codegen/reductions.rs":"8eb18ebac76985d2aa30262a2edd8cb004230b511a765d657525f677a585c12c","src/codegen/reductions/mask.rs":"e67f35a1f4d156a4894a2d6ea5a935b4d898cf70eefb2715f5c1cc165e776c11","src/codegen/reductions/mask/aarch64.rs":"84b101c17cad1ede4eb6d38cada0ac7da239dba8cea3badd3829b967e558431f","src/codegen/reductions/mask/arm.rs":"aaa07129bd078ae7e677cf8b8e67ec9f30536606a0c7ed1baaa18fd1793bb218","src/codegen/reductions/mask/fallback.rs":"3eb9319d2c7cf19216b607b8459612c4e027b643cf11b036937d36896bf76786","src/codegen/reductions/mask/fallback_impl.rs":"76547f396e55ef403327c77c314cf8db8c7a5c9b9819bfb925abeacf130249e5","src/codegen/reductions/mask/x86.rs":"36dcd8af4ab99730a078ed113d3955f74eb1a2876e2e6d9f224e0ff462c216d1","src/codegen/reductions/mask/x86/avx.rs":"3a40868b38c86e35aefb96d7578de6322efe89d8135e0366359b54ddd06f861a","src/codegen/reductions/mask/x86/avx2.rs":"677aed3f056285285daa3adff8bc65e739630b4424defa6d9665e160f027507e","src/codegen/reductions/mask/x86/sse.rs":"8522f6ed03f6c32dd577d4298df477c08aeaaa38563706f29096e1911ed731f2","src/codegen/reductions/mask/x86/sse2.rs":"54ec56e49b0c6841eccb719e4f310d65fe767c04136b2ec20bd8b9d7d9897b9e","src/codegen/shuffle.rs":"1ec2930f4e1acc43ac30b518af298d466a79e9e75734a51c380b7810efd1a27f","src/codegen/shuffle1_dyn.rs":"3f13ca1597378758d05106bf5ff3715eee531f3cb6d88f48b9182bd6c9386b51","src/codegen/swap_bytes.rs":"c67c86e91ca3fc77539e0efcea081a3c62548cccf503963ae408f2e86f4e6a21","src/codegen/v128.rs":"94226b31ec403d18d9d2fe06713f147c9c79e9b5f9105089088266313f843185","src/codegen/v16.rs":"ddec4ffb66b6f7aaffb9a1780c5ddba82557abd74f45073d335047e04cf74924","src/codegen/v256.rs":"6b63917f0444118d6b1595bff2045e59b97c4d24012bd575f69f1f0efc5a0241","src/codegen/v32.rs":"3477b3c5540aed86e61e2f5807dd31db947413cec9181c587d93ed6ec74f0eba","src/codegen/v512.rs":"5854f99d3aabc4cd42b28a20d9ce447756dc2ba024a409a69b6a8ae1f1842fc5","src/codegen/v64.rs":"e9e89caebfe63d10c0cbca61e4dfdba3b7e02ee0989170f80beed23237ddd950","src/codegen/vPtr.rs":"f0753b405cdc865bdf8e82c6505f299ea1f96136239ebbaf7f9ce93d310764b8","src/codegen/vSize.rs":"c89f5fdeb28ac4c8272ed1816fce03d9d95308cc32bb2533bd8b20cd5ac102ac","src/lib.rs":"b6f846d5d30cf6b035a2d18039aba7b2045cf89384733d643572bd68873ae064","src/masks.rs":"70fc0abe4c2907ce2a491c574e1cfb9f3423385da2e1a923a48c9c13f8ba6ed8","src/sealed.rs":"ae7fdeaf5d84cd7710ed730ca72ca7eaba93df6cb0acb183e5c0a7327acf197f","src/testing.rs":"896669c08d8c801448a4d2fadc9d633eda0fbe879d229997e2a182e31278e469","src/testing/macros.rs":"403bbc5ecb7c786fe36156df302d0c07a8122408dbb15f7474d7682224ba1106","src/testing/utils.rs":"41912a92266dfe884647fc035e4242fd746100df8e839808ae0397af3759a3c8","src/v128.rs":"16cf9a8e7156b899ee9b9cd3f2dba9d13ec63289bea8c3ee9ae2e43ad9510288","src/v16.rs":"cb6465cf1e00bf530183af1819b9fe3d7eec978f8765d5e85d9b58a39a4b4045","src/v256.rs":"fe235017da18c7f3c361831c60e3173ad304d8ea1e95d64ebebc79da2d708511","src/v32.rs":"145d347855bac59b2de6508f9e594654e6c330423af9edc0e2ac8f4d1abdf45e","src/v512.rs":"f372f277f3e62eb5c945bb1c460333fdb17b6974fcc876633788ff53bded9599","src/v64.rs":"0b8079881b71575e3414be0b7f8f7eaba65281ba6732f2b2f61f73e95b6f48f7","src/vPtr.rs":"8b3e433d487180bb4304ff71245ecad90f0010f43e139a72027b672abe58facc","src/vSize.rs":"eda5aa020706cbf94d15bada41a0c2a35fc8f3f37cb7c2cd6f34d201399a495e","tests/endianness.rs":"2783d727e8ff8789211e03120634cd3ad9f8972fc484012681b5b63cf89408a7"},"package":null}
+\ No newline at end of file
+diff --git a/third_party/rust/packed_simd_2/Cargo.toml b/third_party/rust/packed_simd_2/Cargo.toml
+--- a/third_party/rust/packed_simd_2/Cargo.toml
++++ b/third_party/rust/packed_simd_2/Cargo.toml
+@@ -1,11 +1,11 @@
+ [package]
+ name = "packed_simd_2"
+-version = "0.3.7"
++version = "0.3.8"
+ description = "Portable Packed SIMD vectors"
+ documentation = "https://docs.rs/crate/packed_simd/"
+ homepage = "https://github.com/rust-lang/packed_simd"
+ repository = "https://github.com/rust-lang/packed_simd"
+ keywords = ["simd", "vector", "portability"]
+ categories = ["hardware-support", "concurrency", "no-std", "data-structures"]
+ license = "MIT OR Apache-2.0"
+ build = "build.rs"
+@@ -18,16 +18,19 @@ codecov = { repository = "rust-lang/pack
+ is-it-maintained-issue-resolution = { repository = "rust-lang/packed_simd" }
+ is-it-maintained-open-issues = { repository = "rust-lang/packed_simd" }
+ maintenance = { status = "experimental" }
+
+ [dependencies]
+ cfg-if = "1.0.0"
+ core_arch = { version = "0.1.5", optional = true }
+
++[build-dependencies]
++rustc_version = "0.4"
++
+ [features]
+ default = []
+ into_bits = []
+ libcore_neon = []
+
+ [dev-dependencies]
+ paste = "^0.1.3"
+ arrayvec = { version = "^0.5", default-features = false }
+diff --git a/third_party/rust/packed_simd_2/README.md b/third_party/rust/packed_simd_2/README.md
+--- a/third_party/rust/packed_simd_2/README.md
++++ b/third_party/rust/packed_simd_2/README.md
+@@ -3,17 +3,17 @@
+ The original maintainer is out of contact, and the new maintainers (the Portable SIMD Project Group) do not have the appropriate crates.io permissions to issue updates.
+
+ We are aware that the version available on crates.io is currently broken, and will not build.
+
+ If you need to continue to use the crate, we have published a "next version" under an alternative name.
+
+ Adjust your `[dependencies]` section of `Cargo.toml` to be the following:
+ ```toml
+-packed_simd = { version = "0.3.6", package = "packed_simd_2" }
++packed_simd = { version = "0.3.8", package = "packed_simd_2" }
+ ```
+
+ # `Simd<[T; N]>`
+
+ ## Implementation of [Rust RFC #2366: `std::simd`][rfc2366]
+
+ [![Travis-CI Status]][travis] <!-- [![Appveyor Status]][appveyor] --> [![Latest Version]][crates.io] [![docs]][master_docs]
+
+diff --git a/third_party/rust/packed_simd_2/build.rs b/third_party/rust/packed_simd_2/build.rs
+--- a/third_party/rust/packed_simd_2/build.rs
++++ b/third_party/rust/packed_simd_2/build.rs
+@@ -1,6 +1,11 @@
++use rustc_version::{version, Version};
++
+ fn main() {
+ let target = std::env::var("TARGET").expect("TARGET environment variable not defined");
+ if target.contains("neon") {
+ println!("cargo:rustc-cfg=libcore_neon");
+ }
++ if version().unwrap() < Version::parse("1.61.0-alpha").unwrap() {
++ println!("cargo:rustc-cfg=aarch64_target_feature");
++ }
+ }
+diff --git a/third_party/rust/packed_simd_2/src/api.rs b/third_party/rust/packed_simd_2/src/api.rs
+--- a/third_party/rust/packed_simd_2/src/api.rs
++++ b/third_party/rust/packed_simd_2/src/api.rs
+@@ -1,13 +1,13 @@
+ //! Implements the Simd<[T; N]> APIs
+
+ #[macro_use]
+ mod bitmask;
+-crate mod cast;
++pub(crate) mod cast;
+ #[macro_use]
+ mod cmp;
+ #[macro_use]
+ mod default;
+ #[macro_use]
+ mod fmt;
+ #[macro_use]
+ mod from;
+@@ -32,17 +32,17 @@ mod shuffle1_dyn;
+ #[macro_use]
+ mod slice;
+ #[macro_use]
+ mod swap_bytes;
+ #[macro_use]
+ mod bit_manip;
+
+ #[cfg(feature = "into_bits")]
+-crate mod into_bits;
++pub(crate) mod into_bits;
+
+ macro_rules! impl_i {
+ ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident
+ | $ielem_ty:ident, $ibitmask_ty:ident | $test_tt:tt | $($elem_ids:ident),*
+ | From: $($from_vec_ty:ident),* | $(#[$doc:meta])*) => {
+ impl_minimal_iuf!([$elem_ty; $elem_n]: $tuple_id | $ielem_ty | $test_tt
+ | $($elem_ids),* | $(#[$doc])*);
+ impl_ops_vector_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
+diff --git a/third_party/rust/packed_simd_2/src/codegen.rs b/third_party/rust/packed_simd_2/src/codegen.rs
+--- a/third_party/rust/packed_simd_2/src/codegen.rs
++++ b/third_party/rust/packed_simd_2/src/codegen.rs
+@@ -1,24 +1,24 @@
+ //! Code-generation utilities
+
+-crate mod bit_manip;
+-crate mod llvm;
+-crate mod math;
+-crate mod reductions;
+-crate mod shuffle;
+-crate mod shuffle1_dyn;
+-crate mod swap_bytes;
++pub(crate) mod bit_manip;
++pub(crate) mod llvm;
++pub(crate) mod math;
++pub(crate) mod reductions;
++pub(crate) mod shuffle;
++pub(crate) mod shuffle1_dyn;
++pub(crate) mod swap_bytes;
+
+ macro_rules! impl_simd_array {
+ ([$elem_ty:ident; $elem_count:expr]:
+ $tuple_id:ident | $($elem_tys:ident),*) => {
+ #[derive(Copy, Clone)]
+ #[repr(simd)]
+- pub struct $tuple_id($(crate $elem_tys),*);
++ pub struct $tuple_id($(pub(crate) $elem_tys),*);
+ //^^^^^^^ leaked through SimdArray
+
+ impl crate::sealed::Seal for [$elem_ty; $elem_count] {}
+
+ impl crate::sealed::SimdArray for [$elem_ty; $elem_count] {
+ type Tuple = $tuple_id;
+ type T = $elem_ty;
+ const N: usize = $elem_count;
+@@ -30,33 +30,33 @@ macro_rules! impl_simd_array {
+ type Element = $elem_ty;
+ const LANES: usize = $elem_count;
+ type LanesType = [u32; $elem_count];
+ }
+
+ }
+ }
+
+-crate mod pointer_sized_int;
++pub(crate) mod pointer_sized_int;
+
+-crate mod v16;
+-crate use self::v16::*;
++pub(crate) mod v16;
++pub(crate) use self::v16::*;
+
+-crate mod v32;
+-crate use self::v32::*;
++pub(crate) mod v32;
++pub(crate) use self::v32::*;
+
+-crate mod v64;
+-crate use self::v64::*;
++pub(crate) mod v64;
++pub(crate) use self::v64::*;
+
+-crate mod v128;
+-crate use self::v128::*;
++pub(crate) mod v128;
++pub(crate) use self::v128::*;
+
+-crate mod v256;
+-crate use self::v256::*;
++pub(crate) mod v256;
++pub(crate) use self::v256::*;
+
+-crate mod v512;
+-crate use self::v512::*;
++pub(crate) mod v512;
++pub(crate) use self::v512::*;
+
+-crate mod vSize;
+-crate use self::vSize::*;
++pub(crate) mod vSize;
++pub(crate) use self::vSize::*;
+
+-crate mod vPtr;
+-crate use self::vPtr::*;
++pub(crate) mod vPtr;
++pub(crate) use self::vPtr::*;
+diff --git a/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs b/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs
+@@ -1,12 +1,12 @@
+ //! LLVM bit manipulation intrinsics.
+ #[rustfmt::skip]
+
+-use crate::*;
++pub(crate) use crate::*;
+
+ #[allow(improper_ctypes, dead_code)]
+ extern "C" {
+ #[link_name = "llvm.ctlz.v2i8"]
+ fn ctlz_u8x2(x: u8x2, is_zero_undef: bool) -> u8x2;
+ #[link_name = "llvm.ctlz.v4i8"]
+ fn ctlz_u8x4(x: u8x4, is_zero_undef: bool) -> u8x4;
+ #[link_name = "llvm.ctlz.v8i8"]
+@@ -142,17 +142,17 @@ extern "C" {
+ #[link_name = "llvm.ctpop.v1i128"]
+ fn ctpop_u128x1(x: u128x1) -> u128x1;
+ #[link_name = "llvm.ctpop.v2i128"]
+ fn ctpop_u128x2(x: u128x2) -> u128x2;
+ #[link_name = "llvm.ctpop.v4i128"]
+ fn ctpop_u128x4(x: u128x4) -> u128x4;
+ }
+
+-crate trait BitManip {
++pub(crate) trait BitManip {
+ fn ctpop(self) -> Self;
+ fn ctlz(self) -> Self;
+ fn cttz(self) -> Self;
+ }
+
+ macro_rules! impl_bit_manip {
+ (inner: $ty:ident, $scalar:ty, $uty:ident,
+ $ctpop:ident, $ctlz:ident, $cttz:ident) => {
+diff --git a/third_party/rust/packed_simd_2/src/codegen/llvm.rs b/third_party/rust/packed_simd_2/src/codegen/llvm.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/llvm.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/llvm.rs
+@@ -71,58 +71,58 @@ pub unsafe fn __shuffle_vector64<const I
+ where
+ T: Simd,
+ <T as Simd>::Element: Shuffle<[u32; 64], Output = U>,
+ {
+ simd_shuffle64(x, y, IDX)
+ }
+
+ extern "platform-intrinsic" {
+- crate fn simd_eq<T, U>(x: T, y: T) -> U;
+- crate fn simd_ne<T, U>(x: T, y: T) -> U;
+- crate fn simd_lt<T, U>(x: T, y: T) -> U;
+- crate fn simd_le<T, U>(x: T, y: T) -> U;
+- crate fn simd_gt<T, U>(x: T, y: T) -> U;
+- crate fn simd_ge<T, U>(x: T, y: T) -> U;
++ pub(crate) fn simd_eq<T, U>(x: T, y: T) -> U;
++ pub(crate) fn simd_ne<T, U>(x: T, y: T) -> U;
++ pub(crate) fn simd_lt<T, U>(x: T, y: T) -> U;
++ pub(crate) fn simd_le<T, U>(x: T, y: T) -> U;
++ pub(crate) fn simd_gt<T, U>(x: T, y: T) -> U;
++ pub(crate) fn simd_ge<T, U>(x: T, y: T) -> U;
+
+- crate fn simd_insert<T, U>(x: T, idx: u32, val: U) -> T;
+- crate fn simd_extract<T, U>(x: T, idx: u32) -> U;
++ pub(crate) fn simd_insert<T, U>(x: T, idx: u32, val: U) -> T;
++ pub(crate) fn simd_extract<T, U>(x: T, idx: u32) -> U;
+
+- crate fn simd_cast<T, U>(x: T) -> U;
++ pub(crate) fn simd_cast<T, U>(x: T) -> U;
+
+- crate fn simd_add<T>(x: T, y: T) -> T;
+- crate fn simd_sub<T>(x: T, y: T) -> T;
+- crate fn simd_mul<T>(x: T, y: T) -> T;
+- crate fn simd_div<T>(x: T, y: T) -> T;
+- crate fn simd_rem<T>(x: T, y: T) -> T;
+- crate fn simd_shl<T>(x: T, y: T) -> T;
+- crate fn simd_shr<T>(x: T, y: T) -> T;
+- crate fn simd_and<T>(x: T, y: T) -> T;
+- crate fn simd_or<T>(x: T, y: T) -> T;
+- crate fn simd_xor<T>(x: T, y: T) -> T;
++ pub(crate) fn simd_add<T>(x: T, y: T) -> T;
++ pub(crate) fn simd_sub<T>(x: T, y: T) -> T;
++ pub(crate) fn simd_mul<T>(x: T, y: T) -> T;
++ pub(crate) fn simd_div<T>(x: T, y: T) -> T;
++ pub(crate) fn simd_rem<T>(x: T, y: T) -> T;
++ pub(crate) fn simd_shl<T>(x: T, y: T) -> T;
++ pub(crate) fn simd_shr<T>(x: T, y: T) -> T;
++ pub(crate) fn simd_and<T>(x: T, y: T) -> T;
++ pub(crate) fn simd_or<T>(x: T, y: T) -> T;
++ pub(crate) fn simd_xor<T>(x: T, y: T) -> T;
+
+- crate fn simd_reduce_add_unordered<T, U>(x: T) -> U;
+- crate fn simd_reduce_mul_unordered<T, U>(x: T) -> U;
+- crate fn simd_reduce_add_ordered<T, U>(x: T, acc: U) -> U;
+- crate fn simd_reduce_mul_ordered<T, U>(x: T, acc: U) -> U;
+- crate fn simd_reduce_min<T, U>(x: T) -> U;
+- crate fn simd_reduce_max<T, U>(x: T) -> U;
+- crate fn simd_reduce_min_nanless<T, U>(x: T) -> U;
+- crate fn simd_reduce_max_nanless<T, U>(x: T) -> U;
+- crate fn simd_reduce_and<T, U>(x: T) -> U;
+- crate fn simd_reduce_or<T, U>(x: T) -> U;
+- crate fn simd_reduce_xor<T, U>(x: T) -> U;
+- crate fn simd_reduce_all<T>(x: T) -> bool;
+- crate fn simd_reduce_any<T>(x: T) -> bool;
++ pub(crate) fn simd_reduce_add_unordered<T, U>(x: T) -> U;
++ pub(crate) fn simd_reduce_mul_unordered<T, U>(x: T) -> U;
++ pub(crate) fn simd_reduce_add_ordered<T, U>(x: T, acc: U) -> U;
++ pub(crate) fn simd_reduce_mul_ordered<T, U>(x: T, acc: U) -> U;
++ pub(crate) fn simd_reduce_min<T, U>(x: T) -> U;
++ pub(crate) fn simd_reduce_max<T, U>(x: T) -> U;
++ pub(crate) fn simd_reduce_min_nanless<T, U>(x: T) -> U;
++ pub(crate) fn simd_reduce_max_nanless<T, U>(x: T) -> U;
++ pub(crate) fn simd_reduce_and<T, U>(x: T) -> U;
++ pub(crate) fn simd_reduce_or<T, U>(x: T) -> U;
++ pub(crate) fn simd_reduce_xor<T, U>(x: T) -> U;
++ pub(crate) fn simd_reduce_all<T>(x: T) -> bool;
++ pub(crate) fn simd_reduce_any<T>(x: T) -> bool;
+
+- crate fn simd_select<M, T>(m: M, a: T, b: T) -> T;
++ pub(crate) fn simd_select<M, T>(m: M, a: T, b: T) -> T;
+
+- crate fn simd_fmin<T>(a: T, b: T) -> T;
+- crate fn simd_fmax<T>(a: T, b: T) -> T;
++ pub(crate) fn simd_fmin<T>(a: T, b: T) -> T;
++ pub(crate) fn simd_fmax<T>(a: T, b: T) -> T;
+
+- crate fn simd_fsqrt<T>(a: T) -> T;
+- crate fn simd_fma<T>(a: T, b: T, c: T) -> T;
++ pub(crate) fn simd_fsqrt<T>(a: T) -> T;
++ pub(crate) fn simd_fma<T>(a: T, b: T, c: T) -> T;
+
+- crate fn simd_gather<T, P, M>(value: T, pointers: P, mask: M) -> T;
+- crate fn simd_scatter<T, P, M>(value: T, pointers: P, mask: M);
++ pub(crate) fn simd_gather<T, P, M>(value: T, pointers: P, mask: M) -> T;
++ pub(crate) fn simd_scatter<T, P, M>(value: T, pointers: P, mask: M);
+
+- crate fn simd_bitmask<T, U>(value: T) -> U;
++ pub(crate) fn simd_bitmask<T, U>(value: T) -> U;
+ }
+diff --git a/third_party/rust/packed_simd_2/src/codegen/math.rs b/third_party/rust/packed_simd_2/src/codegen/math.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/math.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/math.rs
+@@ -1,3 +1,3 @@
+ //! Vertical math operations
+
+-crate mod float;
++pub(crate) mod float;
+diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float.rs b/third_party/rust/packed_simd_2/src/codegen/math/float.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/math/float.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/math/float.rs
+@@ -1,18 +1,18 @@
+ //! Vertical floating-point math operations.
+ #![allow(clippy::useless_transmute)]
+
+ #[macro_use]
+-crate mod macros;
+-crate mod abs;
+-crate mod cos;
+-crate mod cos_pi;
+-crate mod exp;
+-crate mod ln;
+-crate mod mul_add;
+-crate mod mul_adde;
+-crate mod powf;
+-crate mod sin;
+-crate mod sin_cos_pi;
+-crate mod sin_pi;
+-crate mod sqrt;
+-crate mod sqrte;
++pub(crate) mod macros;
++pub(crate) mod abs;
++pub(crate) mod cos;
++pub(crate) mod cos_pi;
++pub(crate) mod exp;
++pub(crate) mod ln;
++pub(crate) mod mul_add;
++pub(crate) mod mul_adde;
++pub(crate) mod powf;
++pub(crate) mod sin;
++pub(crate) mod sin_cos_pi;
++pub(crate) mod sin_pi;
++pub(crate) mod sqrt;
++pub(crate) mod sqrte;
+diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs
+@@ -1,16 +1,16 @@
+ //! Vertical floating-point `fabs`
+ #![allow(unused)]
+
+ // FIXME 64-bit 1 elem vectors fabs
+
+ use crate::*;
+
+-crate trait Abs {
++pub(crate) trait Abs {
+ fn abs(self) -> Self;
+ }
+
+ #[allow(improper_ctypes)]
+ extern "C" {
+ #[link_name = "llvm.fabs.v2f32"]
+ fn fabs_v2f32(x: f32x2) -> f32x2;
+ #[link_name = "llvm.fabs.v4f32"]
+diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs
+@@ -1,16 +1,16 @@
+ //! Vertical floating-point `cos`
+ #![allow(unused)]
+
+ // FIXME 64-bit 1 elem vector cos
+
+ use crate::*;
+
+-crate trait Cos {
++pub(crate) trait Cos {
+ fn cos(self) -> Self;
+ }
+
+ #[allow(improper_ctypes)]
+ extern "C" {
+ #[link_name = "llvm.cos.v2f32"]
+ fn cos_v2f32(x: f32x2) -> f32x2;
+ #[link_name = "llvm.cos.v4f32"]
+diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs
+@@ -1,16 +1,16 @@
+ //! Vertical floating-point `cos`
+ #![allow(unused)]
+
+ // FIXME 64-bit 1 elem vectors cos_pi
+
+ use crate::*;
+
+-crate trait CosPi {
++pub(crate) trait CosPi {
+ fn cos_pi(self) -> Self;
+ }
+
+ gen_unary_impl_table!(CosPi, cos_pi);
+
+ macro_rules! impl_def {
+ ($vid:ident, $PI:path) => {
+ impl CosPi for $vid {
+diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs
+@@ -1,16 +1,16 @@
+ //! Vertical floating-point `exp`
+ #![allow(unused)]
+
+ // FIXME 64-bit expgle elem vectors misexpg
+
+ use crate::*;
+
+-crate trait Exp {
++pub(crate) trait Exp {
+ fn exp(self) -> Self;
+ }
+
+ #[allow(improper_ctypes)]
+ extern "C" {
+ #[link_name = "llvm.exp.v2f32"]
+ fn exp_v2f32(x: f32x2) -> f32x2;
+ #[link_name = "llvm.exp.v4f32"]
+diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs
+@@ -1,16 +1,16 @@
+ //! Vertical floating-point `ln`
+ #![allow(unused)]
+
+ // FIXME 64-bit lngle elem vectors mislng
+
+ use crate::*;
+
+-crate trait Ln {
++pub(crate) trait Ln {
+ fn ln(self) -> Self;
+ }
+
+ #[allow(improper_ctypes)]
+ extern "C" {
+ #[link_name = "llvm.log.v2f32"]
+ fn ln_v2f32(x: f32x2) -> f32x2;
+ #[link_name = "llvm.log.v4f32"]
+diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs
+@@ -1,15 +1,15 @@
+ //! Vertical floating-point `mul_add`
+ #![allow(unused)]
+ use crate::*;
+
+ // FIXME: 64-bit 1 element mul_add
+
+-crate trait MulAdd {
++pub(crate) trait MulAdd {
+ fn mul_add(self, y: Self, z: Self) -> Self;
+ }
+
+ #[cfg(not(target_arch = "s390x"))]
+ #[allow(improper_ctypes)]
+ extern "C" {
+ #[link_name = "llvm.fma.v2f32"]
+ fn fma_v2f32(x: f32x2, y: f32x2, z: f32x2) -> f32x2;
+diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs
+@@ -1,14 +1,14 @@
+ //! Approximation for floating-point `mul_add`
+ use crate::*;
+
+ // FIXME: 64-bit 1 element mul_adde
+
+-crate trait MulAddE {
++pub(crate) trait MulAddE {
+ fn mul_adde(self, y: Self, z: Self) -> Self;
+ }
+
+ #[cfg(not(target_arch = "s390x"))]
+ #[allow(improper_ctypes)]
+ extern "C" {
+ #[link_name = "llvm.fmuladd.v2f32"]
+ fn fmuladd_v2f32(x: f32x2, y: f32x2, z: f32x2) -> f32x2;
+diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs
+@@ -1,16 +1,16 @@
+ //! Vertical floating-point `powf`
+ #![allow(unused)]
+
+ // FIXME 64-bit powfgle elem vectors mispowfg
+
+ use crate::*;
+
+-crate trait Powf {
++pub(crate) trait Powf {
+ fn powf(self, x: Self) -> Self;
+ }
+
+ #[allow(improper_ctypes)]
+ extern "C" {
+ #[link_name = "llvm.pow.v2f32"]
+ fn powf_v2f32(x: f32x2, y: f32x2) -> f32x2;
+ #[link_name = "llvm.pow.v4f32"]
+diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs
+@@ -1,16 +1,16 @@
+ //! Vertical floating-point `sin`
+ #![allow(unused)]
+
+ // FIXME 64-bit 1 elem vectors sin
+
+ use crate::*;
+
+-crate trait Sin {
++pub(crate) trait Sin {
+ fn sin(self) -> Self;
+ }
+
+ #[allow(improper_ctypes)]
+ extern "C" {
+ #[link_name = "llvm.sin.v2f32"]
+ fn sin_v2f32(x: f32x2) -> f32x2;
+ #[link_name = "llvm.sin.v4f32"]
+diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs
+@@ -1,16 +1,16 @@
+ //! Vertical floating-point `sin_cos`
+ #![allow(unused)]
+
+ // FIXME 64-bit 1 elem vectors sin_cos
+
+ use crate::*;
+
+-crate trait SinCosPi: Sized {
++pub(crate) trait SinCosPi: Sized {
+ type Output;
+ fn sin_cos_pi(self) -> Self::Output;
+ }
+
+ macro_rules! impl_def {
+ ($vid:ident, $PI:path) => {
+ impl SinCosPi for $vid {
+ type Output = (Self, Self);
+diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs
+@@ -1,16 +1,16 @@
+ //! Vertical floating-point `sin_pi`
+ #![allow(unused)]
+
+ // FIXME 64-bit 1 elem vectors sin_pi
+
+ use crate::*;
+
+-crate trait SinPi {
++pub(crate) trait SinPi {
+ fn sin_pi(self) -> Self;
+ }
+
+ gen_unary_impl_table!(SinPi, sin_pi);
+
+ macro_rules! impl_def {
+ ($vid:ident, $PI:path) => {
+ impl SinPi for $vid {
+diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs
+@@ -1,16 +1,16 @@
+ //! Vertical floating-point `sqrt`
+ #![allow(unused)]
+
+ // FIXME 64-bit 1 elem vectors sqrt
+
+ use crate::*;
+
+-crate trait Sqrt {
++pub(crate) trait Sqrt {
+ fn sqrt(self) -> Self;
+ }
+
+ #[allow(improper_ctypes)]
+ extern "C" {
+ #[link_name = "llvm.sqrt.v2f32"]
+ fn sqrt_v2f32(x: f32x2) -> f32x2;
+ #[link_name = "llvm.sqrt.v4f32"]
+diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs
+@@ -1,17 +1,17 @@
+ //! Vertical floating-point `sqrt`
+ #![allow(unused)]
+
+ // FIXME 64-bit 1 elem vectors sqrte
+
+ use crate::llvm::simd_fsqrt;
+ use crate::*;
+
+-crate trait Sqrte {
++pub(crate) trait Sqrte {
+ fn sqrte(self) -> Self;
+ }
+
+ gen_unary_impl_table!(Sqrte, sqrte);
+
+ cfg_if! {
+ if #[cfg(all(target_arch = "x86_64", feature = "sleef-sys"))] {
+ use sleef_sys::*;
+diff --git a/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs b/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs
+@@ -1,28 +1,28 @@
+ //! Provides `isize` and `usize`
+
+ use cfg_if::cfg_if;
+
+ cfg_if! {
+ if #[cfg(target_pointer_width = "8")] {
+- crate type isize_ = i8;
+- crate type usize_ = u8;
++ pub(crate) type isize_ = i8;
++ pub(crate) type usize_ = u8;
+ } else if #[cfg(target_pointer_width = "16")] {
+- crate type isize_ = i16;
+- crate type usize_ = u16;
++ pub(crate) type isize_ = i16;
++ pub(crate) type usize_ = u16;
+ } else if #[cfg(target_pointer_width = "32")] {
+- crate type isize_ = i32;
+- crate type usize_ = u32;
++ pub(crate) type isize_ = i32;
++ pub(crate) type usize_ = u32;
+
+ } else if #[cfg(target_pointer_width = "64")] {
+- crate type isize_ = i64;
+- crate type usize_ = u64;
++ pub(crate) type isize_ = i64;
++ pub(crate) type usize_ = u64;
+ } else if #[cfg(target_pointer_width = "64")] {
+- crate type isize_ = i64;
+- crate type usize_ = u64;
++ pub(crate) type isize_ = i64;
++ pub(crate) type usize_ = u64;
+ } else if #[cfg(target_pointer_width = "128")] {
+- crate type isize_ = i128;
+- crate type usize_ = u128;
++ pub(crate) type isize_ = i128;
++ pub(crate) type usize_ = u128;
+ } else {
+ compile_error!("unsupported target_pointer_width");
+ }
+ }
+diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions.rs b/third_party/rust/packed_simd_2/src/codegen/reductions.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/reductions.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/reductions.rs
+@@ -1,1 +1,1 @@
+-crate mod mask;
++pub(crate) mod mask;
+diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs b/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs
+@@ -2,21 +2,21 @@
+ //!
+ //! Works around [LLVM bug 36702].
+ //!
+ //! [LLVM bug 36702]: https://bugs.llvm.org/show_bug.cgi?id=36702
+ #![allow(unused_macros)]
+
+ use crate::*;
+
+-crate trait All: crate::marker::Sized {
++pub(crate) trait All: crate::marker::Sized {
+ unsafe fn all(self) -> bool;
+ }
+
+-crate trait Any: crate::marker::Sized {
++pub(crate) trait Any: crate::marker::Sized {
+ unsafe fn any(self) -> bool;
+ }
+
+ #[macro_use]
+ mod fallback_impl;
+
+ cfg_if! {
+ if #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] {
+diff --git a/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs b/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs
+@@ -1,26 +1,26 @@
+ //! Horizontal swap bytes reductions.
+
+ // FIXME: investigate using `llvm.bswap`
+ // https://github.com/rust-lang-nursery/packed_simd/issues/19
+
+ use crate::*;
+
+-crate trait SwapBytes {
++pub(crate) trait SwapBytes {
+ fn swap_bytes(self) -> Self;
+ }
+
+ macro_rules! impl_swap_bytes {
+ (v16: $($id:ident,)+) => {
+ $(
+ impl SwapBytes for $id {
+ #[inline]
+ fn swap_bytes(self) -> Self {
+- unsafe { shuffle!(self, [1, 0]) }
++ shuffle!(self, [1, 0])
+ }
+ }
+ )+
+ };
+ (v32: $($id:ident,)+) => {
+ $(
+ impl SwapBytes for $id {
+ #[inline]
+diff --git a/third_party/rust/packed_simd_2/src/codegen/vPtr.rs b/third_party/rust/packed_simd_2/src/codegen/vPtr.rs
+--- a/third_party/rust/packed_simd_2/src/codegen/vPtr.rs
++++ b/third_party/rust/packed_simd_2/src/codegen/vPtr.rs
+@@ -1,16 +1,16 @@
+ //! Pointer vector types
+
+ macro_rules! impl_simd_ptr {
+ ([$ptr_ty:ty; $elem_count:expr]: $tuple_id:ident | $ty:ident
+ | $($tys:ty),*) => {
+ #[derive(Copy, Clone)]
+ #[repr(simd)]
+- pub struct $tuple_id<$ty>($(crate $tys),*);
++ pub struct $tuple_id<$ty>($(pub(crate) $tys),*);
+ //^^^^^^^ leaked through SimdArray
+
+ impl<$ty> crate::sealed::Seal for [$ptr_ty; $elem_count] {}
+ impl<$ty> crate::sealed::SimdArray for [$ptr_ty; $elem_count] {
+ type Tuple = $tuple_id<$ptr_ty>;
+ type T = $ptr_ty;
+ const N: usize = $elem_count;
+ type NT = [u32; $elem_count];
+diff --git a/third_party/rust/packed_simd_2/src/lib.rs b/third_party/rust/packed_simd_2/src/lib.rs
+--- a/third_party/rust/packed_simd_2/src/lib.rs
++++ b/third_party/rust/packed_simd_2/src/lib.rs
+@@ -212,24 +212,23 @@
+ //! guide](https://rust-lang-nursery.github.io/packed_simd/perf-guide/)
+
+ #![feature(
+ adt_const_params,
+ repr_simd,
+ rustc_attrs,
+ platform_intrinsics,
+ stdsimd,
+- aarch64_target_feature,
+ arm_target_feature,
+ link_llvm_intrinsics,
+ core_intrinsics,
+ stmt_expr_attributes,
+- crate_visibility_modifier,
+ custom_inner_attributes,
+ )]
++#![cfg_attr(aarch64_target_feature, feature(aarch64_target_feature))]
+ #![allow(non_camel_case_types, non_snake_case,
+ // FIXME: these types are unsound in C FFI already
+ // See https://github.com/rust-lang/rust/issues/53346
+ improper_ctypes_definitions,
+ incomplete_features,
+ clippy::cast_possible_truncation,
+ clippy::cast_lossless,
+ clippy::cast_possible_wrap,
+@@ -339,11 +338,11 @@ pub use self::api::into_bits::*;
+
+ // Re-export the shuffle intrinsics required by the `shuffle!` macro.
+ #[doc(hidden)]
+ pub use self::codegen::llvm::{
+ __shuffle_vector16, __shuffle_vector2, __shuffle_vector32, __shuffle_vector4, __shuffle_vector64,
+ __shuffle_vector8,
+ };
+
+-crate mod llvm {
+- crate use crate::codegen::llvm::*;
++pub(crate) mod llvm {
++ pub(crate) use crate::codegen::llvm::*;
+ }
+diff --git a/third_party/rust/packed_simd_2/src/testing.rs b/third_party/rust/packed_simd_2/src/testing.rs
+--- a/third_party/rust/packed_simd_2/src/testing.rs
++++ b/third_party/rust/packed_simd_2/src/testing.rs
+@@ -1,8 +1,8 @@
+ //! Testing macros and other utilities.
+
+ #[macro_use]
+ mod macros;
+
+ #[cfg(test)]
+ #[macro_use]
+-crate mod utils;
++pub(crate) mod utils;
+
diff --git a/thunderbird/rustc_version-0.4.0.patch b/thunderbird/rustc_version-0.4.0.patch
new file mode 100644
index 000000000..b0e95daaf
--- /dev/null
+++ b/thunderbird/rustc_version-0.4.0.patch
@@ -0,0 +1,8593 @@
+
+# HG changeset patch
+# User Mike Hommey <mh+mozilla(a)glandium.org>
+# Date 1654596092 0
+# Node ID f52e2ad948e88e2c4ce83599d379aa4a1e57334e
+# Parent 969171da8cc09d4eb7c070b0ecf33bc5cc504537
+Bug 1772048 - Update rustc_version and semver crates. r=emilio,webdriver-reviewers,kinetik,whimboo
+
+semver 1.0 doesn't and won't support Clone on semver::Error[1], so we
+convert the mozversion error type to store the string version of the
+error, which is an incompatible change requiring a version bump on the
+crate.
+
+1. https://github.com/dtolnay/semver/pull/280
+
+Differential Revision: https://phabricator.services.mozilla.com/D147825
+
+diff --git a/.cargo/config.in b/.cargo/config.in
+--- a/.cargo/config.in
++++ b/.cargo/config.in
+@@ -25,17 +25,17 @@ rev = "3bfc47d9a571d0842676043ba60716318
+ [source."https://github.com/mozilla/midir.git"]
+ git = "https://github.com/mozilla/midir.git"
+ replace-with = "vendored-sources"
+ rev = "4c11f0ffb5d6a10de4aff40a7b81218b33b94e6f"
+
+ [source."https://github.com/mozilla/cubeb-pulse-rs"]
+ git = "https://github.com/mozilla/cubeb-pulse-rs"
+ replace-with = "vendored-sources"
+-rev = "df4dc0288b07b865440f4c7e41ca49ca9ccffc63"
++rev = "1f1fe1e08e01a9a534ec7f079702a583a0899ce7"
+
+ [source."https://github.com/mozilla/cubeb-coreaudio-rs"]
+ git = "https://github.com/mozilla/cubeb-coreaudio-rs"
+ replace-with = "vendored-sources"
+ rev = "44eca95823bb57e964cf7b6d9791ed2ccb4b2108"
+
+ [source."https://github.com/mozilla/audioipc"]
+ git = "https://github.com/mozilla/audioipc"
+diff --git a/Cargo.lock b/Cargo.lock
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -1157,17 +1157,17 @@ dependencies = [
+ "mach",
+ "ringbuf",
+ "triple_buffer",
+ ]
+
+ [[package]]
+ name = "cubeb-pulse"
+ version = "0.4.0"
+-source = "git+https://github.com/mozilla/cubeb-pulse-rs?rev=df4dc0288b07b865440f4c7e4…"
++source = "git+https://github.com/mozilla/cubeb-pulse-rs?rev=1f1fe1e08e01a9a534ec7f079…"
+ dependencies = [
+ "cubeb-backend",
+ "pulse",
+ "pulse-ffi",
+ "ringbuf",
+ "semver",
+ ]
+
+@@ -3399,17 +3399,17 @@ dependencies = [
+ "nsstring",
+ "url",
+ "uuid",
+ "xpcom",
+ ]
+
+ [[package]]
+ name = "mozversion"
+-version = "0.4.3"
++version = "0.5.0-alpha"
+ dependencies = [
+ "regex",
+ "rust-ini",
+ "semver",
+ ]
+
+ [[package]]
+ name = "mozwer_s"
+@@ -4122,26 +4122,26 @@ dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ ]
+
+ [[package]]
+ name = "pulse"
+ version = "0.3.0"
+-source = "git+https://github.com/mozilla/cubeb-pulse-rs?rev=df4dc0288b07b865440f4c7e4…"
++source = "git+https://github.com/mozilla/cubeb-pulse-rs?rev=1f1fe1e08e01a9a534ec7f079…"
+ dependencies = [
+ "bitflags",
+ "pulse-ffi",
+ ]
+
+ [[package]]
+ name = "pulse-ffi"
+ version = "0.1.0"
+-source = "git+https://github.com/mozilla/cubeb-pulse-rs?rev=df4dc0288b07b865440f4c7e4…"
++source = "git+https://github.com/mozilla/cubeb-pulse-rs?rev=1f1fe1e08e01a9a534ec7f079…"
+ dependencies = [
+ "libc",
+ ]
+
+ [[package]]
+ name = "qcms"
+ version = "0.2.0"
+ dependencies = [
+@@ -4456,19 +4456,19 @@ checksum = "7ef03e0a2b150c7a90d01faf6254
+ [[package]]
+ name = "rustc-hash"
+ version = "1.1.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+ [[package]]
+ name = "rustc_version"
+-version = "0.2.3"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
++version = "0.4.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+ dependencies = [
+ "semver",
+ ]
+
+ [[package]]
+ name = "ryu"
+ version = "1.0.10"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+@@ -4544,28 +4544,19 @@ dependencies = [
+ [[package]]
+ name = "self_cell"
+ version = "0.10.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "1ef965a420fe14fdac7dd018862966a4c14094f900e1650bbc71ddd7d580c8af"
+
+ [[package]]
+ name = "semver"
+-version = "0.9.0"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+-dependencies = [
+- "semver-parser",
+-]
+-
+-[[package]]
+-name = "semver-parser"
+-version = "0.7.0"
+-source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
++version = "1.0.9"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8cb243bdfdb5936c8dc3c45762a19d12ab4550cdc753bc247637d4ec35a040fd"
+
+ [[package]]
+ name = "serde"
+ version = "1.0.136"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
+ dependencies = [
+ "serde_derive",
+diff --git a/gfx/qcms/Cargo.toml b/gfx/qcms/Cargo.toml
+--- a/gfx/qcms/Cargo.toml
++++ b/gfx/qcms/Cargo.toml
+@@ -17,9 +17,9 @@ c_bindings = ["libc"]
+ neon = []
+ iccv4-enabled = []
+ cmyk = []
+
+ [dependencies]
+ libc = {version = "0.2", optional = true }
+
+ [build-dependencies]
+-rustc_version = "0.2"
++rustc_version = "0.4"
+diff --git a/mozglue/static/rust/Cargo.toml b/mozglue/static/rust/Cargo.toml
+--- a/mozglue/static/rust/Cargo.toml
++++ b/mozglue/static/rust/Cargo.toml
+@@ -8,12 +8,12 @@ license = "MPL"
+ path = "lib.rs"
+
+ [dependencies]
+ arrayvec = "0.5"
+
+ [build-dependencies]
+ mozbuild = "0.1"
+ cc = "1"
+-rustc_version = "0.2"
++rustc_version = "0.4"
+
+ [features]
+ moz_memory = []
+diff --git a/testing/geckodriver/Cargo.toml b/testing/geckodriver/Cargo.toml
+--- a/testing/geckodriver/Cargo.toml
++++ b/testing/geckodriver/Cargo.toml
+@@ -15,17 +15,17 @@ chrono = "0.4.6"
+ clap = { version = "3.1", default-features = false, features = ["cargo", "std", "suggestions", "wrap_help"] }
+ hyper = "0.14"
+ lazy_static = "1.0"
+ log = { version = "0.4", features = ["std"] }
+ marionette = { path = "./marionette", version="0.2.0" }
+ mozdevice = { path = "../mozbase/rust/mozdevice", version="0.5.0" }
+ mozprofile = { path = "../mozbase/rust/mozprofile", version="0.8.0" }
+ mozrunner = { path = "../mozbase/rust/mozrunner", version="0.14.0" }
+-mozversion = { path = "../mozbase/rust/mozversion", version="0.4.3" }
++mozversion = { path = "../mozbase/rust/mozversion", version="0.5.0-alpha" }
+ regex = { version="1.0", default-features = false, features = ["perf", "std"] }
+ serde = "1.0"
+ serde_derive = "1.0"
+ serde_json = "1.0"
+ serde_yaml = "0.8"
+ tempfile = "3"
+ url = "2.0"
+ uuid = { version = "0.8", features = ["v4"] }
+diff --git a/testing/mozbase/rust/mozversion/Cargo.toml b/testing/mozbase/rust/mozversion/Cargo.toml
+--- a/testing/mozbase/rust/mozversion/Cargo.toml
++++ b/testing/mozbase/rust/mozversion/Cargo.toml
+@@ -1,14 +1,14 @@
+ [package]
+ name = "mozversion"
+-version = "0.4.3"
++version = "0.5.0-alpha"
+ authors = ["Mozilla"]
+ description = "Utility for accessing Firefox version metadata"
+ keywords = ["mozilla", "firefox"]
+ repository = "https://hg.mozilla.org/mozilla-central/file/tip/testing/mozbase/rust/mozver…"
+ license = "MPL-2.0"
+ edition = "2018"
+
+ [dependencies]
+ regex = { version = "1", default-features = false, features = ["perf", "std"] }
+ rust-ini = "0.10"
+-semver = "0.9"
++semver = "1.0"
+diff --git a/testing/mozbase/rust/mozversion/src/lib.rs b/testing/mozbase/rust/mozversion/src/lib.rs
+--- a/testing/mozbase/rust/mozversion/src/lib.rs
++++ b/testing/mozbase/rust/mozversion/src/lib.rs
+@@ -101,18 +101,18 @@ impl Version {
+ // The way the semver crate handles prereleases isn't what we want here
+ // This should be fixed in the long term by implementing our own comparison
+ // operators, but for now just act as if prerelease metadata was missing,
+ // otherwise it is almost impossible to use this with nightly
+ semver::Version {
+ major: self.major,
+ minor: self.minor,
+ patch: self.patch,
+- pre: vec![],
+- build: vec![],
++ pre: semver::Prerelease::EMPTY,
++ build: semver::BuildMetadata::EMPTY,
+ }
+ }
+
+ pub fn matches(&self, version_req: &str) -> VersionResult<bool> {
+ let req = semver::VersionReq::parse(version_req)?;
+ Ok(req.matches(&self.to_semver()))
+ }
+ }
+@@ -269,17 +269,17 @@ fn parse_binary_version(version_str: &st
+
+ #[derive(Clone, Debug)]
+ pub enum Error {
+ /// Error parsing a version string
+ VersionError(String),
+ /// Error reading application metadata
+ MetadataError(String),
+ /// Error processing a string as a semver comparator
+- SemVerError(semver::ReqParseError),
++ SemVerError(String),
+ }
+
+ impl Display for Error {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ match *self {
+ Error::VersionError(ref x) => {
+ "VersionError: ".fmt(f)?;
+ x.fmt(f)
+@@ -291,28 +291,25 @@ impl Display for Error {
+ Error::SemVerError(ref e) => {
+ "SemVerError: ".fmt(f)?;
+ e.fmt(f)
+ }
+ }
+ }
+ }
+
+-impl From<semver::ReqParseError> for Error {
+- fn from(err: semver::ReqParseError) -> Error {
+- Error::SemVerError(err)
++impl From<semver::Error> for Error {
++ fn from(err: semver::Error) -> Error {
++ Error::SemVerError(err.to_string())
+ }
+ }
+
+ impl error::Error for Error {
+ fn cause(&self) -> Option<&dyn error::Error> {
+- match *self {
+- Error::SemVerError(ref e) => Some(e),
+- Error::VersionError(_) | Error::MetadataError(_) => None,
+- }
++ None
+ }
+ }
+
+ pub type VersionResult<T> = Result<T, Error>;
+
+ #[cfg(target_os = "macos")]
+ mod platform {
+ use std::path::{Path, PathBuf};
+diff --git a/third_party/rust/cubeb-pulse/.cargo-checksum.json b/third_party/rust/cubeb-pulse/.cargo-checksum.json
+--- a/third_party/rust/cubeb-pulse/.cargo-checksum.json
++++ b/third_party/rust/cubeb-pulse/.cargo-checksum.json
+@@ -1,1 +1,1 @@
+-{"files":{".editorconfig":"bf047bd1da10cabb99eea666d1e57c321eba4716dccb3e4ed0e2c5fe3ca53858",".github/workflows/build.yml":"95d0d2542c04f0c932f58591b92c3051db5c95657bf5f24b6a6110f7b667568d","AUTHORS":"0e0ac930a68ce2f6b876126b195add177f0d3886facb9260f4d9b69f1988f0cc","Cargo.toml":"d8f84d114794b79a02c8d93724951a0b924f4815e446d666e66877c7a90d0446","LICENSE":"44c6b5ae5ec3fe2fbc608b00e6f4896f4d2d5c7e525fcbaa3eaa3cf2f3d5a983","README.md":"0079450bb4b013bac065ed1750851e461a3710ebad1f323817da1cb82db0bc4f","src/backend/context.rs":"839fbbd90e501c9e455e6b46729f8c3cc03b368b6b45d02c82399660b7cf8289","src/backend/cork_state.rs":"4a0f1afc7d9f333dac89218cc56d7d32fbffb487cd48c1c9a4e03d79cb3b5e28","src/backend/intern.rs":"11ca424e4eb77f8eb9fd5a6717d1e791facf9743156a8534f0016fcf64d57b0f","src/backend/mod.rs":"d5da05348bf1a7f65c85b14372964a49dc4849f0aee96c75e2c18b51fb03fcaf","src/backend/stream.rs":"525e1f6be1990deef3c42d34fc4e25947be642ce242514f8e3428737146cc755","src/capi.rs":"fa0fa020f0d0efe55aa0fc3596405e8407bbe2cbe6c7a558345304e6da87994e","src/lib.rs":"b41bbdc562cbfb130ed7c1e53fe69944774f515705341d8ce48a2f82c8c0c2c5"},"package":null}
+\ No newline at end of file
++{"files":{".editorconfig":"bf047bd1da10cabb99eea666d1e57c321eba4716dccb3e4ed0e2c5fe3ca53858",".github/workflows/build.yml":"95d0d2542c04f0c932f58591b92c3051db5c95657bf5f24b6a6110f7b667568d","AUTHORS":"0e0ac930a68ce2f6b876126b195add177f0d3886facb9260f4d9b69f1988f0cc","Cargo.toml":"13fe95ad27f37b8423958d78093ecff3ade9fffb28c5980604b624c2b617e5a7","LICENSE":"44c6b5ae5ec3fe2fbc608b00e6f4896f4d2d5c7e525fcbaa3eaa3cf2f3d5a983","README.md":"0079450bb4b013bac065ed1750851e461a3710ebad1f323817da1cb82db0bc4f","src/backend/context.rs":"839fbbd90e501c9e455e6b46729f8c3cc03b368b6b45d02c82399660b7cf8289","src/backend/cork_state.rs":"4a0f1afc7d9f333dac89218cc56d7d32fbffb487cd48c1c9a4e03d79cb3b5e28","src/backend/intern.rs":"11ca424e4eb77f8eb9fd5a6717d1e791facf9743156a8534f0016fcf64d57b0f","src/backend/mod.rs":"d5da05348bf1a7f65c85b14372964a49dc4849f0aee96c75e2c18b51fb03fcaf","src/backend/stream.rs":"e88a04ab7094b9df1bcdd07628369ec70ecb2062b91b0bd86f2642962814405c","src/capi.rs":"fa0fa020f0d0efe55aa0fc3596405e8407bbe2cbe6c7a558345304e6da87994e","src/lib.rs":"b41bbdc562cbfb130ed7c1e53fe69944774f515705341d8ce48a2f82c8c0c2c5"},"package":null}
+\ No newline at end of file
+diff --git a/third_party/rust/cubeb-pulse/Cargo.toml b/third_party/rust/cubeb-pulse/Cargo.toml
+--- a/third_party/rust/cubeb-pulse/Cargo.toml
++++ b/third_party/rust/cubeb-pulse/Cargo.toml
+@@ -10,10 +10,10 @@ pulse-dlopen = ["pulse-ffi/dlopen"]
+
+ [lib]
+ crate-type = ["staticlib", "rlib"]
+
+ [dependencies]
+ cubeb-backend = "0.10"
+ pulse-ffi = { path = "pulse-ffi" }
+ pulse = { path = "pulse-rs" }
+-semver = "^0.9"
++semver = "1.0"
+ ringbuf = "0.2"
+diff --git a/third_party/rust/cubeb-pulse/src/backend/stream.rs b/third_party/rust/cubeb-pulse/src/backend/stream.rs
+--- a/third_party/rust/cubeb-pulse/src/backend/stream.rs
++++ b/third_party/rust/cubeb-pulse/src/backend/stream.rs
+@@ -350,16 +350,25 @@ impl<'ctx> PulseStream<'ctx> {
+ ptr::null_mut(),
+ read_frames as c_long,
+ )
+ };
+
+ if got < 0 || got as usize != read_frames {
+ let _ = s.cancel_write();
+ stm.shutdown = true;
++ if got < 0 {
++ unsafe {
++ stm.state_callback.unwrap()(
++ stm as *mut _ as *mut _,
++ stm.user_ptr,
++ ffi::CUBEB_STATE_ERROR,
++ );
++ }
++ }
+ break;
+ }
+ }
+ }
+
+ if read_size > 0 {
+ let _ = s.drop();
+ }
+@@ -1064,16 +1073,23 @@ impl<'ctx> PulseStream<'ctx> {
+ read_ptr as *const _ as *mut _,
+ buffer,
+ (size / frame_size) as c_long,
+ ) as i64
+ };
+ if got < 0 {
+ let _ = stm.cancel_write();
+ self.shutdown = true;
++ unsafe {
++ self.state_callback.unwrap()(
++ self as *const _ as *mut _,
++ self.user_ptr,
++ ffi::CUBEB_STATE_ERROR,
++ );
++ }
+ return;
+ }
+
+ // If more iterations move offset of read buffer
+ if !input_data.is_null() {
+ let in_frame_size = self.input_sample_spec.frame_size();
+ read_offset += (size / frame_size) * in_frame_size;
+ }
+diff --git a/third_party/rust/rustc_version/.cargo-checksum.json b/third_party/rust/rustc_version/.cargo-checksum.json
+--- a/third_party/rust/rustc_version/.cargo-checksum.json
++++ b/third_party/rust/rustc_version/.cargo-checksum.json
+@@ -1,1 +1,1 @@
+-{"files":{"Cargo.toml":"80b9fb136c8c2945b4875b05b0f5a4b11e4722997e751f17d8d3f241d7c684db","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"c9a75f18b9ab2927829a208fc6aa2cf4e63b8420887ba29cdb265d6619ae82d5","README.md":"58bd14a1dfa1d828e6e99f35c3b7c2149d08e2d990d6ca93f92ab8ffb43275b7","src/errors.rs":"b28c2eeb1278fc3e8d68a64b177034faed67f6762335729d3a6d1e61be8fb034","src/lib.rs":"92a32673f77961724bc52b872781f06d22d166f06838c9582c5adae3c5214f51"},"package":"138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"}
+\ No newline at end of file
++{"files":{"Cargo.toml":"6a2e927f37b4897e75470e62face13eff0fe846c57f8fcfb98bcd5e0fe8ed0a2","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"c9a75f18b9ab2927829a208fc6aa2cf4e63b8420887ba29cdb265d6619ae82d5","README.md":"40f1138d4ddcfcfd0534429cea8dcbdcaf4a175aca1c26662f011f6e83d2fd7a","deny.toml":"22979f2da49546b27a5c892d5216bf74215987810a2d011b58870471883b9437","src/lib.rs":"bc18589948e3c04c3ffb491ffc3d4eccd8037c8e377d0bbae8aca2b21978b1de","tests/all.rs":"7b2969022feab85a948fafd331d9bb30d80357d01afaf7e0f723908e75f39e89"},"package":"bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"}
+\ No newline at end of file
+diff --git a/third_party/rust/rustc_version/Cargo.toml b/third_party/rust/rustc_version/Cargo.toml
+--- a/third_party/rust/rustc_version/Cargo.toml
++++ b/third_party/rust/rustc_version/Cargo.toml
+@@ -1,26 +1,27 @@
+ # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
+ #
+ # When uploading crates to the registry Cargo will automatically
+ # "normalize" Cargo.toml files for maximal compatibility
+ # with all versions of Cargo and also rewrite `path` dependencies
+-# to registry (e.g. crates.io) dependencies
++# to registry (e.g., crates.io) dependencies
+ #
+ # If you believe there's an error in this file please file an
+ # issue against the rust-lang/cargo repository. If you're
+ # editing this file be aware that the upstream Cargo.toml
+ # will likely look very different (and much more reasonable)
+
+ [package]
++edition = "2018"
+ name = "rustc_version"
+-version = "0.2.3"
+-authors = ["Marvin Löbel <loebel.marvin(a)gmail.com>"]
++version = "0.4.0"
++authors = ["Dirkjan Ochtman <dirkjan(a)ochtman.nl>", "Marvin Löbel <loebel.marvin(a)gmail.com>"]
+ description = "A library for querying the version of a installed rustc compiler"
+ documentation = "https://docs.rs/rustc_version/"
+ readme = "README.md"
+ keywords = ["version", "rustc"]
+ license = "MIT/Apache-2.0"
+ repository = "https://github.com/Kimundi/rustc-version-rs"
+ [dependencies.semver]
+-version = "0.9"
+-[badges.travis-ci]
+-repository = "Kimundi/rustc-version-rs"
++version = "1.0"
++[dev-dependencies.doc-comment]
++version = "0.3"
+diff --git a/third_party/rust/rustc_version/README.md b/third_party/rust/rustc_version/README.md
+--- a/third_party/rust/rustc_version/README.md
++++ b/third_party/rust/rustc_version/README.md
+@@ -1,40 +1,46 @@
+ rustc-version-rs
+-==============
++================
++
++[![Documentation](https://docs.rs/rustc_version/badge.svg)](https://docs.rs/rustc_version/)
++[![Crates.io](https://img.shields.io/crates/v/rustc_version.svg)](https://crates.io/crates/rustc_version)
++[![Build status](https://github.com/Kimundi/rustc-version-rs/workflows/CI/badge.svg)…
+
+ A library for querying the version of a `rustc` compiler.
+
+ This can be used by build scripts or other tools dealing with Rust sources
+-to make decisions based on the version of the compiler.
++to make decisions based on the version of the compiler. Current MSRV is 1.32.0.
+
+-[![Travis-CI Status](https://travis-ci.org/Kimundi/rustc-version-rs.png?branch=master)](…
++If this is of interest, also consider looking at these other crates:
++
++* [autocfg](https://crates.io/crates/autocfg/), which helps with feature detection instead of depending on compiler versions
++* [rustversion](https://github.com/dtolnay/rustversion) provides a procedural macro with no other dependencies
+
+ # Getting Started
+
+ [rustc-version-rs is available on crates.io](https://crates.io/crates/rustc_version).
+ It is recommended to look there for the newest released version, as well as links to the newest builds of the docs.
+
+ At the point of the last update of this README, the latest published version could be used like this:
+
+ Add the following dependency to your Cargo manifest...
+
+ ```toml
+ [build-dependencies]
+ rustc_version = "0.2"
+ ```
+
+-...and see the [docs](http://kimundi.github.io/rustc-version-rs/rustc_version/index.html) for how to use it.
++... and see the [docs](https://docs.rs/rustc_version) for how to use it.
+
+ # Example
+
+ ```rust
+ // This could be a cargo build script
+
+-extern crate rustc_version;
+ use rustc_version::{version, version_meta, Channel, Version};
+
+ fn main() {
+ // Assert we haven't travelled back in time
+ assert!(version().unwrap().major >= 1);
+
+ // Set cfg flags depending on release channel
+ match version_meta().unwrap().channel {
+diff --git a/third_party/rust/rustc_version/deny.toml b/third_party/rust/rustc_version/deny.toml
+new file mode 100644
+--- /dev/null
++++ b/third_party/rust/rustc_version/deny.toml
+@@ -0,0 +1,3 @@
++[licenses]
++allow-osi-fsf-free = "either"
++copyleft = "deny"
+diff --git a/third_party/rust/rustc_version/src/errors.rs b/third_party/rust/rustc_version/src/errors.rs
+deleted file mode 100644
+--- a/third_party/rust/rustc_version/src/errors.rs
++++ /dev/null
+@@ -1,79 +0,0 @@
+-use std::{self, error, fmt, io, str};
+-use semver::{self, Identifier};
+-
+-/// The error type for this crate.
+-#[derive(Debug)]
+-pub enum Error {
+- /// An error ocurrend when executing the `rustc` command.
+- CouldNotExecuteCommand(io::Error),
+- /// The output of `rustc -vV` was not valid utf-8.
+- Utf8Error(str::Utf8Error),
+- /// The output of `rustc -vV` was not in the expected format.
+- UnexpectedVersionFormat,
+- /// An error ocurred in parsing a `VersionReq`.
+- ReqParseError(semver::ReqParseError),
+- /// An error ocurred in parsing the semver.
+- SemVerError(semver::SemVerError),
+- /// The pre-release tag is unknown.
+- UnknownPreReleaseTag(Identifier),
+-}
+-use Error::*;
+-
+-impl fmt::Display for Error {
+- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- use std::error::Error;
+- match *self {
+- CouldNotExecuteCommand(ref e) => write!(f, "{}: {}", self.description(), e),
+- Utf8Error(_) => write!(f, "{}", self.description()),
+- UnexpectedVersionFormat => write!(f, "{}", self.description()),
+- ReqParseError(ref e) => write!(f, "{}: {}", self.description(), e),
+- SemVerError(ref e) => write!(f, "{}: {}", self.description(), e),
+- UnknownPreReleaseTag(ref i) => write!(f, "{}: {}", self.description(), i),
+- }
+- }
+-}
+-
+-impl error::Error for Error {
+- fn cause(&self) -> Option<&error::Error> {
+- match *self {
+- CouldNotExecuteCommand(ref e) => Some(e),
+- Utf8Error(ref e) => Some(e),
+- UnexpectedVersionFormat => None,
+- ReqParseError(ref e) => Some(e),
+- SemVerError(ref e) => Some(e),
+- UnknownPreReleaseTag(_) => None,
+- }
+- }
+-
+- fn description(&self) -> &str {
+- match *self {
+- CouldNotExecuteCommand(_) => "could not execute command",
+- Utf8Error(_) => "invalid UTF-8 output from `rustc -vV`",
+- UnexpectedVersionFormat => "unexpected `rustc -vV` format",
+- ReqParseError(_) => "error parsing version requirement",
+- SemVerError(_) => "error parsing version",
+- UnknownPreReleaseTag(_) => "unknown pre-release tag",
+- }
+- }
+-}
+-
+-macro_rules! impl_from {
+- ($($err_ty:ty => $variant:ident),* $(,)*) => {
+- $(
+- impl From<$err_ty> for Error {
+- fn from(e: $err_ty) -> Error {
+- Error::$variant(e)
+- }
+- }
+- )*
+- }
+-}
+-
+-impl_from! {
+- str::Utf8Error => Utf8Error,
+- semver::SemVerError => SemVerError,
+- semver::ReqParseError => ReqParseError,
+-}
+-
+-/// The result type for this crate.
+-pub type Result<T> = std::result::Result<T, Error>;
+diff --git a/third_party/rust/rustc_version/src/lib.rs b/third_party/rust/rustc_version/src/lib.rs
+--- a/third_party/rust/rustc_version/src/lib.rs
++++ b/third_party/rust/rustc_version/src/lib.rs
+@@ -17,73 +17,138 @@
+ //! It calls `$RUSTC --version -v` and parses the output, falling
+ //! back to `rustc` if `$RUSTC` is not set.
+ //!
+ //! # Example
+ //!
+ //! ```rust
+ //! // This could be a cargo build script
+ //!
+-//! extern crate rustc_version;
+ //! use rustc_version::{version, version_meta, Channel, Version};
+ //!
+-//! fn main() {
+-//! // Assert we haven't travelled back in time
+-//! assert!(version().unwrap().major >= 1);
++//! // Assert we haven't travelled back in time
++//! assert!(version().unwrap().major >= 1);
+ //!
+-//! // Set cfg flags depending on release channel
+-//! match version_meta().unwrap().channel {
+-//! Channel::Stable => {
+-//! println!("cargo:rustc-cfg=RUSTC_IS_STABLE");
+-//! }
+-//! Channel::Beta => {
+-//! println!("cargo:rustc-cfg=RUSTC_IS_BETA");
+-//! }
+-//! Channel::Nightly => {
+-//! println!("cargo:rustc-cfg=RUSTC_IS_NIGHTLY");
+-//! }
+-//! Channel::Dev => {
+-//! println!("cargo:rustc-cfg=RUSTC_IS_DEV");
+-//! }
++//! // Set cfg flags depending on release channel
++//! match version_meta().unwrap().channel {
++//! Channel::Stable => {
++//! println!("cargo:rustc-cfg=RUSTC_IS_STABLE");
++//! }
++//! Channel::Beta => {
++//! println!("cargo:rustc-cfg=RUSTC_IS_BETA");
+ //! }
++//! Channel::Nightly => {
++//! println!("cargo:rustc-cfg=RUSTC_IS_NIGHTLY");
++//! }
++//! Channel::Dev => {
++//! println!("cargo:rustc-cfg=RUSTC_IS_DEV");
++//! }
++//! }
+ //!
+-//! // Check for a minimum version
+-//! if version().unwrap() >= Version::parse("1.4.0").unwrap() {
+-//! println!("cargo:rustc-cfg=compiler_has_important_bugfix");
+-//! }
++//! // Check for a minimum version
++//! if version().unwrap() >= Version::parse("1.4.0").unwrap() {
++//! println!("cargo:rustc-cfg=compiler_has_important_bugfix");
+ //! }
+ //! ```
+
+-extern crate semver;
+-use semver::Identifier;
++#[cfg(test)]
++#[macro_use]
++extern crate doc_comment;
++
++#[cfg(test)]
++doctest!("../README.md");
++
++use std::collections::HashMap;
+ use std::process::Command;
+-use std::{env, str};
+-use std::ffi::OsString;
++use std::{env, error, fmt, io, num, str};
++use std::{ffi::OsString, str::FromStr};
+
+ // Convenience re-export to allow version comparison without needing to add
+ // semver crate.
+ pub use semver::Version;
+
+-mod errors;
+-pub use errors::{Error, Result};
++use Error::*;
+
+ /// Release channel of the compiler.
+ #[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)]
+ pub enum Channel {
+ /// Development release channel
+ Dev,
+ /// Nightly release channel
+ Nightly,
+ /// Beta release channel
+ Beta,
+ /// Stable release channel
+ Stable,
+ }
+
+-/// Rustc version plus metada like git short hash and build date.
++/// LLVM version
++///
++/// LLVM's version numbering scheme is not semver compatible until version 4.0
++///
++/// rustc [just prints the major and minor versions], so other parts of the version are not included.
++///
++/// [just prints the major and minor versions]: https://github.com/rust-lang/rust/blob/b5c9e2448c9ace53ad5c11585803894651b1…
++#[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
++pub struct LlvmVersion {
++ // fields must be ordered major, minor for comparison to be correct
++ /// Major version
++ pub major: u64,
++ /// Minor version
++ pub minor: u64,
++ // TODO: expose micro version here
++}
++
++impl fmt::Display for LlvmVersion {
++ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
++ write!(f, "{}.{}", self.major, self.minor)
++ }
++}
++
++impl FromStr for LlvmVersion {
++ type Err = LlvmVersionParseError;
++
++ fn from_str(s: &str) -> Result<Self, Self::Err> {
++ let mut parts = s
++ .split('.')
++ .map(|part| -> Result<u64, LlvmVersionParseError> {
++ if part == "0" {
++ Ok(0)
++ } else if part.starts_with('0') {
++ Err(LlvmVersionParseError::ComponentMustNotHaveLeadingZeros)
++ } else if part.starts_with('-') || part.starts_with('+') {
++ Err(LlvmVersionParseError::ComponentMustNotHaveSign)
++ } else {
++ Ok(part.parse()?)
++ }
++ });
++
++ let major = parts.next().unwrap()?;
++ let mut minor = 0;
++
++ if let Some(part) = parts.next() {
++ minor = part?;
++ } else if major < 4 {
++ // LLVM versions earlier than 4.0 have significant minor versions, so require the minor version in this case.
++ return Err(LlvmVersionParseError::MinorVersionRequiredBefore4);
++ }
++
++ if let Some(Err(e)) = parts.next() {
++ return Err(e);
++ }
++
++ if parts.next().is_some() {
++ return Err(LlvmVersionParseError::TooManyComponents);
++ }
++
++ Ok(Self { major, minor })
++ }
++}
++
++/// Rustc version plus metadata like git short hash and build date.
+ #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
+ pub struct VersionMeta {
+ /// Version of the compiler
+ pub semver: Version,
+
+ /// Git short hash of the build of the compiler
+ pub commit_hash: Option<String>,
+
+@@ -96,27 +161,37 @@ pub struct VersionMeta {
+ /// Release channel of the compiler
+ pub channel: Channel,
+
+ /// Host target triple of the compiler
+ pub host: String,
+
+ /// Short version string of the compiler
+ pub short_version_string: String,
++
++ /// Version of LLVM used by the compiler
++ pub llvm_version: Option<LlvmVersion>,
+ }
+
+ impl VersionMeta {
+ /// Returns the version metadata for `cmd`, which should be a `rustc` command.
+- pub fn for_command(cmd: Command) -> Result<VersionMeta> {
+- let mut cmd = cmd;
++ pub fn for_command(mut cmd: Command) -> Result<VersionMeta> {
++ let out = cmd
++ .arg("-vV")
++ .output()
++ .map_err(Error::CouldNotExecuteCommand)?;
+
+- let out = cmd.arg("-vV").output().map_err(Error::CouldNotExecuteCommand)?;
+- let out = str::from_utf8(&out.stdout)?;
++ if !out.status.success() {
++ return Err(Error::CommandError {
++ stdout: String::from_utf8_lossy(&out.stdout).into(),
++ stderr: String::from_utf8_lossy(&out.stderr).into(),
++ });
++ }
+
+- version_meta_for(out)
++ version_meta_for(str::from_utf8(&out.stdout)?)
+ }
+ }
+
+ /// Returns the `rustc` SemVer version.
+ pub fn version() -> Result<Version> {
+ Ok(version_meta()?.semver)
+ }
+
+@@ -127,221 +202,216 @@ pub fn version_meta() -> Result<VersionM
+
+ VersionMeta::for_command(Command::new(cmd))
+ }
+
+ /// Parses a "rustc -vV" output string and returns
+ /// the SemVer version and additional metadata
+ /// like the git short hash and build date.
+ pub fn version_meta_for(verbose_version_string: &str) -> Result<VersionMeta> {
+- let out: Vec<_> = verbose_version_string.lines().collect();
+-
+- if !(out.len() >= 6 && out.len() <= 8) {
+- return Err(Error::UnexpectedVersionFormat);
+- }
++ let mut map = HashMap::new();
++ for (i, line) in verbose_version_string.lines().enumerate() {
++ if i == 0 {
++ map.insert("short", line);
++ continue;
++ }
+
+- let short_version_string = out[0];
++ let mut parts = line.splitn(2, ": ");
++ let key = match parts.next() {
++ Some(key) => key,
++ None => continue,
++ };
+
+- fn expect_prefix<'a>(line: &'a str, prefix: &str) -> Result<&'a str> {
+- if line.starts_with(prefix) {
+- Ok(&line[prefix.len()..])
+- } else {
+- Err(Error::UnexpectedVersionFormat)
++ if let Some(value) = parts.next() {
++ map.insert(key, value);
+ }
+ }
+
+- let commit_hash = match expect_prefix(out[2], "commit-hash: ")? {
+- "unknown" => None,
+- hash => Some(hash.to_owned()),
+- };
++ let short_version_string = expect_key("short", &map)?;
++ let host = expect_key("host", &map)?;
++ let release = expect_key("release", &map)?;
++ let semver: Version = release.parse()?;
+
+- let commit_date = match expect_prefix(out[3], "commit-date: ")? {
+- "unknown" => None,
+- hash => Some(hash.to_owned()),
++ let channel = match semver.pre.split('.').next().unwrap() {
++ "" => Channel::Stable,
++ "dev" => Channel::Dev,
++ "beta" => Channel::Beta,
++ "nightly" => Channel::Nightly,
++ x => return Err(Error::UnknownPreReleaseTag(x.to_owned())),
+ };
+
+- // Handle that the build date may or may not be present.
+- let mut idx = 4;
+- let mut build_date = None;
+- if out[idx].starts_with("build-date") {
+- build_date = match expect_prefix(out[idx], "build-date: ")? {
+- "unknown" => None,
+- s => Some(s.to_owned()),
+- };
+- idx += 1;
+- }
+-
+- let host = expect_prefix(out[idx], "host: ")?;
+- idx += 1;
+- let release = expect_prefix(out[idx], "release: ")?;
+-
+- let semver: Version = release.parse()?;
+-
+- let channel = if semver.pre.is_empty() {
+- Channel::Stable
+- } else {
+- match semver.pre[0] {
+- Identifier::AlphaNumeric(ref s) if s == "dev" => Channel::Dev,
+- Identifier::AlphaNumeric(ref s) if s == "beta" => Channel::Beta,
+- Identifier::AlphaNumeric(ref s) if s == "nightly" => Channel::Nightly,
+- ref x => return Err(Error::UnknownPreReleaseTag(x.clone())),
+- }
++ let commit_hash = expect_key_or_unknown("commit-hash", &map)?;
++ let commit_date = expect_key_or_unknown("commit-date", &map)?;
++ let build_date = map
++ .get("build-date")
++ .filter(|&v| *v != "unknown")
++ .map(|&v| String::from(v));
++ let llvm_version = match map.get("LLVM version") {
++ Some(&v) => Some(v.parse()?),
++ None => None,
+ };
+
+ Ok(VersionMeta {
+- semver: semver,
+- commit_hash: commit_hash,
+- commit_date: commit_date,
+- build_date: build_date,
+- channel: channel,
+- host: host.into(),
+- short_version_string: short_version_string.into(),
++ semver,
++ commit_hash,
++ commit_date,
++ build_date,
++ channel,
++ host,
++ short_version_string,
++ llvm_version,
+ })
+ }
+
+-#[test]
+-fn smoketest() {
+- let v = version().unwrap();
+- assert!(v.major >= 1);
++fn expect_key_or_unknown(key: &str, map: &HashMap<&str, &str>) -> Result<Option<String>, Error> {
++ match map.get(key) {
++ Some(&v) if v == "unknown" => Ok(None),
++ Some(&v) => Ok(Some(String::from(v))),
++ None => Err(Error::UnexpectedVersionFormat),
++ }
++}
+
+- let v = version_meta().unwrap();
+- assert!(v.semver.major >= 1);
+-
+- assert!(version().unwrap() >= Version::parse("1.0.0").unwrap());
++fn expect_key(key: &str, map: &HashMap<&str, &str>) -> Result<String, Error> {
++ map.get(key)
++ .map(|&v| String::from(v))
++ .ok_or(Error::UnexpectedVersionFormat)
+ }
+
+-#[test]
+-fn parse_unexpected() {
+- let res = version_meta_for(
+-"rustc 1.0.0 (a59de37e9 2015-05-13) (built 2015-05-14)
+-binary: rustc
+-commit-hash: a59de37e99060162a2674e3ff45409ac73595c0e
+-commit-date: 2015-05-13
+-rust-birthday: 2015-05-14
+-host: x86_64-unknown-linux-gnu
+-release: 1.0.0");
++/// LLVM Version Parse Error
++#[derive(Debug)]
++pub enum LlvmVersionParseError {
++ /// An error occurred in parsing a version component as an integer
++ ParseIntError(num::ParseIntError),
++ /// A version component must not have leading zeros
++ ComponentMustNotHaveLeadingZeros,
++ /// A version component has a sign
++ ComponentMustNotHaveSign,
++ /// Minor version component must be zero on LLVM versions later than 4.0
++ MinorVersionMustBeZeroAfter4,
++ /// Minor version component is required on LLVM versions earlier than 4.0
++ MinorVersionRequiredBefore4,
++ /// Too many components
++ TooManyComponents,
++}
+
+- assert!(match res {
+- Err(Error::UnexpectedVersionFormat) => true,
+- _ => false,
+- });
+-
++impl From<num::ParseIntError> for LlvmVersionParseError {
++ fn from(e: num::ParseIntError) -> Self {
++ LlvmVersionParseError::ParseIntError(e)
++ }
+ }
+
+-#[test]
+-fn parse_1_0_0() {
+- let version = version_meta_for(
+-"rustc 1.0.0 (a59de37e9 2015-05-13) (built 2015-05-14)
+-binary: rustc
+-commit-hash: a59de37e99060162a2674e3ff45409ac73595c0e
+-commit-date: 2015-05-13
+-build-date: 2015-05-14
+-host: x86_64-unknown-linux-gnu
+-release: 1.0.0").unwrap();
+-
+- assert_eq!(version.semver, Version::parse("1.0.0").unwrap());
+- assert_eq!(version.commit_hash, Some("a59de37e99060162a2674e3ff45409ac73595c0e".into()));
+- assert_eq!(version.commit_date, Some("2015-05-13".into()));
+- assert_eq!(version.build_date, Some("2015-05-14".into()));
+- assert_eq!(version.channel, Channel::Stable);
+- assert_eq!(version.host, "x86_64-unknown-linux-gnu");
+- assert_eq!(version.short_version_string, "rustc 1.0.0 (a59de37e9 2015-05-13) (built 2015-05-14)");
++impl fmt::Display for LlvmVersionParseError {
++ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
++ match self {
++ LlvmVersionParseError::ParseIntError(e) => {
++ write!(f, "error parsing LLVM version component: {}", e)
++ }
++ LlvmVersionParseError::ComponentMustNotHaveLeadingZeros => {
++ write!(f, "a version component must not have leading zeros")
++ }
++ LlvmVersionParseError::ComponentMustNotHaveSign => {
++ write!(f, "a version component must not have a sign")
++ }
++ LlvmVersionParseError::MinorVersionMustBeZeroAfter4 => write!(
++ f,
++ "LLVM's minor version component must be 0 for versions greater than 4.0"
++ ),
++ LlvmVersionParseError::MinorVersionRequiredBefore4 => write!(
++ f,
++ "LLVM's minor version component is required for versions less than 4.0"
++ ),
++ LlvmVersionParseError::TooManyComponents => write!(f, "too many version components"),
++ }
++ }
+ }
+
+-
+-#[test]
+-fn parse_unknown() {
+- let version = version_meta_for(
+-"rustc 1.3.0
+-binary: rustc
+-commit-hash: unknown
+-commit-date: unknown
+-host: x86_64-unknown-linux-gnu
+-release: 1.3.0").unwrap();
+-
+- assert_eq!(version.semver, Version::parse("1.3.0").unwrap());
+- assert_eq!(version.commit_hash, None);
+- assert_eq!(version.commit_date, None);
+- assert_eq!(version.channel, Channel::Stable);
+- assert_eq!(version.host, "x86_64-unknown-linux-gnu");
+- assert_eq!(version.short_version_string, "rustc 1.3.0");
++impl error::Error for LlvmVersionParseError {
++ fn source(&self) -> Option<&(dyn error::Error + 'static)> {
++ match self {
++ LlvmVersionParseError::ParseIntError(e) => Some(e),
++ LlvmVersionParseError::ComponentMustNotHaveLeadingZeros
++ | LlvmVersionParseError::ComponentMustNotHaveSign
++ | LlvmVersionParseError::MinorVersionMustBeZeroAfter4
++ | LlvmVersionParseError::MinorVersionRequiredBefore4
++ | LlvmVersionParseError::TooManyComponents => None,
++ }
++ }
+ }
+
+-#[test]
+-fn parse_nightly() {
+- let version = version_meta_for(
+-"rustc 1.5.0-nightly (65d5c0833 2015-09-29)
+-binary: rustc
+-commit-hash: 65d5c083377645a115c4ac23a620d3581b9562b6
+-commit-date: 2015-09-29
+-host: x86_64-unknown-linux-gnu
+-release: 1.5.0-nightly").unwrap();
+-
+- assert_eq!(version.semver, Version::parse("1.5.0-nightly").unwrap());
+- assert_eq!(version.commit_hash, Some("65d5c083377645a115c4ac23a620d3581b9562b6".into()));
+- assert_eq!(version.commit_date, Some("2015-09-29".into()));
+- assert_eq!(version.channel, Channel::Nightly);
+- assert_eq!(version.host, "x86_64-unknown-linux-gnu");
+- assert_eq!(version.short_version_string, "rustc 1.5.0-nightly (65d5c0833 2015-09-29)");
+-}
+-
+-#[test]
+-fn parse_stable() {
+- let version = version_meta_for(
+-"rustc 1.3.0 (9a92aaf19 2015-09-15)
+-binary: rustc
+-commit-hash: 9a92aaf19a64603b02b4130fe52958cc12488900
+-commit-date: 2015-09-15
+-host: x86_64-unknown-linux-gnu
+-release: 1.3.0").unwrap();
+-
+- assert_eq!(version.semver, Version::parse("1.3.0").unwrap());
+- assert_eq!(version.commit_hash, Some("9a92aaf19a64603b02b4130fe52958cc12488900".into()));
+- assert_eq!(version.commit_date, Some("2015-09-15".into()));
+- assert_eq!(version.channel, Channel::Stable);
+- assert_eq!(version.host, "x86_64-unknown-linux-gnu");
+- assert_eq!(version.short_version_string, "rustc 1.3.0 (9a92aaf19 2015-09-15)");
++/// The error type for this crate.
++#[derive(Debug)]
++pub enum Error {
++ /// An error occurred while trying to find the `rustc` to run.
++ CouldNotExecuteCommand(io::Error),
++ /// Error output from the command that was run.
++ CommandError {
++ /// stdout output from the command
++ stdout: String,
++ /// stderr output from the command
++ stderr: String,
++ },
++ /// The output of `rustc -vV` was not valid utf-8.
++ Utf8Error(str::Utf8Error),
++ /// The output of `rustc -vV` was not in the expected format.
++ UnexpectedVersionFormat,
++ /// An error occurred in parsing the semver.
++ SemVerError(semver::Error),
++ /// The pre-release tag is unknown.
++ UnknownPreReleaseTag(String),
++ /// An error occurred in parsing a `LlvmVersion`.
++ LlvmVersionError(LlvmVersionParseError),
+ }
+
+-#[test]
+-fn parse_1_16_0_nightly() {
+- let version = version_meta_for(
+-"rustc 1.16.0-nightly (5d994d8b7 2017-01-05)
+-binary: rustc
+-commit-hash: 5d994d8b7e482e87467d4a521911477bd8284ce3
+-commit-date: 2017-01-05
+-host: x86_64-unknown-linux-gnu
+-release: 1.16.0-nightly
+-LLVM version: 3.9").unwrap();
+-
+- assert_eq!(version.semver, Version::parse("1.16.0-nightly").unwrap());
+- assert_eq!(version.commit_hash, Some("5d994d8b7e482e87467d4a521911477bd8284ce3".into()));
+- assert_eq!(version.commit_date, Some("2017-01-05".into()));
+- assert_eq!(version.channel, Channel::Nightly);
+- assert_eq!(version.host, "x86_64-unknown-linux-gnu");
+- assert_eq!(version.short_version_string, "rustc 1.16.0-nightly (5d994d8b7 2017-01-05)");
++impl fmt::Display for Error {
++ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
++ match *self {
++ CouldNotExecuteCommand(ref e) => write!(f, "could not execute command: {}", e),
++ CommandError {
++ ref stdout,
++ ref stderr,
++ } => write!(
++ f,
++ "error from command -- stderr:\n\n{}\n\nstderr:\n\n{}",
++ stderr, stdout,
++ ),
++ Utf8Error(_) => write!(f, "invalid UTF-8 output from `rustc -vV`"),
++ UnexpectedVersionFormat => write!(f, "unexpected `rustc -vV` format"),
++ SemVerError(ref e) => write!(f, "error parsing version: {}", e),
++ UnknownPreReleaseTag(ref i) => write!(f, "unknown pre-release tag: {}", i),
++ LlvmVersionError(ref e) => write!(f, "error parsing LLVM's version: {}", e),
++ }
++ }
+ }
+
+-/*
+-#[test]
+-fn version_matches_replacement() {
+- let f = |s1: &str, s2: &str| {
+- let a = Version::parse(s1).unwrap();
+- let b = Version::parse(s2).unwrap();
+- println!("{} <= {} : {}", s1, s2, a <= b);
+- };
+-
+- println!();
++impl error::Error for Error {
++ fn source(&self) -> Option<&(dyn error::Error + 'static)> {
++ match *self {
++ CouldNotExecuteCommand(ref e) => Some(e),
++ CommandError { .. } => None,
++ Utf8Error(ref e) => Some(e),
++ UnexpectedVersionFormat => None,
++ SemVerError(ref e) => Some(e),
++ UnknownPreReleaseTag(_) => None,
++ LlvmVersionError(ref e) => Some(e),
++ }
++ }
++}
+
+- f("1.5.0", "1.5.0");
+- f("1.5.0-nightly", "1.5.0");
+- f("1.5.0", "1.5.0-nightly");
+- f("1.5.0-nightly", "1.5.0-nightly");
++macro_rules! impl_from {
++ ($($err_ty:ty => $variant:ident),* $(,)*) => {
++ $(
++ impl From<$err_ty> for Error {
++ fn from(e: $err_ty) -> Error {
++ Error::$variant(e)
++ }
++ }
++ )*
++ }
++}
+
+- f("1.5.0", "1.6.0");
+- f("1.5.0-nightly", "1.6.0");
+- f("1.5.0", "1.6.0-nightly");
+- f("1.5.0-nightly", "1.6.0-nightly");
++impl_from! {
++ str::Utf8Error => Utf8Error,
++ semver::Error => SemVerError,
++ LlvmVersionParseError => LlvmVersionError,
++}
+
+- panic!();
+-
+-}
+-*/
++/// The result type for this crate.
++pub type Result<T, E = Error> = std::result::Result<T, E>;
+diff --git a/third_party/rust/rustc_version/tests/all.rs b/third_party/rust/rustc_version/tests/all.rs
+new file mode 100644
+--- /dev/null
++++ b/third_party/rust/rustc_version/tests/all.rs
+@@ -0,0 +1,456 @@
++#![allow(clippy::match_like_matches_macro)]
++
++use std::process::Command;
++
++use rustc_version::{
++ version, version_meta, version_meta_for, Channel, Error, LlvmVersion, LlvmVersionParseError,
++ Version, VersionMeta,
++};
++
++#[test]
++fn rustc_error() {
++ let mut cmd = Command::new("rustc");
++ cmd.arg("--FOO");
++ let stderr = match VersionMeta::for_command(cmd) {
++ Err(Error::CommandError { stdout: _, stderr }) => stderr,
++ _ => panic!("command error expected"),
++ };
++ assert_eq!(stderr, "error: Unrecognized option: \'FOO\'\n\n");
++}
++
++#[test]
++fn smoketest() {
++ let v = version().unwrap();
++ assert!(v.major >= 1);
++
++ let v = version_meta().unwrap();
++ assert!(v.semver.major >= 1);
++
++ assert!(version().unwrap() >= Version::parse("1.0.0").unwrap());
++}
++
++#[test]
++fn parse_1_0_0() {
++ let version = version_meta_for(
++ "rustc 1.0.0 (a59de37e9 2015-05-13) (built 2015-05-14)
++binary: rustc
++commit-hash: a59de37e99060162a2674e3ff45409ac73595c0e
++commit-date: 2015-05-13
++build-date: 2015-05-14
++host: x86_64-unknown-linux-gnu
++release: 1.0.0",
++ )
++ .unwrap();
++
++ assert_eq!(version.semver, Version::parse("1.0.0").unwrap());
++ assert_eq!(
++ version.commit_hash,
++ Some("a59de37e99060162a2674e3ff45409ac73595c0e".into())
++ );
++ assert_eq!(version.commit_date, Some("2015-05-13".into()));
++ assert_eq!(version.build_date, Some("2015-05-14".into()));
++ assert_eq!(version.channel, Channel::Stable);
++ assert_eq!(version.host, "x86_64-unknown-linux-gnu");
++ assert_eq!(
++ version.short_version_string,
++ "rustc 1.0.0 (a59de37e9 2015-05-13) (built 2015-05-14)"
++ );
++ assert_eq!(version.llvm_version, None);
++}
++
++#[test]
++fn parse_unknown() {
++ let version = version_meta_for(
++ "rustc 1.3.0
++binary: rustc
++commit-hash: unknown
++commit-date: unknown
++host: x86_64-unknown-linux-gnu
++release: 1.3.0",
++ )
++ .unwrap();
++
++ assert_eq!(version.semver, Version::parse("1.3.0").unwrap());
++ assert_eq!(version.commit_hash, None);
++ assert_eq!(version.commit_date, None);
++ assert_eq!(version.channel, Channel::Stable);
++ assert_eq!(version.host, "x86_64-unknown-linux-gnu");
++ assert_eq!(version.short_version_string, "rustc 1.3.0");
++ assert_eq!(version.llvm_version, None);
++}
++
++#[test]
++fn parse_nightly() {
++ let version = version_meta_for(
++ "rustc 1.5.0-nightly (65d5c0833 2015-09-29)
++binary: rustc
++commit-hash: 65d5c083377645a115c4ac23a620d3581b9562b6
++commit-date: 2015-09-29
++host: x86_64-unknown-linux-gnu
++release: 1.5.0-nightly",
++ )
++ .unwrap();
++
++ assert_eq!(version.semver, Version::parse("1.5.0-nightly").unwrap());
++ assert_eq!(
++ version.commit_hash,
++ Some("65d5c083377645a115c4ac23a620d3581b9562b6".into())
++ );
++ assert_eq!(version.commit_date, Some("2015-09-29".into()));
++ assert_eq!(version.channel, Channel::Nightly);
++ assert_eq!(version.host, "x86_64-unknown-linux-gnu");
++ assert_eq!(
++ version.short_version_string,
++ "rustc 1.5.0-nightly (65d5c0833 2015-09-29)"
++ );
++ assert_eq!(version.llvm_version, None);
++}
++
++#[test]
++fn parse_stable() {
++ let version = version_meta_for(
++ "rustc 1.3.0 (9a92aaf19 2015-09-15)
++binary: rustc
++commit-hash: 9a92aaf19a64603b02b4130fe52958cc12488900
++commit-date: 2015-09-15
++host: x86_64-unknown-linux-gnu
++release: 1.3.0",
++ )
++ .unwrap();
++
++ assert_eq!(version.semver, Version::parse("1.3.0").unwrap());
++ assert_eq!(
++ version.commit_hash,
++ Some("9a92aaf19a64603b02b4130fe52958cc12488900".into())
++ );
++ assert_eq!(version.commit_date, Some("2015-09-15".into()));
++ assert_eq!(version.channel, Channel::Stable);
++ assert_eq!(version.host, "x86_64-unknown-linux-gnu");
++ assert_eq!(
++ version.short_version_string,
++ "rustc 1.3.0 (9a92aaf19 2015-09-15)"
++ );
++ assert_eq!(version.llvm_version, None);
++}
++
++#[test]
++fn parse_1_16_0_nightly() {
++ let version = version_meta_for(
++ "rustc 1.16.0-nightly (5d994d8b7 2017-01-05)
++binary: rustc
++commit-hash: 5d994d8b7e482e87467d4a521911477bd8284ce3
++commit-date: 2017-01-05
++host: x86_64-unknown-linux-gnu
++release: 1.16.0-nightly
++LLVM version: 3.9",
++ )
++ .unwrap();
++
++ assert_eq!(version.semver, Version::parse("1.16.0-nightly").unwrap());
++ assert_eq!(
++ version.commit_hash,
++ Some("5d994d8b7e482e87467d4a521911477bd8284ce3".into())
++ );
++ assert_eq!(version.commit_date, Some("2017-01-05".into()));
++ assert_eq!(version.channel, Channel::Nightly);
++ assert_eq!(version.host, "x86_64-unknown-linux-gnu");
++ assert_eq!(
++ version.short_version_string,
++ "rustc 1.16.0-nightly (5d994d8b7 2017-01-05)"
++ );
++ assert_eq!(
++ version.llvm_version,
++ Some(LlvmVersion { major: 3, minor: 9 })
++ );
++}
++
++#[test]
++fn parse_1_47_0_stable() {
++ let version = version_meta_for(
++ "rustc 1.47.0 (18bf6b4f0 2020-10-07)
++binary: rustc
++commit-hash: 18bf6b4f01a6feaf7259ba7cdae58031af1b7b39
++commit-date: 2020-10-07
++host: powerpc64le-unknown-linux-gnu
++release: 1.47.0
++LLVM version: 11.0",
++ )
++ .unwrap();
++
++ assert_eq!(version.semver, Version::parse("1.47.0").unwrap());
++ assert_eq!(
++ version.commit_hash,
++ Some("18bf6b4f01a6feaf7259ba7cdae58031af1b7b39".into())
++ );
++ assert_eq!(version.commit_date, Some("2020-10-07".into()));
++ assert_eq!(version.channel, Channel::Stable);
++ assert_eq!(version.host, "powerpc64le-unknown-linux-gnu");
++ assert_eq!(
++ version.short_version_string,
++ "rustc 1.47.0 (18bf6b4f0 2020-10-07)"
++ );
++ assert_eq!(
++ version.llvm_version,
++ Some(LlvmVersion {
++ major: 11,
++ minor: 0,
++ })
++ );
++}
++
++#[test]
++fn parse_llvm_micro() {
++ let version = version_meta_for(
++ "rustc 1.51.0-nightly (4253153db 2021-01-17)
++binary: rustc
++commit-hash: 4253153db205251f72ea4493687a31e04a2a8ca0
++commit-date: 2021-01-17
++host: x86_64-pc-windows-msvc
++release: 1.51.0-nightly
++LLVM version: 11.0.1",
++ )
++ .unwrap();
++
++ assert_eq!(version.semver, Version::parse("1.51.0-nightly").unwrap());
++ assert_eq!(
++ version.commit_hash.unwrap(),
++ "4253153db205251f72ea4493687a31e04a2a8ca0"
++ );
++ assert_eq!(version.commit_date.unwrap(), "2021-01-17");
++ assert_eq!(version.host, "x86_64-pc-windows-msvc");
++ assert_eq!(
++ version.short_version_string,
++ "rustc 1.51.0-nightly (4253153db 2021-01-17)"
++ );
++ assert_eq!(
++ version.llvm_version,
++ Some(LlvmVersion {
++ major: 11,
++ minor: 0
++ })
++ );
++}
++
++#[test]
++fn parse_debian_buster() {
++ let version = version_meta_for(
++ "rustc 1.41.1
++binary: rustc
++commit-hash: unknown
++commit-date: unknown
++host: powerpc64le-unknown-linux-gnu
++release: 1.41.1
++LLVM version: 7.0",
++ )
++ .unwrap();
++
++ assert_eq!(version.semver, Version::parse("1.41.1").unwrap());
++ assert_eq!(version.commit_hash, None);
++ assert_eq!(version.commit_date, None);
++ assert_eq!(version.channel, Channel::Stable);
++ assert_eq!(version.host, "powerpc64le-unknown-linux-gnu");
++ assert_eq!(version.short_version_string, "rustc 1.41.1");
++ assert_eq!(
++ version.llvm_version,
++ Some(LlvmVersion { major: 7, minor: 0 })
++ );
++}
++
++#[test]
++fn parse_termux() {
++ let version = version_meta_for(
++ "rustc 1.46.0
++binary: rustc
++commit-hash: unknown
++commit-date: unknown
++host: aarch64-linux-android
++release: 1.46.0
++LLVM version: 10.0",
++ )
++ .unwrap();
++
++ assert_eq!(version.semver, Version::parse("1.46.0").unwrap());
++ assert_eq!(version.commit_hash, None);
++ assert_eq!(version.commit_date, None);
++ assert_eq!(version.channel, Channel::Stable);
++ assert_eq!(version.host, "aarch64-linux-android");
++ assert_eq!(version.short_version_string, "rustc 1.46.0");
++ assert_eq!(
++ version.llvm_version,
++ Some(LlvmVersion {
++ major: 10,
++ minor: 0,
++ })
++ );
++}
++
++#[test]
++fn parse_llvm_version_empty() {
++ let res: Result<LlvmVersion, _> = "".parse();
++ assert!(match res {
++ Err(LlvmVersionParseError::ParseIntError(_)) => true,
++ _ => false,
++ });
++}
++
++#[test]
++fn parse_llvm_version_invalid_char() {
++ let res: Result<LlvmVersion, _> = "A".parse();
++ assert!(match res {
++ Err(LlvmVersionParseError::ParseIntError(_)) => true,
++ _ => false,
++ });
++}
++
++#[test]
++fn parse_llvm_version_overflow() {
++ let res: Result<LlvmVersion, _> = "9999999999999999999999999999999".parse();
++ assert!(match res {
++ Err(LlvmVersionParseError::ParseIntError(_)) => true,
++ _ => false,
++ });
++}
++
++#[test]
++fn parse_llvm_version_leading_zero_on_zero() {
++ let res: Result<LlvmVersion, _> = "00".parse();
++ assert!(match res {
++ Err(LlvmVersionParseError::ComponentMustNotHaveLeadingZeros) => true,
++ _ => false,
++ });
++}
++
++#[test]
++fn parse_llvm_version_leading_zero_on_nonzero() {
++ let res: Result<LlvmVersion, _> = "01".parse();
++ assert!(match res {
++ Err(LlvmVersionParseError::ComponentMustNotHaveLeadingZeros) => true,
++ _ => false,
++ });
++}
++
++#[test]
++fn parse_llvm_version_4_components() {
++ let res: Result<LlvmVersion, _> = "4.0.0.0".parse();
++
++ assert!(match res {
++ Err(LlvmVersionParseError::TooManyComponents) => true,
++ _ => false,
++ });
++}
++
++#[test]
++fn parse_llvm_version_component_sign_plus() {
++ let res: Result<LlvmVersion, _> = "1.+3".parse();
++
++ assert!(match res {
++ Err(LlvmVersionParseError::ComponentMustNotHaveSign) => true,
++ _ => false,
++ });
++}
++
++#[test]
++fn parse_llvm_version_component_sign_minus() {
++ let res: Result<LlvmVersion, _> = "1.-3".parse();
++
++ assert!(match res {
++ Err(LlvmVersionParseError::ComponentMustNotHaveSign) => true,
++ _ => false,
++ });
++}
++
++#[test]
++fn parse_llvm_version_3() {
++ let res: Result<LlvmVersion, _> = "3".parse();
++
++ assert!(match res {
++ Err(LlvmVersionParseError::MinorVersionRequiredBefore4) => true,
++ _ => false,
++ });
++}
++
++#[test]
++fn parse_llvm_version_5() {
++ let v: LlvmVersion = "5".parse().unwrap();
++ assert_eq!(v, LlvmVersion { major: 5, minor: 0 });
++}
++
++#[test]
++fn parse_llvm_version_5_0() {
++ let v: LlvmVersion = "5.0".parse().unwrap();
++ assert_eq!(v, LlvmVersion { major: 5, minor: 0 });
++}
++
++#[test]
++fn parse_llvm_version_4_0() {
++ let v: LlvmVersion = "4.0".parse().unwrap();
++ assert_eq!(v, LlvmVersion { major: 4, minor: 0 });
++}
++
++#[test]
++fn parse_llvm_version_3_0() {
++ let v: LlvmVersion = "3.0".parse().unwrap();
++ assert_eq!(v, LlvmVersion { major: 3, minor: 0 });
++}
++
++#[test]
++fn parse_llvm_version_3_9() {
++ let v: LlvmVersion = "3.9".parse().unwrap();
++ assert_eq!(v, LlvmVersion { major: 3, minor: 9 });
++}
++
++#[test]
++fn parse_llvm_version_11_0() {
++ let v: LlvmVersion = "11.0".parse().unwrap();
++ assert_eq!(
++ v,
++ LlvmVersion {
++ major: 11,
++ minor: 0
++ }
++ );
++}
++
++#[test]
++fn parse_llvm_version_11() {
++ let v: LlvmVersion = "11".parse().unwrap();
++ assert_eq!(
++ v,
++ LlvmVersion {
++ major: 11,
++ minor: 0
++ }
++ );
++}
++
++#[test]
++fn test_llvm_version_comparison() {
++ // check that field order is correct
++ assert!(LlvmVersion { major: 3, minor: 9 } < LlvmVersion { major: 4, minor: 0 });
++}
++
++/*
++#[test]
++fn version_matches_replacement() {
++ let f = |s1: &str, s2: &str| {
++ let a = Version::parse(s1).unwrap();
++ let b = Version::parse(s2).unwrap();
++ println!("{} <= {} : {}", s1, s2, a <= b);
++ };
++
++ println!();
++
++ f("1.5.0", "1.5.0");
++ f("1.5.0-nightly", "1.5.0");
++ f("1.5.0", "1.5.0-nightly");
++ f("1.5.0-nightly", "1.5.0-nightly");
++
++ f("1.5.0", "1.6.0");
++ f("1.5.0-nightly", "1.6.0");
++ f("1.5.0", "1.6.0-nightly");
++ f("1.5.0-nightly", "1.6.0-nightly");
++
++ panic!();
++
++}
++*/
+diff --git a/third_party/rust/semver-parser/.cargo-checksum.json b/third_party/rust/semver-parser/.cargo-checksum.json
+deleted file mode 100644
+--- a/third_party/rust/semver-parser/.cargo-checksum.json
++++ /dev/null
+@@ -1,1 +0,0 @@
+-{"files":{"Cargo.toml":"67597114802114d2a7fdb457c1cf5f7e0c951b21e287c6a47b9a86b9028cf64d","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"d38feaa4f9468cd1e0ece22e0ad2eadfe6195a9a0a3843b7c722d5c7d81804fb","src/common.rs":"dc42336abd34e19ca9f732f33657e106f98dcc8c10d4c2564bc4f160cb31926e","src/lib.rs":"3ac8ef5a280344a25cb18ac386034c0fee8d64060fa14af5e25ed49f0cb2fd9e","src/range.rs":"3596f048d466d43887aff1e8c8c834476672a4627631ed35379c35466b5f02ec","src/recognize.rs":"9f16eda9fcd7d8af7eee4c3b89c611bd648040273fde6b35778f8a50b004c8b1","src/version.rs":"dbd91a4e4fd92a0aa9eb4f858ecbc1ecd680aa60572cc2ad2085e5c5c30e5b77"},"package":"388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"}
+\ No newline at end of file
+diff --git a/third_party/rust/semver-parser/Cargo.toml b/third_party/rust/semver-parser/Cargo.toml
+deleted file mode 100644
+--- a/third_party/rust/semver-parser/Cargo.toml
++++ /dev/null
+@@ -1,11 +0,0 @@
+-[package]
+-name = "semver-parser"
+-version = "0.7.0"
+-authors = ["Steve Klabnik <steve(a)steveklabnik.com>"]
+-license = "MIT/Apache-2.0"
+-repository = "https://github.com/steveklabnik/semver-parser"
+-homepage = "https://github.com/steveklabnik/semver-parser"
+-documentation = "https://docs.rs/semver-parser"
+-description = """
+-Parsing of the semver spec.
+-"""
+diff --git a/third_party/rust/semver-parser/LICENSE-APACHE b/third_party/rust/semver-parser/LICENSE-APACHE
+deleted file mode 100644
+--- a/third_party/rust/semver-parser/LICENSE-APACHE
++++ /dev/null
+@@ -1,201 +0,0 @@
+- Apache License
+- Version 2.0, January 2004
+- http://www.apache.org/licenses/
+-
+-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+-
+-1. Definitions.
+-
+- "License" shall mean the terms and conditions for use, reproduction,
+- and distribution as defined by Sections 1 through 9 of this document.
+-
+- "Licensor" shall mean the copyright owner or entity authorized by
+- the copyright owner that is granting the License.
+-
+- "Legal Entity" shall mean the union of the acting entity and all
+- other entities that control, are controlled by, or are under common
+- control with that entity. For the purposes of this definition,
+- "control" means (i) the power, direct or indirect, to cause the
+- direction or management of such entity, whether by contract or
+- otherwise, or (ii) ownership of fifty percent (50%) or more of the
+- outstanding shares, or (iii) beneficial ownership of such entity.
+-
+- "You" (or "Your") shall mean an individual or Legal Entity
+- exercising permissions granted by this License.
+-
+- "Source" form shall mean the preferred form for making modifications,
+- including but not limited to software source code, documentation
+- source, and configuration files.
+-
+- "Object" form shall mean any form resulting from mechanical
+- transformation or translation of a Source form, including but
+- not limited to compiled object code, generated documentation,
+- and conversions to other media types.
+-
+- "Work" shall mean the work of authorship, whether in Source or
+- Object form, made available under the License, as indicated by a
+- copyright notice that is included in or attached to the work
+- (an example is provided in the Appendix below).
+-
+- "Derivative Works" shall mean any work, whether in Source or Object
+- form, that is based on (or derived from) the Work and for which the
+- editorial revisions, annotations, elaborations, or other modifications
+- represent, as a whole, an original work of authorship. For the purposes
+- of this License, Derivative Works shall not include works that remain
+- separable from, or merely link (or bind by name) to the interfaces of,
+- the Work and Derivative Works thereof.
+-
+- "Contribution" shall mean any work of authorship, including
+- the original version of the Work and any modifications or additions
+- to that Work or Derivative Works thereof, that is intentionally
+- submitted to Licensor for inclusion in the Work by the copyright owner
+- or by an individual or Legal Entity authorized to submit on behalf of
+- the copyright owner. For the purposes of this definition, "submitted"
+- means any form of electronic, verbal, or written communication sent
+- to the Licensor or its representatives, including but not limited to
+- communication on electronic mailing lists, source code control systems,
+- and issue tracking systems that are managed by, or on behalf of, the
+- Licensor for the purpose of discussing and improving the Work, but
+- excluding communication that is conspicuously marked or otherwise
+- designated in writing by the copyright owner as "Not a Contribution."
+-
+- "Contributor" shall mean Licensor and any individual or Legal Entity
+- on behalf of whom a Contribution has been received by Licensor and
+- subsequently incorporated within the Work.
+-
+-2. Grant of Copyright License. Subject to the terms and conditions of
+- this License, each Contributor hereby grants to You a perpetual,
+- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+- copyright license to reproduce, prepare Derivative Works of,
+- publicly display, publicly perform, sublicense, and distribute the
+- Work and such Derivative Works in Source or Object form.
+-
+-3. Grant of Patent License. Subject to the terms and conditions of
+- this License, each Contributor hereby grants to You a perpetual,
+- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+- (except as stated in this section) patent license to make, have made,
+- use, offer to sell, sell, import, and otherwise transfer the Work,
+- where such license applies only to those patent claims licensable
+- by such Contributor that are necessarily infringed by their
+- Contribution(s) alone or by combination of their Contribution(s)
+- with the Work to which such Contribution(s) was submitted. If You
+- institute patent litigation against any entity (including a
+- cross-claim or counterclaim in a lawsuit) alleging that the Work
+- or a Contribution incorporated within the Work constitutes direct
+- or contributory patent infringement, then any patent licenses
+- granted to You under this License for that Work shall terminate
+- as of the date such litigation is filed.
+-
+-4. Redistribution. You may reproduce and distribute copies of the
+- Work or Derivative Works thereof in any medium, with or without
+- modifications, and in Source or Object form, provided that You
+- meet the following conditions:
+-
+- (a) You must give any other recipients of the Work or
+- Derivative Works a copy of this License; and
+-
+- (b) You must cause any modified files to carry prominent notices
+- stating that You changed the files; and
+-
+- (c) You must retain, in the Source form of any Derivative Works
+- that You distribute, all copyright, patent, trademark, and
+- attribution notices from the Source form of the Work,
+- excluding those notices that do not pertain to any part of
+- the Derivative Works; and
+-
+- (d) If the Work includes a "NOTICE" text file as part of its
+- distribution, then any Derivative Works that You distribute must
+- include a readable copy of the attribution notices contained
+- within such NOTICE file, excluding those notices that do not
+- pertain to any part of the Derivative Works, in at least one
+- of the following places: within a NOTICE text file distributed
+- as part of the Derivative Works; within the Source form or
+- documentation, if provided along with the Derivative Works; or,
+- within a display generated by the Derivative Works, if and
+- wherever such third-party notices normally appear. The contents
+- of the NOTICE file are for informational purposes only and
+- do not modify the License. You may add Your own attribution
+- notices within Derivative Works that You distribute, alongside
+- or as an addendum to the NOTICE text from the Work, provided
+- that such additional attribution notices cannot be construed
+- as modifying the License.
+-
+- You may add Your own copyright statement to Your modifications and
+- may provide additional or different license terms and conditions
+- for use, reproduction, or distribution of Your modifications, or
+- for any such Derivative Works as a whole, provided Your use,
+- reproduction, and distribution of the Work otherwise complies with
+- the conditions stated in this License.
+-
+-5. Submission of Contributions. Unless You explicitly state otherwise,
+- any Contribution intentionally submitted for inclusion in the Work
+- by You to the Licensor shall be under the terms and conditions of
+- this License, without any additional terms or conditions.
+- Notwithstanding the above, nothing herein shall supersede or modify
+- the terms of any separate license agreement you may have executed
+- with Licensor regarding such Contributions.
+-
+-6. Trademarks. This License does not grant permission to use the trade
+- names, trademarks, service marks, or product names of the Licensor,
+- except as required for reasonable and customary use in describing the
+- origin of the Work and reproducing the content of the NOTICE file.
+-
+-7. Disclaimer of Warranty. Unless required by applicable law or
+- agreed to in writing, Licensor provides the Work (and each
+- Contributor provides its Contributions) on an "AS IS" BASIS,
+- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+- implied, including, without limitation, any warranties or conditions
+- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+- PARTICULAR PURPOSE. You are solely responsible for determining the
+- appropriateness of using or redistributing the Work and assume any
+- risks associated with Your exercise of permissions under this License.
+-
+-8. Limitation of Liability. In no event and under no legal theory,
+- whether in tort (including negligence), contract, or otherwise,
+- unless required by applicable law (such as deliberate and grossly
+- negligent acts) or agreed to in writing, shall any Contributor be
+- liable to You for damages, including any direct, indirect, special,
+- incidental, or consequential damages of any character arising as a
+- result of this License or out of the use or inability to use the
+- Work (including but not limited to damages for loss of goodwill,
+- work stoppage, computer failure or malfunction, or any and all
+- other commercial damages or losses), even if such Contributor
+- has been advised of the possibility of such damages.
+-
+-9. Accepting Warranty or Additional Liability. While redistributing
+- the Work or Derivative Works thereof, You may choose to offer,
+- and charge a fee for, acceptance of support, warranty, indemnity,
+- or other liability obligations and/or rights consistent with this
+- License. However, in accepting such obligations, You may act only
+- on Your own behalf and on Your sole responsibility, not on behalf
+- of any other Contributor, and only if You agree to indemnify,
+- defend, and hold each Contributor harmless for any liability
+- incurred by, or claims asserted against, such Contributor by reason
+- of your accepting any such warranty or additional liability.
+-
+-END OF TERMS AND CONDITIONS
+-
+-APPENDIX: How to apply the Apache License to your work.
+-
+- To apply the Apache License to your work, attach the following
+- boilerplate notice, with the fields enclosed by brackets "[]"
+- replaced with your own identifying information. (Don't include
+- the brackets!) The text should be enclosed in the appropriate
+- comment syntax for the file format. We also recommend that a
+- file or class name and description of purpose be included on the
+- same "printed page" as the copyright notice for easier
+- identification within third-party archives.
+-
+-Copyright [yyyy] [name of copyright owner]
+-
+-Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
+-
+-Unless required by applicable law or agreed to in writing, software
+-distributed under the License is distributed on an "AS IS" BASIS,
+-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-See the License for the specific language governing permissions and
+-limitations under the License.
+diff --git a/third_party/rust/semver-parser/LICENSE-MIT b/third_party/rust/semver-parser/LICENSE-MIT
+deleted file mode 100644
+--- a/third_party/rust/semver-parser/LICENSE-MIT
++++ /dev/null
+@@ -1,25 +0,0 @@
+-Copyright (c) 2016 Steve Klabnik
+-
+-Permission is hereby granted, free of charge, to any
+-person obtaining a copy of this software and associated
+-documentation files (the "Software"), to deal in the
+-Software without restriction, including without
+-limitation the rights to use, copy, modify, merge,
+-publish, distribute, sublicense, and/or sell copies of
+-the Software, and to permit persons to whom the Software
+-is furnished to do so, subject to the following
+-conditions:
+-
+-The above copyright notice and this permission notice
+-shall be included in all copies or substantial portions
+-of the Software.
+-
+-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+-ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+-TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+-PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+-SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+-IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+-DEALINGS IN THE SOFTWARE.
+diff --git a/third_party/rust/semver-parser/src/common.rs b/third_party/rust/semver-parser/src/common.rs
+deleted file mode 100644
+--- a/third_party/rust/semver-parser/src/common.rs
++++ /dev/null
+@@ -1,66 +0,0 @@
+-use version::Identifier;
+-use recognize::{Recognize, Alt, OneOrMore, Inclusive, OneByte};
+-use std::str::from_utf8;
+-
+-// by the time we get here, we know that it's all valid characters, so this doesn't need to return
+-// a result or anything
+-fn parse_meta(s: &str) -> Vec<Identifier> {
+- // Originally, I wanted to implement this method via calling parse, but parse is tolerant of
+- // leading zeroes, and we want anything with leading zeroes to be considered alphanumeric, not
+- // numeric. So the strategy is to check with a recognizer first, and then call parse once
+- // we've determined that it's a number without a leading zero.
+- s.split(".")
+- .map(|part| {
+- // another wrinkle: we made sure that any number starts with a
+- // non-zero. But there's a problem: an actual zero is a number, yet
+- // gets left out by this heuristic. So let's also check for the
+- // single, lone zero.
+- if is_alpha_numeric(part) {
+- Identifier::AlphaNumeric(part.to_string())
+- } else {
+- // we can unwrap here because we know it is only digits due to the regex
+- Identifier::Numeric(part.parse().unwrap())
+- }
+- }).collect()
+-}
+-
+-// parse optional metadata (preceded by the prefix character)
+-pub fn parse_optional_meta(s: &[u8], prefix_char: u8)-> Result<(Vec<Identifier>, usize), String> {
+- if let Some(len) = prefix_char.p(s) {
+- let start = len;
+- if let Some(len) = letters_numbers_dash_dot(&s[start..]) {
+- let end = start + len;
+- Ok((parse_meta(from_utf8(&s[start..end]).unwrap()), end))
+- } else {
+- Err("Error parsing prerelease".to_string())
+- }
+- } else {
+- Ok((Vec::new(), 0))
+- }
+-}
+-
+-pub fn is_alpha_numeric(s: &str) -> bool {
+- if let Some((_val, len)) = numeric_identifier(s.as_bytes()) {
+- // Return true for number with leading zero
+- // Note: doing it this way also handily makes overflow fail over.
+- len != s.len()
+- } else {
+- true
+- }
+-}
+-
+-// Note: could plumb overflow error up to return value as Result
+-pub fn numeric_identifier(s: &[u8]) -> Option<(u64, usize)> {
+- if let Some(len) = Alt(b'0', OneOrMore(Inclusive(b'0'..b'9'))).p(s) {
+- from_utf8(&s[0..len]).unwrap().parse().ok().map(|val| (val, len))
+- } else {
+- None
+- }
+-}
+-
+-pub fn letters_numbers_dash_dot(s: &[u8]) -> Option<usize> {
+- OneOrMore(OneByte(|c| c == b'-' || c == b'.' ||
+- (b'0' <= c && c <= b'9') ||
+- (b'a' <= c && c <= b'z') ||
+- (b'A' <= c && c <= b'Z'))).p(s)
+-}
+diff --git a/third_party/rust/semver-parser/src/lib.rs b/third_party/rust/semver-parser/src/lib.rs
+deleted file mode 100644
+--- a/third_party/rust/semver-parser/src/lib.rs
++++ /dev/null
+@@ -1,8 +0,0 @@
+-pub mod version;
+-pub mod range;
+-
+-// for private stuff the two share
+-mod common;
+-
+-// for recognizer combinators
+-mod recognize;
+diff --git a/third_party/rust/semver-parser/src/range.rs b/third_party/rust/semver-parser/src/range.rs
+deleted file mode 100644
+--- a/third_party/rust/semver-parser/src/range.rs
++++ /dev/null
+@@ -1,696 +0,0 @@
+-use common::{self, numeric_identifier, letters_numbers_dash_dot};
+-use version::Identifier;
+-use std::str::{FromStr, from_utf8};
+-use recognize::*;
+-
+-#[derive(Debug)]
+-pub struct VersionReq {
+- pub predicates: Vec<Predicate>,
+-}
+-
+-#[derive(PartialEq,Debug)]
+-pub enum WildcardVersion {
+- Major,
+- Minor,
+- Patch,
+-}
+-
+-#[derive(PartialEq,Debug)]
+-pub enum Op {
+- Ex, // Exact
+- Gt, // Greater than
+- GtEq, // Greater than or equal to
+- Lt, // Less than
+- LtEq, // Less than or equal to
+- Tilde, // e.g. ~1.0.0
+- Compatible, // compatible by definition of semver, indicated by ^
+- Wildcard(WildcardVersion), // x.y.*, x.*, *
+-}
+-
+-impl FromStr for Op {
+- type Err = String;
+-
+- fn from_str(s: &str) -> Result<Op, String> {
+- match s {
+- "=" => Ok(Op::Ex),
+- ">" => Ok(Op::Gt),
+- ">=" => Ok(Op::GtEq),
+- "<" => Ok(Op::Lt),
+- "<=" => Ok(Op::LtEq),
+- "~" => Ok(Op::Tilde),
+- "^" => Ok(Op::Compatible),
+- _ => Err(String::from("Could not parse Op")),
+- }
+- }
+-}
+-
+-#[derive(PartialEq,Debug)]
+-pub struct Predicate {
+- pub op: Op,
+- pub major: u64,
+- pub minor: Option<u64>,
+- pub patch: Option<u64>,
+- pub pre: Vec<Identifier>,
+-}
+-
+-fn numeric_or_wild(s: &[u8]) -> Option<(Option<u64>, usize)> {
+- if let Some((val, len)) = numeric_identifier(s) {
+- Some((Some(val), len))
+- } else if let Some(len) = OneOf(b"*xX").p(s) {
+- Some((None, len))
+- } else {
+- None
+- }
+-}
+-
+-fn dot_numeric_or_wild(s: &[u8]) -> Option<(Option<u64>, usize)> {
+- b'.'.p(s).and_then(|len|
+- numeric_or_wild(&s[len..]).map(|(val, len2)| (val, len + len2))
+- )
+-}
+-
+-fn operation(s: &[u8]) -> Option<(Op, usize)> {
+- if let Some(len) = "=".p(s) {
+- Some((Op::Ex, len))
+- } else if let Some(len) = ">=".p(s) {
+- Some((Op::GtEq, len))
+- } else if let Some(len) = ">".p(s) {
+- Some((Op::Gt, len))
+- } else if let Some(len) = "<=".p(s) {
+- Some((Op::LtEq, len))
+- } else if let Some(len) = "<".p(s) {
+- Some((Op::Lt, len))
+- } else if let Some(len) = "~".p(s) {
+- Some((Op::Tilde, len))
+- } else if let Some(len) = "^".p(s) {
+- Some((Op::Compatible, len))
+- } else {
+- None
+- }
+-}
+-
+-fn whitespace(s: &[u8]) -> Option<usize> {
+- ZeroOrMore(OneOf(b"\t\r\n ")).p(s)
+-}
+-
+-pub fn parse_predicate(range: &str) -> Result<Predicate, String> {
+- let s = range.trim().as_bytes();
+- let mut i = 0;
+- let mut operation = if let Some((op, len)) = operation(&s[i..]) {
+- i += len;
+- op
+- } else {
+- // operations default to Compatible
+- Op::Compatible
+- };
+- if let Some(len) = whitespace.p(&s[i..]) {
+- i += len;
+- }
+- let major = if let Some((major, len)) = numeric_identifier(&s[i..]) {
+- i += len;
+- major
+- } else {
+- return Err("Error parsing major version number: ".to_string());
+- };
+- let minor = if let Some((minor, len)) = dot_numeric_or_wild(&s[i..]) {
+- i += len;
+- if minor.is_none() {
+- operation = Op::Wildcard(WildcardVersion::Minor);
+- }
+- minor
+- } else {
+- None
+- };
+- let patch = if let Some((patch, len)) = dot_numeric_or_wild(&s[i..]) {
+- i += len;
+- if patch.is_none() {
+- operation = Op::Wildcard(WildcardVersion::Patch);
+- }
+- patch
+- } else {
+- None
+- };
+- let (pre, pre_len) = common::parse_optional_meta(&s[i..], b'-')?;
+- i += pre_len;
+- if let Some(len) = (b'+', letters_numbers_dash_dot).p(&s[i..]) {
+- i += len;
+- }
+- if i != s.len() {
+- return Err("Extra junk after valid predicate: ".to_string() +
+- from_utf8(&s[i..]).unwrap());
+- }
+- Ok(Predicate {
+- op: operation,
+- major: major,
+- minor: minor,
+- patch: patch,
+- pre: pre,
+- })
+-}
+-
+-pub fn parse(ranges: &str) -> Result<VersionReq, String> {
+- // null is an error
+- if ranges == "\0" {
+- return Err(String::from("Null is not a valid VersionReq"));
+- }
+-
+- // an empty range is a major version wildcard
+- // so is a lone * or x of either capitalization
+- if (ranges == "")
+- || (ranges == "*")
+- || (ranges == "x")
+- || (ranges == "X") {
+- return Ok(VersionReq {
+- predicates: vec![Predicate {
+- op: Op::Wildcard(WildcardVersion::Major),
+- major: 0,
+- minor: None,
+- patch: None,
+- pre: Vec::new(),
+- }],
+- });
+- }
+-
+-
+- let ranges = ranges.trim();
+-
+- let predicates: Result<Vec<_>, String> = ranges
+- .split(",")
+- .map(|range| {
+- parse_predicate(range)
+- })
+- .collect();
+-
+- let predicates = try!(predicates);
+-
+- if predicates.len() == 0 {
+- return Err(String::from("VersionReq did not parse properly"));
+- }
+-
+- Ok(VersionReq {
+- predicates: predicates,
+- })
+-}
+-
+-#[cfg(test)]
+-mod tests {
+- use super::*;
+- use range;
+- use version::Identifier;
+-
+- #[test]
+- fn test_parsing_default() {
+- let r = range::parse("1.0.0").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::Compatible,
+- major: 1,
+- minor: Some(0),
+- patch: Some(0),
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+- }
+-
+- #[test]
+- fn test_parsing_exact_01() {
+- let r = range::parse("=1.0.0").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::Ex,
+- major: 1,
+- minor: Some(0),
+- patch: Some(0),
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+- }
+-
+- #[test]
+- fn test_parsing_exact_02() {
+- let r = range::parse("=0.9.0").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::Ex,
+- major: 0,
+- minor: Some(9),
+- patch: Some(0),
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+- }
+-
+- #[test]
+- fn test_parsing_exact_03() {
+- let r = range::parse("=0.1.0-beta2.a").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::Ex,
+- major: 0,
+- minor: Some(1),
+- patch: Some(0),
+- pre: vec![Identifier::AlphaNumeric(String::from("beta2")),
+- Identifier::AlphaNumeric(String::from("a"))],
+- },
+- r.predicates[0]
+- );
+- }
+-
+- #[test]
+- pub fn test_parsing_greater_than() {
+- let r = range::parse("> 1.0.0").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::Gt,
+- major: 1,
+- minor: Some(0),
+- patch: Some(0),
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+- }
+-
+- #[test]
+- pub fn test_parsing_greater_than_01() {
+- let r = range::parse(">= 1.0.0").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::GtEq,
+- major: 1,
+- minor: Some(0),
+- patch: Some(0),
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+- }
+-
+- #[test]
+- pub fn test_parsing_greater_than_02() {
+- let r = range::parse(">= 2.1.0-alpha2").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::GtEq,
+- major: 2,
+- minor: Some(1),
+- patch: Some(0),
+- pre: vec![Identifier::AlphaNumeric(String::from("alpha2"))],
+- },
+- r.predicates[0]
+- );
+- }
+-
+- #[test]
+- pub fn test_parsing_less_than() {
+- let r = range::parse("< 1.0.0").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::Lt,
+- major: 1,
+- minor: Some(0),
+- patch: Some(0),
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+- }
+-
+- #[test]
+- pub fn test_parsing_less_than_eq() {
+- let r = range::parse("<= 2.1.0-alpha2").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::LtEq,
+- major: 2,
+- minor: Some(1),
+- patch: Some(0),
+- pre: vec![Identifier::AlphaNumeric(String::from("alpha2"))],
+- },
+- r.predicates[0]
+- );
+- }
+-
+- #[test]
+- pub fn test_parsing_tilde() {
+- let r = range::parse("~1").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::Tilde,
+- major: 1,
+- minor: None,
+- patch: None,
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+- }
+-
+- #[test]
+- pub fn test_parsing_compatible() {
+- let r = range::parse("^0").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::Compatible,
+- major: 0,
+- minor: None,
+- patch: None,
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+- }
+-
+- #[test]
+- fn test_parsing_blank() {
+- let r = range::parse("").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::Wildcard(WildcardVersion::Major),
+- major: 0,
+- minor: None,
+- patch: None,
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+- }
+-
+- #[test]
+- fn test_parsing_wildcard() {
+- let r = range::parse("*").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::Wildcard(WildcardVersion::Major),
+- major: 0,
+- minor: None,
+- patch: None,
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+- }
+-
+- #[test]
+- fn test_parsing_x() {
+- let r = range::parse("x").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::Wildcard(WildcardVersion::Major),
+- major: 0,
+- minor: None,
+- patch: None,
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+- }
+-
+- #[test]
+- fn test_parsing_capital_x() {
+- let r = range::parse("X").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::Wildcard(WildcardVersion::Major),
+- major: 0,
+- minor: None,
+- patch: None,
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+- }
+-
+- #[test]
+- fn test_parsing_minor_wildcard_star() {
+- let r = range::parse("1.*").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::Wildcard(WildcardVersion::Minor),
+- major: 1,
+- minor: None,
+- patch: None,
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+- }
+-
+- #[test]
+- fn test_parsing_minor_wildcard_x() {
+- let r = range::parse("1.x").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::Wildcard(WildcardVersion::Minor),
+- major: 1,
+- minor: None,
+- patch: None,
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+- }
+-
+- #[test]
+- fn test_parsing_minor_wildcard_capital_x() {
+- let r = range::parse("1.X").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::Wildcard(WildcardVersion::Minor),
+- major: 1,
+- minor: None,
+- patch: None,
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+- }
+-
+- #[test]
+- fn test_parsing_patch_wildcard_star() {
+- let r = range::parse("1.2.*").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::Wildcard(WildcardVersion::Patch),
+- major: 1,
+- minor: Some(2),
+- patch: None,
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+- }
+-
+- #[test]
+- fn test_parsing_patch_wildcard_x() {
+- let r = range::parse("1.2.x").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::Wildcard(WildcardVersion::Patch),
+- major: 1,
+- minor: Some(2),
+- patch: None,
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+- }
+-
+- #[test]
+- fn test_parsing_patch_wildcard_capital_x() {
+- let r = range::parse("1.2.X").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::Wildcard(WildcardVersion::Patch),
+- major: 1,
+- minor: Some(2),
+- patch: None,
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+- }
+-
+- #[test]
+- pub fn test_multiple_01() {
+- let r = range::parse("> 0.0.9, <= 2.5.3").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::Gt,
+- major: 0,
+- minor: Some(0),
+- patch: Some(9),
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+-
+- assert_eq!(Predicate {
+- op: Op::LtEq,
+- major: 2,
+- minor: Some(5),
+- patch: Some(3),
+- pre: Vec::new(),
+- },
+- r.predicates[1]
+- );
+- }
+-
+- #[test]
+- pub fn test_multiple_02() {
+- let r = range::parse("0.3.0, 0.4.0").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::Compatible,
+- major: 0,
+- minor: Some(3),
+- patch: Some(0),
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+-
+- assert_eq!(Predicate {
+- op: Op::Compatible,
+- major: 0,
+- minor: Some(4),
+- patch: Some(0),
+- pre: Vec::new(),
+- },
+- r.predicates[1]
+- );
+- }
+-
+- #[test]
+- pub fn test_multiple_03() {
+- let r = range::parse("<= 0.2.0, >= 0.5.0").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::LtEq,
+- major: 0,
+- minor: Some(2),
+- patch: Some(0),
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+-
+- assert_eq!(Predicate {
+- op: Op::GtEq,
+- major: 0,
+- minor: Some(5),
+- patch: Some(0),
+- pre: Vec::new(),
+- },
+- r.predicates[1]
+- );
+- }
+-
+- #[test]
+- pub fn test_multiple_04() {
+- let r = range::parse("0.1.0, 0.1.4, 0.1.6").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::Compatible,
+- major: 0,
+- minor: Some(1),
+- patch: Some(0),
+- pre: Vec::new(),
+- },
+- r.predicates[0]
+- );
+-
+- assert_eq!(Predicate {
+- op: Op::Compatible,
+- major: 0,
+- minor: Some(1),
+- patch: Some(4),
+- pre: Vec::new(),
+- },
+- r.predicates[1]
+- );
+-
+- assert_eq!(Predicate {
+- op: Op::Compatible,
+- major: 0,
+- minor: Some(1),
+- patch: Some(6),
+- pre: Vec::new(),
+- },
+- r.predicates[2]
+- );
+- }
+-
+- #[test]
+- pub fn test_multiple_05() {
+- let r = range::parse(">=0.5.1-alpha3, <0.6").unwrap();
+-
+- assert_eq!(Predicate {
+- op: Op::GtEq,
+- major: 0,
+- minor: Some(5),
+- patch: Some(1),
+- pre: vec![Identifier::AlphaNumeric(String::from("alpha3"))],
+- },
+- r.predicates[0]
+- );
+-
+- assert_eq!(Predicate {
+- op: Op::Lt,
+- major: 0,
+- minor: Some(6),
+- patch: None,
+- pre: Vec::new(),
+- },
+- r.predicates[1]
+- );
+- }
+-
+- #[test]
+- fn test_parse_build_metadata_with_predicate() {
+- assert_eq!(range::parse("^1.2.3+meta").unwrap().predicates[0].op,
+- Op::Compatible);
+- assert_eq!(range::parse("~1.2.3+meta").unwrap().predicates[0].op,
+- Op::Tilde);
+- assert_eq!(range::parse("=1.2.3+meta").unwrap().predicates[0].op,
+- Op::Ex);
+- assert_eq!(range::parse("<=1.2.3+meta").unwrap().predicates[0].op,
+- Op::LtEq);
+- assert_eq!(range::parse(">=1.2.3+meta").unwrap().predicates[0].op,
+- Op::GtEq);
+- assert_eq!(range::parse("<1.2.3+meta").unwrap().predicates[0].op,
+- Op::Lt);
+- assert_eq!(range::parse(">1.2.3+meta").unwrap().predicates[0].op,
+- Op::Gt);
+- }
+-
+- #[test]
+- pub fn test_parse_errors() {
+- assert!(range::parse("\0").is_err());
+- assert!(range::parse(">= >= 0.0.2").is_err());
+- assert!(range::parse(">== 0.0.2").is_err());
+- assert!(range::parse("a.0.0").is_err());
+- assert!(range::parse("1.0.0-").is_err());
+- assert!(range::parse(">=").is_err());
+- assert!(range::parse("> 0.1.0,").is_err());
+- assert!(range::parse("> 0.3.0, ,").is_err());
+- }
+-
+- #[test]
+- pub fn test_large_major_version() {
+- assert!(range::parse("18446744073709551617.0.0").is_err());
+- }
+-
+- #[test]
+- pub fn test_large_minor_version() {
+- assert!(range::parse("0.18446744073709551617.0").is_err());
+- }
+-
+- #[test]
+- pub fn test_large_patch_version() {
+- assert!(range::parse("0.0.18446744073709551617").is_err());
+- }
+-}
+diff --git a/third_party/rust/semver-parser/src/recognize.rs b/third_party/rust/semver-parser/src/recognize.rs
+deleted file mode 100644
+--- a/third_party/rust/semver-parser/src/recognize.rs
++++ /dev/null
+@@ -1,154 +0,0 @@
+-// Copyright 2017 Google Inc. All rights reserved.
+-//
+-// Licensed under either of MIT or Apache License, Version 2.0,
+-// at your option.
+-//
+-// Use of this source code is governed by a MIT-style
+-// license that can be found in the LICENSE file or at
+-// https://opensource.org/licenses/MIT.
+-//
+-// Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
+-//
+-// Unless required by applicable law or agreed to in writing, software
+-// distributed under the License is distributed on an "AS IS" BASIS,
+-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-// See the License for the specific language governing permissions and
+-// limitations under the License.
+-
+-//! Simple recognizer combinators.
+-
+-// This version is similar to a similar one in the "lang" module of
+-// xi-editor, but is stripped down to only the needed combinators.
+-
+-use std::ops;
+-
+-pub trait Recognize {
+- fn p(&self, s: &[u8]) -> Option<usize>;
+-}
+-
+-impl<F: Fn(&[u8]) -> Option<usize>> Recognize for F {
+- #[inline(always)]
+- fn p(&self, s: &[u8]) -> Option<usize> {
+- self(s)
+- }
+-}
+-
+-pub struct OneByte<F>(pub F);
+-
+-impl<F: Fn(u8) -> bool> Recognize for OneByte<F> {
+- #[inline(always)]
+- fn p(&self, s: &[u8]) -> Option<usize> {
+- if s.is_empty() || !self.0(s[0]) {
+- None
+- } else {
+- Some(1)
+- }
+- }
+-}
+-
+-impl Recognize for u8 {
+- #[inline(always)]
+- fn p(&self, s: &[u8]) -> Option<usize> {
+- OneByte(|b| b == *self).p(s)
+- }
+-}
+-
+-/// Use Inclusive(a..b) to indicate an inclusive range. When a...b syntax becomes
+-/// stable, we can get rid of this and switch to that.
+-pub struct Inclusive<T>(pub T);
+-
+-impl Recognize for Inclusive<ops::Range<u8>> {
+- #[inline(always)]
+- fn p(&self, s: &[u8]) -> Option<usize> {
+- OneByte(|x| x >= self.0.start && x <= self.0.end).p(s)
+- }
+-}
+-
+-impl<'a> Recognize for &'a [u8] {
+- #[inline(always)]
+- fn p(&self, s: &[u8]) -> Option<usize> {
+- let len = self.len();
+- if s.len() >= len && &s[..len] == *self {
+- Some(len)
+- } else {
+- None
+- }
+- }
+-}
+-
+-impl<'a> Recognize for &'a str {
+- #[inline(always)]
+- fn p(&self, s: &[u8]) -> Option<usize> {
+- self.as_bytes().p(s)
+- }
+-}
+-
+-impl<P1: Recognize, P2: Recognize> Recognize for (P1, P2) {
+- #[inline(always)]
+- fn p(&self, s: &[u8]) -> Option<usize> {
+- self.0.p(s).and_then(|len1|
+- self.1.p(&s[len1..]).map(|len2|
+- len1 + len2))
+- }
+-}
+-
+-/// Choice from two heterogeneous alternatives.
+-pub struct Alt<P1, P2>(pub P1, pub P2);
+-
+-impl<P1: Recognize, P2: Recognize> Recognize for Alt<P1, P2> {
+- #[inline(always)]
+- fn p(&self, s: &[u8]) -> Option<usize> {
+- self.0.p(s).or_else(|| self.1.p(s))
+- }
+-}
+-
+-/// Choice from a homogenous slice of parsers.
+-pub struct OneOf<'a, P: 'a>(pub &'a [P]);
+-
+-impl<'a, P: Recognize> Recognize for OneOf<'a, P> {
+- #[inline]
+- fn p(&self, s: &[u8]) -> Option<usize> {
+- for ref p in self.0 {
+- if let Some(len) = p.p(s) {
+- return Some(len);
+- }
+- }
+- None
+- }
+-}
+-
+-pub struct OneOrMore<P>(pub P);
+-
+-impl<P: Recognize> Recognize for OneOrMore<P> {
+- #[inline]
+- fn p(&self, s: &[u8]) -> Option<usize> {
+- let mut i = 0;
+- let mut count = 0;
+- while let Some(len) = self.0.p(&s[i..]) {
+- i += len;
+- count += 1;
+- }
+- if count >= 1 {
+- Some(i)
+- } else {
+- None
+- }
+- }
+-}
+-
+-pub struct ZeroOrMore<P>(pub P);
+-
+-impl<P: Recognize> Recognize for ZeroOrMore<P> {
+- #[inline]
+- fn p(&self, s: &[u8]) -> Option<usize> {
+- let mut i = 0;
+- while let Some(len) = self.0.p(&s[i..]) {
+- i += len;
+- }
+- Some(i)
+- }
+-}
+diff --git a/third_party/rust/semver-parser/src/version.rs b/third_party/rust/semver-parser/src/version.rs
+deleted file mode 100644
+--- a/third_party/rust/semver-parser/src/version.rs
++++ /dev/null
+@@ -1,365 +0,0 @@
+-use std::fmt;
+-use std::str::from_utf8;
+-
+-use recognize::*;
+-
+-use common::{self, numeric_identifier};
+-
+-#[derive(Clone, Debug, PartialEq, Eq)]
+-pub struct Version {
+- pub major: u64,
+- pub minor: u64,
+- pub patch: u64,
+- pub pre: Vec<Identifier>,
+- pub build: Vec<Identifier>,
+-}
+-
+-#[derive(Clone, Debug, PartialEq, Eq)]
+-pub enum Identifier {
+- /// An identifier that's solely numbers.
+- Numeric(u64),
+- /// An identifier with letters and numbers.
+- AlphaNumeric(String),
+-}
+-
+-pub fn parse(version: &str) -> Result<Version, String> {
+- let s = version.trim().as_bytes();
+- let mut i = 0;
+- let major = if let Some((major, len)) = numeric_identifier(&s[i..]) {
+- i += len;
+- major
+- } else {
+- return Err("Error parsing major identifier".to_string());
+- };
+- if let Some(len) = b'.'.p(&s[i..]) {
+- i += len;
+- } else {
+- return Err("Expected dot".to_string());
+- }
+- let minor = if let Some((minor, len)) = numeric_identifier(&s[i..]) {
+- i += len;
+- minor
+- } else {
+- return Err("Error parsing minor identifier".to_string());
+- };
+- if let Some(len) = b'.'.p(&s[i..]) {
+- i += len;
+- } else {
+- return Err("Expected dot".to_string());
+- }
+- let patch = if let Some((patch, len)) = numeric_identifier(&s[i..]) {
+- i += len;
+- patch
+- } else {
+- return Err("Error parsing patch identifier".to_string());
+- };
+- let (pre, pre_len) = common::parse_optional_meta(&s[i..], b'-')?;
+- i += pre_len;
+- let (build, build_len) = common::parse_optional_meta(&s[i..], b'+')?;
+- i += build_len;
+- if i != s.len() {
+- return Err("Extra junk after valid version: ".to_string() +
+- from_utf8(&s[i..]).unwrap());
+- }
+- Ok(Version {
+- major: major,
+- minor: minor,
+- patch: patch,
+- pre: pre,
+- build: build,
+- })
+-}
+-
+-impl fmt::Display for Version {
+- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- try!(write!(f, "{}.{}.{}", self.major, self.minor, self.patch));
+- if !self.pre.is_empty() {
+- let strs: Vec<_> =
+- self.pre.iter().map(ToString::to_string).collect();
+- try!(write!(f, "-{}", strs.join(".")));
+- }
+- if !self.build.is_empty() {
+- let strs: Vec<_> =
+- self.build.iter().map(ToString::to_string).collect();
+- try!(write!(f, "+{}", strs.join(".")));
+- }
+- Ok(())
+- }
+-}
+-
+-impl fmt::Display for Identifier {
+- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- match *self {
+- Identifier::Numeric(ref id) => id.fmt(f),
+- Identifier::AlphaNumeric(ref id) => id.fmt(f),
+- }
+- }
+-}
+-
+-#[cfg(test)]
+-mod tests {
+- use version;
+- use super::*;
+-
+- #[test]
+- fn parse_empty() {
+- let version = "";
+-
+- let parsed = version::parse(version);
+-
+- assert!(parsed.is_err(), "empty string incorrectly considered a valid parse");
+- }
+-
+- #[test]
+- fn parse_blank() {
+- let version = " ";
+-
+- let parsed = version::parse(version);
+-
+- assert!(parsed.is_err(), "blank string incorrectly considered a valid parse");
+- }
+-
+- #[test]
+- fn parse_no_minor_patch() {
+- let version = "1";
+-
+- let parsed = version::parse(version);
+-
+- assert!(parsed.is_err(), format!("'{}' incorrectly considered a valid parse", version));
+- }
+-
+- #[test]
+- fn parse_no_patch() {
+- let version = "1.2";
+-
+- let parsed = version::parse(version);
+-
+- assert!(parsed.is_err(), format!("'{}' incorrectly considered a valid parse", version));
+- }
+-
+- #[test]
+- fn parse_empty_pre() {
+- let version = "1.2.3-";
+-
+- let parsed = version::parse(version);
+-
+- assert!(parsed.is_err(), format!("'{}' incorrectly considered a valid parse", version));
+- }
+-
+- #[test]
+- fn parse_letters() {
+- let version = "a.b.c";
+-
+- let parsed = version::parse(version);
+-
+- assert!(parsed.is_err(), format!("'{}' incorrectly considered a valid parse", version));
+- }
+-
+- #[test]
+- fn parse_with_letters() {
+- let version = "1.2.3 a.b.c";
+-
+- let parsed = version::parse(version);
+-
+- assert!(parsed.is_err(), format!("'{}' incorrectly considered a valid parse", version));
+- }
+-
+- #[test]
+- fn parse_basic_version() {
+- let version = "1.2.3";
+-
+- let parsed = version::parse(version).unwrap();
+-
+- assert_eq!(1, parsed.major);
+- assert_eq!(2, parsed.minor);
+- assert_eq!(3, parsed.patch);
+- }
+-
+- #[test]
+- fn parse_trims_input() {
+- let version = " 1.2.3 ";
+-
+- let parsed = version::parse(version).unwrap();
+-
+- assert_eq!(1, parsed.major);
+- assert_eq!(2, parsed.minor);
+- assert_eq!(3, parsed.patch);
+- }
+-
+- #[test]
+- fn parse_no_major_leading_zeroes() {
+- let version = "01.0.0";
+-
+- let parsed = version::parse(version);
+-
+- assert!(parsed.is_err(), "01 incorrectly considered a valid major version");
+- }
+-
+- #[test]
+- fn parse_no_minor_leading_zeroes() {
+- let version = "0.01.0";
+-
+- let parsed = version::parse(version);
+-
+- assert!(parsed.is_err(), "01 incorrectly considered a valid minor version");
+- }
+-
+- #[test]
+- fn parse_no_patch_leading_zeroes() {
+- let version = "0.0.01";
+-
+- let parsed = version::parse(version);
+-
+- assert!(parsed.is_err(), "01 incorrectly considered a valid patch version");
+- }
+-
+- #[test]
+- fn parse_no_major_overflow() {
+- let version = "98765432109876543210.0.0";
+-
+- let parsed = version::parse(version);
+-
+- assert!(parsed.is_err(), "98765432109876543210 incorrectly considered a valid major version");
+- }
+-
+- #[test]
+- fn parse_no_minor_overflow() {
+- let version = "0.98765432109876543210.0";
+-
+- let parsed = version::parse(version);
+-
+- assert!(parsed.is_err(), "98765432109876543210 incorrectly considered a valid minor version");
+- }
+-
+- #[test]
+- fn parse_no_patch_overflow() {
+- let version = "0.0.98765432109876543210";
+-
+- let parsed = version::parse(version);
+-
+- assert!(parsed.is_err(), "98765432109876543210 incorrectly considered a valid patch version");
+- }
+-
+- #[test]
+- fn parse_basic_prerelease() {
+- let version = "1.2.3-pre";
+-
+- let parsed = version::parse(version).unwrap();
+-
+- let expected_pre = vec![Identifier::AlphaNumeric(String::from("pre"))];
+- assert_eq!(expected_pre, parsed.pre);
+- }
+-
+- #[test]
+- fn parse_prerelease_alphanumeric() {
+- let version = "1.2.3-alpha1";
+-
+- let parsed = version::parse(version).unwrap();
+-
+- let expected_pre = vec![Identifier::AlphaNumeric(String::from("alpha1"))];
+- assert_eq!(expected_pre, parsed.pre);
+- }
+-
+- #[test]
+- fn parse_prerelease_zero() {
+- let version = "1.2.3-pre.0";
+-
+- let parsed = version::parse(version).unwrap();
+-
+- let expected_pre = vec![Identifier::AlphaNumeric(String::from("pre")),
+- Identifier::Numeric(0)];
+- assert_eq!(expected_pre, parsed.pre);
+- }
+-
+- #[test]
+- fn parse_basic_build() {
+- let version = "1.2.3+build";
+-
+- let parsed = version::parse(version).unwrap();
+-
+- let expected_build = vec![Identifier::AlphaNumeric(String::from("build"))];
+- assert_eq!(expected_build, parsed.build);
+- }
+-
+- #[test]
+- fn parse_build_alphanumeric() {
+- let version = "1.2.3+build5";
+-
+- let parsed = version::parse(version).unwrap();
+-
+- let expected_build = vec![Identifier::AlphaNumeric(String::from("build5"))];
+- assert_eq!(expected_build, parsed.build);
+- }
+-
+- #[test]
+- fn parse_pre_and_build() {
+- let version = "1.2.3-alpha1+build5";
+-
+- let parsed = version::parse(version).unwrap();
+-
+- let expected_pre = vec![Identifier::AlphaNumeric(String::from("alpha1"))];
+- assert_eq!(expected_pre, parsed.pre);
+-
+- let expected_build = vec![Identifier::AlphaNumeric(String::from("build5"))];
+- assert_eq!(expected_build, parsed.build);
+- }
+-
+- #[test]
+- fn parse_complex_metadata_01() {
+- let version = "1.2.3-1.alpha1.9+build5.7.3aedf ";
+-
+- let parsed = version::parse(version).unwrap();
+-
+- let expected_pre = vec![Identifier::Numeric(1),
+- Identifier::AlphaNumeric(String::from("alpha1")),
+- Identifier::Numeric(9)];
+- assert_eq!(expected_pre, parsed.pre);
+-
+- let expected_build = vec![Identifier::AlphaNumeric(String::from("build5")),
+- Identifier::Numeric(7),
+- Identifier::AlphaNumeric(String::from("3aedf"))];
+- assert_eq!(expected_build, parsed.build);
+- }
+-
+- #[test]
+- fn parse_complex_metadata_02() {
+- let version = "0.4.0-beta.1+0851523";
+-
+- let parsed = version::parse(version).unwrap();
+-
+- let expected_pre = vec![Identifier::AlphaNumeric(String::from("beta")),
+- Identifier::Numeric(1)];
+- assert_eq!(expected_pre, parsed.pre);
+-
+- let expected_build = vec![Identifier::AlphaNumeric(String::from("0851523"))];
+- assert_eq!(expected_build, parsed.build);
+- }
+-
+- #[test]
+- fn parse_metadata_overflow() {
+- let version = "0.4.0-beta.1+98765432109876543210";
+-
+- let parsed = version::parse(version).unwrap();
+-
+- let expected_pre = vec![Identifier::AlphaNumeric(String::from("beta")),
+- Identifier::Numeric(1)];
+- assert_eq!(expected_pre, parsed.pre);
+-
+- let expected_build = vec![Identifier::AlphaNumeric(String::from("98765432109876543210"))];
+- assert_eq!(expected_build, parsed.build);
+- }
+-
+- #[test]
+- fn parse_regression_01() {
+- let version = "0.0.0-WIP";
+-
+- let parsed = version::parse(version).unwrap();
+-
+- assert_eq!(0, parsed.major);
+- assert_eq!(0, parsed.minor);
+- assert_eq!(0, parsed.patch);
+-
+- let expected_pre = vec![Identifier::AlphaNumeric(String::from("WIP"))];
+- assert_eq!(expected_pre, parsed.pre);
+- }
+-}
+diff --git a/third_party/rust/semver/.cargo-checksum.json b/third_party/rust/semver/.cargo-checksum.json
+--- a/third_party/rust/semver/.cargo-checksum.json
++++ b/third_party/rust/semver/.cargo-checksum.json
+@@ -1,1 +1,1 @@
+-{"files":{"Cargo.toml":"a5b995796b5559de8975a6fee7166c9fda6c21b449ec90bef5f9baaeddd479a5","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"c780d8c3c802c5fe2c316127900385010c3e57f71c851eea9e8ed8495e2030dd","src/lib.rs":"cb1725a8bb90c1043f187c6ba504d0a9d07793e2f39f5205f926c58849311770","src/version.rs":"ffdf9c628597b889f149f3b2b1245b97c774eae1ce7030bd19235eabecaaede0","src/version_req.rs":"40d20720f5fdc0b3d9e398e64eb448a65987229bd322cab0fedf0cf1843f3bd8","tests/deprecation.rs":"b5ec79e19d61968d05b96b876c449e54d43cbd1762c6e63c23c3470f9db56292","tests/regression.rs":"180b699ad029b81e6135d42f0a8e6d782177bc29a41132f875ee6f8607a46b56","tests/serde.rs":"cdbbefc576ffcc814c30dad9598ab87a7fd9d14c5f42f1349e1db6afc72f8fed"},"package":"1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"}
+\ No newline at end of file
++{"files":{"Cargo.toml":"2a2126f8fe5d20540ae6cfbf6649ed3af365ffb9a0a788a7552a6e7649a7a75f","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"57659341319915482c0b83779fb7f3f0f3accb7a8b881965799116afb5e9f7e9","benches/parse.rs":"6531f66f80ce2fc83878f9bf84f94c42e96f1e709466f2b88be8d95a3cec1511","build.rs":"47b42941210d44567c8561107420d7825aa1d01332c2d2f8892d9e20646a1c77","src/backport.rs":"f8866548840434c8974f135528693f25aacc4ad03639c4e3aea3be351e13fdf8","src/display.rs":"9ba42f7a6579aa9c7dd72f2380036f5c9664592f3eacd09ea25cef291a3e64e5","src/error.rs":"3bb489f4a29f38d93370e64ae8d6e4e9b451a055cd7d392b6aeacab7eb3e1953","src/eval.rs":"b7e7ec976051b9f87ddf5cfdbaad64654d98d86ae0763f7d88b14eeaeac6013c","src/identifier.rs":"601231351ac58602b7d193cb0951b5146bd868b62aba938d5cbe52cf2b93414b","src/impls.rs":"79b5a2ac6ca3d4cb46adfb1494756079f53bef780dd81c3a8d3adf86f91395c8","src/lib.rs":"8e116a19e521909f3fa50206c078f1e23bf033dc8057ba6101f80d5bc5900fed","src/parse.rs":"93593f62cdae489feb4f2e8ae1fa93d90dca63db50669b6265346ffaaf687be5","src/serde.rs":"970d343a6bac21ddd965168d3cc2af9998796bf29bf545e8b37c6bcdd97d9710","tests/node/mod.rs":"2710d9b8daace2038b66db0f8f4cc522dee938e7cbc42d7739c31995343c32f4","tests/test_autotrait.rs":"070500c32ceee14a8a0110c04a01f98278b24614a0aec8c382dcea3da0343f58","tests/test_identifier.rs":"6c3da46c73df210527b60f1069131b15e2c65eb7b5d11793940d00cf66812f4d","tests/test_version.rs":"09e37c3df162205acf3683d1c760a6001e34e1c709fd4a1a265d82450e340003","tests/test_version_req.rs":"b6eea0258cc3b6d567a9f6c42693a97316345083495236c47e85374fd45f7cf0","tests/util/mod.rs":"db61c2cd86af864d8be4f2a3d5f25c86d7712201cc6ab47b715facf5f7f275b7"},"package":"8cb243bdfdb5936c8dc3c45762a19d12ab4550cdc753bc247637d4ec35a040fd"}
+\ No newline at end of file
+diff --git a/third_party/rust/semver/Cargo.toml b/third_party/rust/semver/Cargo.toml
+--- a/third_party/rust/semver/Cargo.toml
++++ b/third_party/rust/semver/Cargo.toml
+@@ -1,45 +1,38 @@
+ # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
+ #
+ # When uploading crates to the registry Cargo will automatically
+ # "normalize" Cargo.toml files for maximal compatibility
+ # with all versions of Cargo and also rewrite `path` dependencies
+-# to registry (e.g. crates.io) dependencies
++# to registry (e.g., crates.io) dependencies.
+ #
+-# If you believe there's an error in this file please file an
+-# issue against the rust-lang/cargo repository. If you're
+-# editing this file be aware that the upstream Cargo.toml
+-# will likely look very different (and much more reasonable)
++# If you are reading this file be aware that the original Cargo.toml
++# will likely look very different (and much more reasonable).
++# See Cargo.toml.orig for the original contents.
+
+ [package]
++edition = "2018"
++rust-version = "1.31"
+ name = "semver"
+-version = "0.9.0"
+-authors = ["Steve Klabnik <steve(a)steveklabnik.com>", "The Rust Project Developers"]
+-description = "Semantic version parsing and comparison.\n"
+-homepage = "https://docs.rs/crate/semver/"
+-documentation = "https://docs.rs/crate/semver/"
++version = "1.0.9"
++authors = ["David Tolnay <dtolnay(a)gmail.com>"]
++description = "Parser and evaluator for Cargo's flavor of Semantic Versioning"
++documentation = "https://docs.rs/semver"
+ readme = "README.md"
+-license = "MIT/Apache-2.0"
+-repository = "https://github.com/steveklabnik/semver"
+-[dependencies.semver-parser]
+-version = "0.7.0"
++license = "MIT OR Apache-2.0"
++repository = "https://github.com/dtolnay/semver"
++
++[package.metadata.docs.rs]
++targets = ["x86_64-unknown-linux-gnu"]
++rustdoc-args = [
++ "--cfg",
++ "doc_cfg",
++]
+
+ [dependencies.serde]
+ version = "1.0"
+ optional = true
+-[dev-dependencies.crates-index]
+-version = "0.5.0"
+-
+-[dev-dependencies.serde_json]
+-version = "1.0"
+-
+-[dev-dependencies.serde_derive]
+-version = "1.0"
+-
+-[dev-dependencies.tempdir]
+-version = "0.3.4"
++default-features = false
+
+ [features]
+-default = []
+-ci = ["serde"]
+-[badges.travis-ci]
+-repository = "steveklabnik/semver"
++default = ["std"]
++std = []
+diff --git a/third_party/rust/semver/LICENSE-MIT b/third_party/rust/semver/LICENSE-MIT
+--- a/third_party/rust/semver/LICENSE-MIT
++++ b/third_party/rust/semver/LICENSE-MIT
+@@ -1,10 +1,8 @@
+-Copyright (c) 2014 The Rust Project Developers
+-
+ Permission is hereby granted, free of charge, to any
+ person obtaining a copy of this software and associated
+ documentation files (the "Software"), to deal in the
+ Software without restriction, including without
+ limitation the rights to use, copy, modify, merge,
+ publish, distribute, sublicense, and/or sell copies of
+ the Software, and to permit persons to whom the Software
+ is furnished to do so, subject to the following
+diff --git a/third_party/rust/semver/README.md b/third_party/rust/semver/README.md
+--- a/third_party/rust/semver/README.md
++++ b/third_party/rust/semver/README.md
+@@ -1,103 +1,84 @@
+ semver
+ ======
+
+-Semantic version parsing and comparison.
+-
+-[![Build Status](https://api.travis-ci.org/steveklabnik/semver.svg?branch=master)](h…
+-
+-[Documentation](https://steveklabnik.github.io/semver)
+-
+-Semantic versioning (see http://semver.org/) is a set of rules for
+-assigning version numbers.
++[<img alt="github" src="https://img.shields.io/badge/github-dtolnay/semver-8da0cb?style=for-the-bad…" height="20">](https://github.com/dtolnay/semver)
++[<img alt="crates.io" src="https://img.shields.io/crates/v/semver.svg?style=for-the-badge&color=fc8d62…" height="20">](https://crates.io/crates/semver)
++[<img alt="docs.rs" src="https://img.shields.io/badge/docs.rs-semver-66c2a5?style=for-the-badge&labe…" height="20">](https://docs.rs/semver)
++[<img alt="build status" src="https://img.shields.io/github/workflow/status/dtolnay/semver/CI/master?styl…" height="20">](https://github.com/dtolnay/semver/actions?query=branch%3Amaster)
+
+-## SemVer and the Rust ecosystem
+-
+-Rust itself follows the SemVer specification, as does its standard libraries. The two are
+-not tied together.
++A parser and evaluator for Cargo's flavor of Semantic Versioning.
+
+-[Cargo](https://crates.io), Rust's package manager, uses SemVer to determine which versions of
+-packages you need installed.
+-
+-## Installation
+-
+-To use `semver`, add this to your `[dependencies]` section:
++Semantic Versioning (see <https://semver.org>) is a guideline for how version
++numbers are assigned and incremented. It is widely followed within the
++Cargo/crates.io ecosystem for Rust.
+
+ ```toml
+-semver = "0.7.0"
+-```
+-
+-And this to your crate root:
+-
+-```rust
+-extern crate semver;
+-```
+-
+-## Versions
+-
+-At its simplest, the `semver` crate allows you to construct `Version` objects using the `parse`
+-method:
+-
+-```rust
+-use semver::Version;
+-
+-assert!(Version::parse("1.2.3") == Ok(Version {
+- major: 1,
+- minor: 2,
+- patch: 3,
+- pre: vec!(),
+- build: vec!(),
+-}));
++[dependencies]
++semver = "1.0"
+ ```
+
+-If you have multiple `Version`s, you can use the usual comparison operators to compare them:
+-
+-```rust
+-use semver::Version;
++*Compiler support: requires rustc 1.31+*
+
+-assert!(Version::parse("1.2.3-alpha") != Version::parse("1.2.3-beta"));
+-assert!(Version::parse("1.2.3-alpha2") > Version::parse("1.2.0"));
+-```
+-
+-## Requirements
++<br>
+
+-The `semver` crate also provides the ability to compare requirements, which are more complex
+-comparisons.
+-
+-For example, creating a requirement that only matches versions greater than or
+-equal to 1.0.0:
++## Example
+
+ ```rust
+-use semver::Version;
+-use semver::VersionReq;
++use semver::{BuildMetadata, Prerelease, Version, VersionReq};
++
++fn main() {
++ let req = VersionReq::parse(">=1.2.3, <1.8.0").unwrap();
+
+-let r = VersionReq::parse(">= 1.0.0").unwrap();
+-let v = Version::parse("1.0.0").unwrap();
++ // Check whether this requirement matches version 1.2.3-alpha.1 (no)
++ let version = Version {
++ major: 1,
++ minor: 2,
++ patch: 3,
++ pre: Prerelease::new("alpha.1").unwrap(),
++ build: BuildMetadata::EMPTY,
++ };
++ assert!(!req.matches(&version));
+
+-assert!(r.to_string() == ">= 1.0.0".to_string());
+-assert!(r.matches(&v))
++ // Check whether it matches 1.3.0 (yes it does)
++ let version = Version::parse("1.3.0").unwrap();
++ assert!(req.matches(&version));
++}
+ ```
+
+-It also allows parsing of `~x.y.z` and `^x.y.z` requirements as defined at
+-https://www.npmjs.org/doc/misc/semver.html
++<br>
++
++## Scope of this crate
+
+-**Tilde requirements** specify a minimal version with some updates:
++Besides Cargo, several other package ecosystems and package managers for other
++languages also use SemVer: RubyGems/Bundler for Ruby, npm for JavaScript,
++Composer for PHP, CocoaPods for Objective-C...
+
+-```notrust
+-~1.2.3 := >=1.2.3 <1.3.0
+-~1.2 := >=1.2.0 <1.3.0
+-~1 := >=1.0.0 <2.0.0
+-```
++The `semver` crate is specifically intended to implement Cargo's interpretation
++of Semantic Versioning.
++
++Where the various tools differ in their interpretation or implementation of the
++spec, this crate follows the implementation choices made by Cargo. If you are
++operating on version numbers from some other package ecosystem, you will want to
++use a different semver library which is appropriate to that ecosystem.
++
++The extent of Cargo's SemVer support is documented in the *[Specifying
++Dependencies]* chapter of the Cargo reference.
+
+-**Caret requirements** allow SemVer compatible updates to a specified version,
+-`0.x` and `0.x+1` are not considered compatible, but `1.x` and `1.x+1` are.
++[Specifying Dependencies]: https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html
+
+-`0.0.x` is not considered compatible with any other version.
+-Missing minor and patch versions are desugared to `0` but allow flexibility for that value.
++<br>
++
++#### License
+
+-```notrust
+-^1.2.3 := >=1.2.3 <2.0.0
+-^0.2.3 := >=0.2.3 <0.3.0
+-^0.0.3 := >=0.0.3 <0.0.4
+-^0.0 := >=0.0.0 <0.1.0
+-^0 := >=0.0.0 <1.0.0
+-```
++<sup>
++Licensed under either of <a href="LICENSE-APACHE">Apache License, Version
++2.0</a> or <a href="LICENSE-MIT">MIT license</a> at your option.
++</sup>
++
++<br>
++
++<sub>
++Unless you explicitly state otherwise, any contribution intentionally submitted
++for inclusion in this crate by you, as defined in the Apache-2.0 license, shall
++be dual licensed as above, without any additional terms or conditions.
++</sub>
+diff --git a/third_party/rust/semver/benches/parse.rs b/third_party/rust/semver/benches/parse.rs
+new file mode 100644
+--- /dev/null
++++ b/third_party/rust/semver/benches/parse.rs
+@@ -0,0 +1,24 @@
++#![feature(test)]
++
++extern crate test;
++
++use semver::{Prerelease, Version, VersionReq};
++use test::{black_box, Bencher};
++
++#[bench]
++fn parse_prerelease(b: &mut Bencher) {
++ let text = "x.7.z.92";
++ b.iter(|| black_box(text).parse::<Prerelease>().unwrap());
++}
++
++#[bench]
++fn parse_version(b: &mut Bencher) {
++ let text = "1.0.2021-beta+exp.sha.5114f85";
++ b.iter(|| black_box(text).parse::<Version>().unwrap());
++}
++
++#[bench]
++fn parse_version_req(b: &mut Bencher) {
++ let text = ">=1.2.3, <2.0.0";
++ b.iter(|| black_box(text).parse::<VersionReq>().unwrap());
++}
+diff --git a/third_party/rust/semver/build.rs b/third_party/rust/semver/build.rs
+new file mode 100644
+--- /dev/null
++++ b/third_party/rust/semver/build.rs
+@@ -0,0 +1,73 @@
++use std::env;
++use std::process::Command;
++use std::str;
++
++fn main() {
++ let compiler = match rustc_minor_version() {
++ Some(compiler) => compiler,
++ None => return,
++ };
++
++ if compiler < 33 {
++ // Exhaustive integer patterns. On older compilers, a final `_` arm is
++ // required even if every possible integer value is otherwise covered.
++ // https://github.com/rust-lang/rust/issues/50907
++ println!("cargo:rustc-cfg=no_exhaustive_int_match");
++ }
++
++ if compiler < 36 {
++ // extern crate alloc.
++ // https://blog.rust-lang.org/2019/07/04/Rust-1.36.0.html#the-alloc-crate-is-s…
++ println!("cargo:rustc-cfg=no_alloc_crate");
++ }
++
++ if compiler < 39 {
++ // const Vec::new.
++ // https://doc.rust-lang.org/std/vec/struct.Vec.html#method.new
++ println!("cargo:rustc-cfg=no_const_vec_new");
++ }
++
++ if compiler < 40 {
++ // #[non_exhaustive].
++ // https://blog.rust-lang.org/2019/12/19/Rust-1.40.0.html#non_exhaustive-struc…
++ println!("cargo:rustc-cfg=no_non_exhaustive");
++ }
++
++ if compiler < 45 {
++ // String::strip_prefix.
++ // https://doc.rust-lang.org/std/primitive.str.html#method.repeat
++ println!("cargo:rustc-cfg=no_str_strip_prefix");
++ }
++
++ if compiler < 46 {
++ // #[track_caller].
++ // https://blog.rust-lang.org/2020/08/27/Rust-1.46.0.html#track_caller
++ println!("cargo:rustc-cfg=no_track_caller");
++ }
++
++ if compiler < 52 {
++ // #![deny(unsafe_op_in_unsafe_fn)].
++ // https://github.com/rust-lang/rust/issues/71668
++ println!("cargo:rustc-cfg=no_unsafe_op_in_unsafe_fn_lint");
++ }
++
++ if compiler < 53 {
++ // Efficient intrinsics for count-leading-zeros and count-trailing-zeros
++ // on NonZero integers stabilized in 1.53.0. On many architectures these
++ // are more efficient than counting zeros on ordinary zeroable integers.
++ // https://doc.rust-lang.org/std/num/struct.NonZeroU64.html#method.leading_zer…
++ // https://doc.rust-lang.org/std/num/struct.NonZeroU64.html#method.trailing_ze…
++ println!("cargo:rustc-cfg=no_nonzero_bitscan");
++ }
++}
++
++fn rustc_minor_version() -> Option<u32> {
++ let rustc = env::var_os("RUSTC")?;
++ let output = Command::new(rustc).arg("--version").output().ok()?;
++ let version = str::from_utf8(&output.stdout).ok()?;
++ let mut pieces = version.split('.');
++ if pieces.next() != Some("rustc 1") {
++ return None;
++ }
++ pieces.next()?.parse().ok()
++}
+diff --git a/third_party/rust/semver/src/backport.rs b/third_party/rust/semver/src/backport.rs
+new file mode 100644
+--- /dev/null
++++ b/third_party/rust/semver/src/backport.rs
+@@ -0,0 +1,51 @@
++#[cfg(no_str_strip_prefix)] // rustc <1.45
++pub(crate) trait StripPrefixExt {
++ fn strip_prefix(&self, ch: char) -> Option<&str>;
++}
++
++#[cfg(no_str_strip_prefix)]
++impl StripPrefixExt for str {
++ fn strip_prefix(&self, ch: char) -> Option<&str> {
++ if self.starts_with(ch) {
++ Some(&self[ch.len_utf8()..])
++ } else {
++ None
++ }
++ }
++}
++
++pub(crate) use crate::alloc::vec::Vec;
++
++#[cfg(no_alloc_crate)] // rustc <1.36
++pub(crate) mod alloc {
++ pub use std::vec;
++
++ pub mod alloc {
++ use std::mem;
++
++ pub struct Layout {
++ size: usize,
++ }
++
++ impl Layout {
++ pub unsafe fn from_size_align_unchecked(size: usize, align: usize) -> Self {
++ assert_eq!(align, 2);
++ Layout { size }
++ }
++ }
++
++ pub unsafe fn alloc(layout: Layout) -> *mut u8 {
++ let len_u16 = (layout.size + 1) / 2;
++ let mut vec = Vec::new();
++ vec.reserve_exact(len_u16);
++ let ptr: *mut u16 = vec.as_mut_ptr();
++ mem::forget(vec);
++ ptr as *mut u8
++ }
++
++ pub unsafe fn dealloc(ptr: *mut u8, layout: Layout) {
++ let len_u16 = (layout.size + 1) / 2;
++ unsafe { Vec::from_raw_parts(ptr as *mut u16, 0, len_u16) };
++ }
++ }
++}
+diff --git a/third_party/rust/semver/src/display.rs b/third_party/rust/semver/src/display.rs
+new file mode 100644
+--- /dev/null
++++ b/third_party/rust/semver/src/display.rs
+@@ -0,0 +1,165 @@
++use crate::{BuildMetadata, Comparator, Op, Prerelease, Version, VersionReq};
++use core::fmt::{self, Alignment, Debug, Display, Write};
++
++impl Display for Version {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let do_display = |formatter: &mut fmt::Formatter| -> fmt::Result {
++ write!(formatter, "{}.{}.{}", self.major, self.minor, self.patch)?;
++ if !self.pre.is_empty() {
++ write!(formatter, "-{}", self.pre)?;
++ }
++ if !self.build.is_empty() {
++ write!(formatter, "+{}", self.build)?;
++ }
++ Ok(())
++ };
++
++ let do_len = || -> usize {
++ digits(self.major)
++ + 1
++ + digits(self.minor)
++ + 1
++ + digits(self.patch)
++ + !self.pre.is_empty() as usize
++ + self.pre.len()
++ + !self.build.is_empty() as usize
++ + self.build.len()
++ };
++
++ pad(formatter, do_display, do_len)
++ }
++}
++
++impl Display for VersionReq {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ if self.comparators.is_empty() {
++ return formatter.write_str("*");
++ }
++ for (i, comparator) in self.comparators.iter().enumerate() {
++ if i > 0 {
++ formatter.write_str(", ")?;
++ }
++ write!(formatter, "{}", comparator)?;
++ }
++ Ok(())
++ }
++}
++
++impl Display for Comparator {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let op = match self.op {
++ Op::Exact => "=",
++ Op::Greater => ">",
++ Op::GreaterEq => ">=",
++ Op::Less => "<",
++ Op::LessEq => "<=",
++ Op::Tilde => "~",
++ Op::Caret => "^",
++ Op::Wildcard => "",
++ #[cfg(no_non_exhaustive)]
++ Op::__NonExhaustive => unreachable!(),
++ };
++ formatter.write_str(op)?;
++ write!(formatter, "{}", self.major)?;
++ if let Some(minor) = &self.minor {
++ write!(formatter, ".{}", minor)?;
++ if let Some(patch) = &self.patch {
++ write!(formatter, ".{}", patch)?;
++ if !self.pre.is_empty() {
++ write!(formatter, "-{}", self.pre)?;
++ }
++ } else if self.op == Op::Wildcard {
++ formatter.write_str(".*")?;
++ }
++ } else if self.op == Op::Wildcard {
++ formatter.write_str(".*")?;
++ }
++ Ok(())
++ }
++}
++
++impl Display for Prerelease {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ formatter.write_str(self.as_str())
++ }
++}
++
++impl Display for BuildMetadata {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ formatter.write_str(self.as_str())
++ }
++}
++
++impl Debug for Version {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ let mut debug = formatter.debug_struct("Version");
++ debug
++ .field("major", &self.major)
++ .field("minor", &self.minor)
++ .field("patch", &self.patch);
++ if !self.pre.is_empty() {
++ debug.field("pre", &self.pre);
++ }
++ if !self.build.is_empty() {
++ debug.field("build", &self.build);
++ }
++ debug.finish()
++ }
++}
++
++impl Debug for Prerelease {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ write!(formatter, "Prerelease(\"{}\")", self)
++ }
++}
++
++impl Debug for BuildMetadata {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ write!(formatter, "BuildMetadata(\"{}\")", self)
++ }
++}
++
++fn pad(
++ formatter: &mut fmt::Formatter,
++ do_display: impl FnOnce(&mut fmt::Formatter) -> fmt::Result,
++ do_len: impl FnOnce() -> usize,
++) -> fmt::Result {
++ let min_width = match formatter.width() {
++ Some(min_width) => min_width,
++ None => return do_display(formatter),
++ };
++
++ let len = do_len();
++ if len >= min_width {
++ return do_display(formatter);
++ }
++
++ let default_align = Alignment::Left;
++ let align = formatter.align().unwrap_or(default_align);
++ let padding = min_width - len;
++ let (pre_pad, post_pad) = match align {
++ Alignment::Left => (0, padding),
++ Alignment::Right => (padding, 0),
++ Alignment::Center => (padding / 2, (padding + 1) / 2),
++ };
++
++ let fill = formatter.fill();
++ for _ in 0..pre_pad {
++ formatter.write_char(fill)?;
++ }
++
++ do_display(formatter)?;
++
++ for _ in 0..post_pad {
++ formatter.write_char(fill)?;
++ }
++ Ok(())
++}
++
++fn digits(val: u64) -> usize {
++ if val < 10 {
++ 1
++ } else {
++ 1 + digits(val / 10)
++ }
++}
+diff --git a/third_party/rust/semver/src/error.rs b/third_party/rust/semver/src/error.rs
+new file mode 100644
+--- /dev/null
++++ b/third_party/rust/semver/src/error.rs
+@@ -0,0 +1,124 @@
++use crate::parse::Error;
++use core::fmt::{self, Debug, Display};
++
++pub(crate) enum ErrorKind {
++ UnexpectedEnd(Position),
++ UnexpectedChar(Position, char),
++ UnexpectedCharAfter(Position, char),
++ ExpectedCommaFound(Position, char),
++ LeadingZero(Position),
++ Overflow(Position),
++ EmptySegment(Position),
++ IllegalCharacter(Position),
++ WildcardNotTheOnlyComparator(char),
++ UnexpectedAfterWildcard,
++ ExcessiveComparators,
++}
++
++#[derive(Copy, Clone, Eq, PartialEq)]
++pub(crate) enum Position {
++ Major,
++ Minor,
++ Patch,
++ Pre,
++ Build,
++}
++
++#[cfg(feature = "std")]
++#[cfg_attr(doc_cfg, doc(cfg(feature = "std")))]
++impl std::error::Error for Error {}
++
++impl Display for Error {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ match &self.kind {
++ ErrorKind::UnexpectedEnd(pos) => {
++ write!(formatter, "unexpected end of input while parsing {}", pos)
++ }
++ ErrorKind::UnexpectedChar(pos, ch) => {
++ write!(
++ formatter,
++ "unexpected character {} while parsing {}",
++ QuotedChar(*ch),
++ pos,
++ )
++ }
++ ErrorKind::UnexpectedCharAfter(pos, ch) => {
++ write!(
++ formatter,
++ "unexpected character {} after {}",
++ QuotedChar(*ch),
++ pos,
++ )
++ }
++ ErrorKind::ExpectedCommaFound(pos, ch) => {
++ write!(
++ formatter,
++ "expected comma after {}, found {}",
++ pos,
++ QuotedChar(*ch),
++ )
++ }
++ ErrorKind::LeadingZero(pos) => {
++ write!(formatter, "invalid leading zero in {}", pos)
++ }
++ ErrorKind::Overflow(pos) => {
++ write!(formatter, "value of {} exceeds u64::MAX", pos)
++ }
++ ErrorKind::EmptySegment(pos) => {
++ write!(formatter, "empty identifier segment in {}", pos)
++ }
++ ErrorKind::IllegalCharacter(pos) => {
++ write!(formatter, "unexpected character in {}", pos)
++ }
++ ErrorKind::WildcardNotTheOnlyComparator(ch) => {
++ write!(
++ formatter,
++ "wildcard req ({}) must be the only comparator in the version req",
++ ch,
++ )
++ }
++ ErrorKind::UnexpectedAfterWildcard => {
++ formatter.write_str("unexpected character after wildcard in version req")
++ }
++ ErrorKind::ExcessiveComparators => {
++ formatter.write_str("excessive number of version comparators")
++ }
++ }
++ }
++}
++
++impl Display for Position {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ formatter.write_str(match self {
++ Position::Major => "major version number",
++ Position::Minor => "minor version number",
++ Position::Patch => "patch version number",
++ Position::Pre => "pre-release identifier",
++ Position::Build => "build metadata",
++ })
++ }
++}
++
++impl Debug for Error {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ formatter.write_str("Error(\"")?;
++ Display::fmt(self, formatter)?;
++ formatter.write_str("\")")?;
++ Ok(())
++ }
++}
++
++struct QuotedChar(char);
++
++impl Display for QuotedChar {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ // Standard library versions prior to https://github.com/rust-lang/rust/pull/95345
++ // print character 0 as '\u{0}'. We prefer '\0' to keep error messages
++ // the same across all supported Rust versions.
++ if self.0 == '\0' {
++ formatter.write_str("'\\0'")
++ } else {
++ write!(formatter, "{:?}", self.0)
++ }
++ }
++}
+diff --git a/third_party/rust/semver/src/eval.rs b/third_party/rust/semver/src/eval.rs
+new file mode 100644
+--- /dev/null
++++ b/third_party/rust/semver/src/eval.rs
+@@ -0,0 +1,181 @@
++use crate::{Comparator, Op, Version, VersionReq};
++
++pub(crate) fn matches_req(req: &VersionReq, ver: &Version) -> bool {
++ for cmp in &req.comparators {
++ if !matches_impl(cmp, ver) {
++ return false;
++ }
++ }
++
++ if ver.pre.is_empty() {
++ return true;
++ }
++
++ // If a version has a prerelease tag (for example, 1.2.3-alpha.3) then it
++ // will only be allowed to satisfy req if at least one comparator with the
++ // same major.minor.patch also has a prerelease tag.
++ for cmp in &req.comparators {
++ if pre_is_compatible(cmp, ver) {
++ return true;
++ }
++ }
++
++ false
++}
++
++pub(crate) fn matches_comparator(cmp: &Comparator, ver: &Version) -> bool {
++ matches_impl(cmp, ver) && (ver.pre.is_empty() || pre_is_compatible(cmp, ver))
++}
++
++fn matches_impl(cmp: &Comparator, ver: &Version) -> bool {
++ match cmp.op {
++ Op::Exact | Op::Wildcard => matches_exact(cmp, ver),
++ Op::Greater => matches_greater(cmp, ver),
++ Op::GreaterEq => matches_exact(cmp, ver) || matches_greater(cmp, ver),
++ Op::Less => matches_less(cmp, ver),
++ Op::LessEq => matches_exact(cmp, ver) || matches_less(cmp, ver),
++ Op::Tilde => matches_tilde(cmp, ver),
++ Op::Caret => matches_caret(cmp, ver),
++ #[cfg(no_non_exhaustive)]
++ Op::__NonExhaustive => unreachable!(),
++ }
++}
++
++fn matches_exact(cmp: &Comparator, ver: &Version) -> bool {
++ if ver.major != cmp.major {
++ return false;
++ }
++
++ if let Some(minor) = cmp.minor {
++ if ver.minor != minor {
++ return false;
++ }
++ }
++
++ if let Some(patch) = cmp.patch {
++ if ver.patch != patch {
++ return false;
++ }
++ }
++
++ ver.pre == cmp.pre
++}
++
++fn matches_greater(cmp: &Comparator, ver: &Version) -> bool {
++ if ver.major != cmp.major {
++ return ver.major > cmp.major;
++ }
++
++ match cmp.minor {
++ None => return false,
++ Some(minor) => {
++ if ver.minor != minor {
++ return ver.minor > minor;
++ }
++ }
++ }
++
++ match cmp.patch {
++ None => return false,
++ Some(patch) => {
++ if ver.patch != patch {
++ return ver.patch > patch;
++ }
++ }
++ }
++
++ ver.pre > cmp.pre
++}
++
++fn matches_less(cmp: &Comparator, ver: &Version) -> bool {
++ if ver.major != cmp.major {
++ return ver.major < cmp.major;
++ }
++
++ match cmp.minor {
++ None => return false,
++ Some(minor) => {
++ if ver.minor != minor {
++ return ver.minor < minor;
++ }
++ }
++ }
++
++ match cmp.patch {
++ None => return false,
++ Some(patch) => {
++ if ver.patch != patch {
++ return ver.patch < patch;
++ }
++ }
++ }
++
++ ver.pre < cmp.pre
++}
++
++fn matches_tilde(cmp: &Comparator, ver: &Version) -> bool {
++ if ver.major != cmp.major {
++ return false;
++ }
++
++ if let Some(minor) = cmp.minor {
++ if ver.minor != minor {
++ return false;
++ }
++ }
++
++ if let Some(patch) = cmp.patch {
++ if ver.patch != patch {
++ return ver.patch > patch;
++ }
++ }
++
++ ver.pre >= cmp.pre
++}
++
++fn matches_caret(cmp: &Comparator, ver: &Version) -> bool {
++ if ver.major != cmp.major {
++ return false;
++ }
++
++ let minor = match cmp.minor {
++ None => return true,
++ Some(minor) => minor,
++ };
++
++ let patch = match cmp.patch {
++ None => {
++ if cmp.major > 0 {
++ return ver.minor >= minor;
++ } else {
++ return ver.minor == minor;
++ }
++ }
++ Some(patch) => patch,
++ };
++
++ if cmp.major > 0 {
++ if ver.minor != minor {
++ return ver.minor > minor;
++ } else if ver.patch != patch {
++ return ver.patch > patch;
++ }
++ } else if minor > 0 {
++ if ver.minor != minor {
++ return false;
++ } else if ver.patch != patch {
++ return ver.patch > patch;
++ }
++ } else if ver.minor != minor || ver.patch != patch {
++ return false;
++ }
++
++ ver.pre >= cmp.pre
++}
++
++fn pre_is_compatible(cmp: &Comparator, ver: &Version) -> bool {
++ cmp.major == ver.major
++ && cmp.minor == Some(ver.minor)
++ && cmp.patch == Some(ver.patch)
++ && !cmp.pre.is_empty()
++}
+diff --git a/third_party/rust/semver/src/identifier.rs b/third_party/rust/semver/src/identifier.rs
+new file mode 100644
+--- /dev/null
++++ b/third_party/rust/semver/src/identifier.rs
+@@ -0,0 +1,400 @@
++// This module implements Identifier, a short-optimized string allowed to
++// contain only the ASCII characters hyphen, dot, 0-9, A-Z, a-z.
++//
++// As of mid-2021, the distribution of pre-release lengths on crates.io is:
++//
++// length count length count length count
++// 0 355929 11 81 24 2
++// 1 208 12 48 25 6
++// 2 236 13 55 26 10
++// 3 1909 14 25 27 4
++// 4 1284 15 15 28 1
++// 5 1742 16 35 30 1
++// 6 3440 17 9 31 5
++// 7 5624 18 6 32 1
++// 8 1321 19 12 36 2
++// 9 179 20 2 37 379
++// 10 65 23 11
++//
++// and the distribution of build metadata lengths is:
++//
++// length count length count length count
++// 0 364445 8 7725 18 1
++// 1 72 9 16 19 1
++// 2 7 10 85 20 1
++// 3 28 11 17 22 4
++// 4 9 12 10 26 1
++// 5 68 13 9 27 1
++// 6 73 14 10 40 5
++// 7 53 15 6
++//
++// Therefore it really behooves us to be able to use the entire 8 bytes of a
++// pointer for inline storage. For both pre-release and build metadata there are
++// vastly more strings with length exactly 8 bytes than the sum over all lengths
++// longer than 8 bytes.
++//
++// To differentiate the inline representation from the heap allocated long
++// representation, we'll allocate heap pointers with 2-byte alignment so that
++// they are guaranteed to have an unset least significant bit. Then in the repr
++// we store for pointers, we rotate a 1 into the most significant bit of the
++// most significant byte, which is never set for an ASCII byte.
++//
++// Inline repr:
++//
++// 0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx
++//
++// Heap allocated repr:
++//
++// 1ppppppp pppppppp pppppppp pppppppp pppppppp pppppppp pppppppp pppppppp 0
++// ^ most significant bit least significant bit of orig ptr, rotated out ^
++//
++// Since the most significant bit doubles as a sign bit for the similarly sized
++// signed integer type, the CPU has an efficient instruction for inspecting it,
++// meaning we can differentiate between an inline repr and a heap allocated repr
++// in one instruction. Effectively an inline repr always looks like a positive
++// i64 while a heap allocated repr always looks like a negative i64.
++//
++// For the inline repr, we store \0 padding on the end of the stored characters,
++// and thus the string length is readily determined efficiently by a cttz (count
++// trailing zeros) or bsf (bit scan forward) instruction.
++//
++// For the heap allocated repr, the length is encoded as a base-128 varint at
++// the head of the allocation.
++//
++// Empty strings are stored as an all-1 bit pattern, corresponding to -1i64.
++// Consequently the all-0 bit pattern is never a legal representation in any
++// repr, leaving it available as a niche for downstream code. For example this
++// allows size_of::<Version>() == size_of::<Option<Version>>().
++
++use crate::alloc::alloc::{alloc, dealloc, Layout};
++use core::mem;
++use core::num::{NonZeroU64, NonZeroUsize};
++use core::ptr::{self, NonNull};
++use core::slice;
++use core::str;
++
++const PTR_BYTES: usize = mem::size_of::<NonNull<u8>>();
++
++// If pointers are already 8 bytes or bigger, then 0. If pointers are smaller
++// than 8 bytes, then Identifier will contain a byte array to raise its size up
++// to 8 bytes total.
++const TAIL_BYTES: usize = 8 * (PTR_BYTES < 8) as usize - PTR_BYTES * (PTR_BYTES < 8) as usize;
++
++#[repr(C, align(8))]
++pub(crate) struct Identifier {
++ head: NonNull<u8>,
++ tail: [u8; TAIL_BYTES],
++}
++
++impl Identifier {
++ pub(crate) const fn empty() -> Self {
++ // This is a separate constant because unsafe function calls are not
++ // allowed in a const fn body, only in a const, until later rustc than
++ // what we support.
++ const HEAD: NonNull<u8> = unsafe { NonNull::new_unchecked(!0 as *mut u8) };
++
++ // `mov rax, -1`
++ Identifier {
++ head: HEAD,
++ tail: [!0; TAIL_BYTES],
++ }
++ }
++
++ // SAFETY: string must be ASCII and not contain \0 bytes.
++ pub(crate) unsafe fn new_unchecked(string: &str) -> Self {
++ let len = string.len();
++ match len as u64 {
++ 0 => Self::empty(),
++ 1..=8 => {
++ let mut bytes = [0u8; mem::size_of::<Identifier>()];
++ // SAFETY: string is big enough to read len bytes, bytes is big
++ // enough to write len bytes, and they do not overlap.
++ unsafe { ptr::copy_nonoverlapping(string.as_ptr(), bytes.as_mut_ptr(), len) };
++ // SAFETY: the head field is nonzero because the input string
++ // was at least 1 byte of ASCII and did not contain \0.
++ unsafe { mem::transmute::<[u8; mem::size_of::<Identifier>()], Identifier>(bytes) }
++ }
++ 9..=0xff_ffff_ffff_ffff => {
++ // SAFETY: len is in a range that does not contain 0.
++ let size = bytes_for_varint(unsafe { NonZeroUsize::new_unchecked(len) }) + len;
++ let align = 2;
++ // SAFETY: align is not zero, align is a power of two, and
++ // rounding size up to align does not overflow usize::MAX.
++ let layout = unsafe { Layout::from_size_align_unchecked(size, align) };
++ // SAFETY: layout's size is nonzero.
++ let ptr = unsafe { alloc(layout) };
++ let mut write = ptr;
++ let mut varint_remaining = len;
++ while varint_remaining > 0 {
++ // SAFETY: size is bytes_for_varint(len) bytes + len bytes.
++ // This is writing the first bytes_for_varint(len) bytes.
++ unsafe { ptr::write(write, varint_remaining as u8 | 0x80) };
++ varint_remaining >>= 7;
++ // SAFETY: still in bounds of the same allocation.
++ write = unsafe { write.add(1) };
++ }
++ // SAFETY: size is bytes_for_varint(len) bytes + len bytes. This
++ // is writing to the last len bytes.
++ unsafe { ptr::copy_nonoverlapping(string.as_ptr(), write, len) };
++ Identifier {
++ head: ptr_to_repr(ptr),
++ tail: [0; TAIL_BYTES],
++ }
++ }
++ 0x100_0000_0000_0000..=0xffff_ffff_ffff_ffff => {
++ unreachable!("please refrain from storing >64 petabytes of text in semver version");
++ }
++ #[cfg(no_exhaustive_int_match)] // rustc <1.33
++ _ => unreachable!(),
++ }
++ }
++
++ pub(crate) fn is_empty(&self) -> bool {
++ // `cmp rdi, -1` -- basically: `repr as i64 == -1`
++ let empty = Self::empty();
++ let is_empty = self.head == empty.head && self.tail == empty.tail;
++ // The empty representation does nothing on Drop. We can't let this one
++ // drop normally because `impl Drop for Identifier` calls is_empty; that
++ // would be an infinite recursion.
++ mem::forget(empty);
++ is_empty
++ }
++
++ fn is_inline(&self) -> bool {
++ // `test rdi, rdi` -- basically: `repr as i64 >= 0`
++ self.head.as_ptr() as usize >> (PTR_BYTES * 8 - 1) == 0
++ }
++
++ fn is_empty_or_inline(&self) -> bool {
++ // `cmp rdi, -2` -- basically: `repr as i64 > -2`
++ self.is_empty() || self.is_inline()
++ }
++
++ pub(crate) fn as_str(&self) -> &str {
++ if self.is_empty() {
++ ""
++ } else if self.is_inline() {
++ // SAFETY: repr is in the inline representation.
++ unsafe { inline_as_str(self) }
++ } else {
++ // SAFETY: repr is in the heap allocated representation.
++ unsafe { ptr_as_str(&self.head) }
++ }
++ }
++}
++
++impl Clone for Identifier {
++ fn clone(&self) -> Self {
++ if self.is_empty_or_inline() {
++ Identifier {
++ head: self.head,
++ tail: self.tail,
++ }
++ } else {
++ let ptr = repr_to_ptr(self.head);
++ // SAFETY: ptr is one of our own heap allocations.
++ let len = unsafe { decode_len(ptr) };
++ let size = bytes_for_varint(len) + len.get();
++ let align = 2;
++ // SAFETY: align is not zero, align is a power of two, and rounding
++ // size up to align does not overflow usize::MAX. This is just
++ // duplicating a previous allocation where all of these guarantees
++ // were already made.
++ let layout = unsafe { Layout::from_size_align_unchecked(size, align) };
++ // SAFETY: layout's size is nonzero.
++ let clone = unsafe { alloc(layout) };
++ // SAFETY: new allocation cannot overlap the previous one (this was
++ // not a realloc). The argument ptrs are readable/writeable
++ // respectively for size bytes.
++ unsafe { ptr::copy_nonoverlapping(ptr, clone, size) }
++ Identifier {
++ head: ptr_to_repr(clone),
++ tail: [0; TAIL_BYTES],
++ }
++ }
++ }
++}
++
++impl Drop for Identifier {
++ fn drop(&mut self) {
++ if self.is_empty_or_inline() {
++ return;
++ }
++ let ptr = repr_to_ptr_mut(self.head);
++ // SAFETY: ptr is one of our own heap allocations.
++ let len = unsafe { decode_len(ptr) };
++ let size = bytes_for_varint(len) + len.get();
++ let align = 2;
++ // SAFETY: align is not zero, align is a power of two, and rounding
++ // size up to align does not overflow usize::MAX. These guarantees were
++ // made when originally allocating this memory.
++ let layout = unsafe { Layout::from_size_align_unchecked(size, align) };
++ // SAFETY: ptr was previously allocated by the same allocator with the
++ // same layout.
++ unsafe { dealloc(ptr, layout) }
++ }
++}
++
++impl PartialEq for Identifier {
++ fn eq(&self, rhs: &Self) -> bool {
++ if self.is_empty_or_inline() {
++ // Fast path (most common)
++ self.head == rhs.head && self.tail == rhs.tail
++ } else if rhs.is_empty_or_inline() {
++ false
++ } else {
++ // SAFETY: both reprs are in the heap allocated representation.
++ unsafe { ptr_as_str(&self.head) == ptr_as_str(&rhs.head) }
++ }
++ }
++}
++
++unsafe impl Send for Identifier {}
++unsafe impl Sync for Identifier {}
++
++// We use heap pointers that are 2-byte aligned, meaning they have an
++// insignificant 0 in the least significant bit. We take advantage of that
++// unneeded bit to rotate a 1 into the most significant bit to make the repr
++// distinguishable from ASCII bytes.
++fn ptr_to_repr(original: *mut u8) -> NonNull<u8> {
++ // `mov eax, 1`
++ // `shld rax, rdi, 63`
++ let modified = (original as usize | 1).rotate_right(1);
++
++ // `original + (modified - original)`, but being mindful of provenance.
++ let diff = modified.wrapping_sub(original as usize);
++ let modified = original.wrapping_add(diff);
++
++ // SAFETY: the most significant bit of repr is known to be set, so the value
++ // is not zero.
++ unsafe { NonNull::new_unchecked(modified) }
++}
++
++// Shift out the 1 previously placed into the most significant bit of the least
++// significant byte. Shift in a low 0 bit to reconstruct the original 2-byte
++// aligned pointer.
++fn repr_to_ptr(modified: NonNull<u8>) -> *const u8 {
++ // `lea rax, [rdi + rdi]`
++ let modified = modified.as_ptr();
++ let original = (modified as usize) << 1;
++
++ // `modified + (original - modified)`, but being mindful of provenance.
++ let diff = original.wrapping_sub(modified as usize);
++ modified.wrapping_add(diff)
++}
++
++fn repr_to_ptr_mut(repr: NonNull<u8>) -> *mut u8 {
++ repr_to_ptr(repr) as *mut u8
++}
++
++// Compute the length of the inline string, assuming the argument is in short
++// string representation. Short strings are stored as 1 to 8 nonzero ASCII
++// bytes, followed by \0 padding for the remaining bytes.
++//
++// SAFETY: the identifier must indeed be in the inline representation.
++unsafe fn inline_len(repr: &Identifier) -> NonZeroUsize {
++ // SAFETY: Identifier's layout is align(8) and at least size 8. We're doing
++ // an aligned read of the first 8 bytes from it. The bytes are not all zero
++ // because inline strings are at least 1 byte long and cannot contain \0.
++ let repr = unsafe { ptr::read(repr as *const Identifier as *const NonZeroU64) };
++
++ // Rustc >=1.53 has intrinsics for counting zeros on a non-zeroable integer.
++ // On many architectures these are more efficient than counting on ordinary
++ // zeroable integers (bsf vs cttz). On rustc <1.53 without those intrinsics,
++ // we count zeros in the u64 rather than the NonZeroU64.
++ #[cfg(no_nonzero_bitscan)]
++ let repr = repr.get();
++
++ #[cfg(target_endian = "little")]
++ let zero_bits_on_string_end = repr.leading_zeros();
++ #[cfg(target_endian = "big")]
++ let zero_bits_on_string_end = repr.trailing_zeros();
++
++ let nonzero_bytes = 8 - zero_bits_on_string_end as usize / 8;
++
++ // SAFETY: repr is nonzero, so it has at most 63 zero bits on either end,
++ // thus at least one nonzero byte.
++ unsafe { NonZeroUsize::new_unchecked(nonzero_bytes) }
++}
++
++// SAFETY: repr must be in the inline representation, i.e. at least 1 and at
++// most 8 nonzero ASCII bytes padded on the end with \0 bytes.
++unsafe fn inline_as_str(repr: &Identifier) -> &str {
++ let ptr = repr as *const Identifier as *const u8;
++ let len = unsafe { inline_len(repr) }.get();
++ // SAFETY: we are viewing the nonzero ASCII prefix of the inline repr's
++ // contents as a slice of bytes. Input/output lifetimes are correctly
++ // associated.
++ let slice = unsafe { slice::from_raw_parts(ptr, len) };
++ // SAFETY: the string contents are known to be only ASCII bytes, which are
++ // always valid UTF-8.
++ unsafe { str::from_utf8_unchecked(slice) }
++}
++
++// Decode varint. Varints consist of between one and eight base-128 digits, each
++// of which is stored in a byte with most significant bit set. Adjacent to the
++// varint in memory there is guaranteed to be at least 9 ASCII bytes, each of
++// which has an unset most significant bit.
++//
++// SAFETY: ptr must be one of our own heap allocations, with the varint header
++// already written.
++unsafe fn decode_len(ptr: *const u8) -> NonZeroUsize {
++ // SAFETY: There is at least one byte of varint followed by at least 9 bytes
++ // of string content, which is at least 10 bytes total for the allocation,
++ // so reading the first two is no problem.
++ let [first, second] = unsafe { ptr::read(ptr as *const [u8; 2]) };
++ if second < 0x80 {
++ // SAFETY: the length of this heap allocated string has been encoded as
++ // one base-128 digit, so the length is at least 9 and at most 127. It
++ // cannot be zero.
++ unsafe { NonZeroUsize::new_unchecked((first & 0x7f) as usize) }
++ } else {
++ return unsafe { decode_len_cold(ptr) };
++
++ // Identifiers 128 bytes or longer. This is not exercised by any crate
++ // version currently published to crates.io.
++ #[cold]
++ #[inline(never)]
++ unsafe fn decode_len_cold(mut ptr: *const u8) -> NonZeroUsize {
++ let mut len = 0;
++ let mut shift = 0;
++ loop {
++ // SAFETY: varint continues while there are bytes having the
++ // most significant bit set, i.e. until we start hitting the
++ // ASCII string content with msb unset.
++ let byte = unsafe { *ptr };
++ if byte < 0x80 {
++ // SAFETY: the string length is known to be 128 bytes or
++ // longer.
++ return unsafe { NonZeroUsize::new_unchecked(len) };
++ }
++ // SAFETY: still in bounds of the same allocation.
++ ptr = unsafe { ptr.add(1) };
++ len += ((byte & 0x7f) as usize) << shift;
++ shift += 7;
++ }
++ }
++ }
++}
++
++// SAFETY: repr must be in the heap allocated representation, with varint header
++// and string contents already written.
++unsafe fn ptr_as_str(repr: &NonNull<u8>) -> &str {
++ let ptr = repr_to_ptr(*repr);
++ let len = unsafe { decode_len(ptr) };
++ let header = bytes_for_varint(len);
++ let slice = unsafe { slice::from_raw_parts(ptr.add(header), len.get()) };
++ // SAFETY: all identifier contents are ASCII bytes, which are always valid
++ // UTF-8.
++ unsafe { str::from_utf8_unchecked(slice) }
++}
++
++// Number of base-128 digits required for the varint representation of a length.
++fn bytes_for_varint(len: NonZeroUsize) -> usize {
++ #[cfg(no_nonzero_bitscan)] // rustc <1.53
++ let len = len.get();
++
++ let usize_bits = mem::size_of::<usize>() * 8;
++ let len_bits = usize_bits - len.leading_zeros() as usize;
++ (len_bits + 6) / 7
++}
+diff --git a/third_party/rust/semver/src/impls.rs b/third_party/rust/semver/src/impls.rs
+new file mode 100644
+--- /dev/null
++++ b/third_party/rust/semver/src/impls.rs
+@@ -0,0 +1,156 @@
++use crate::backport::*;
++use crate::identifier::Identifier;
++use crate::{BuildMetadata, Comparator, Prerelease, VersionReq};
++use core::cmp::Ordering;
++use core::hash::{Hash, Hasher};
++use core::iter::FromIterator;
++use core::ops::Deref;
++
++impl Default for Identifier {
++ fn default() -> Self {
++ Identifier::empty()
++ }
++}
++
++impl Eq for Identifier {}
++
++impl Hash for Identifier {
++ fn hash<H: Hasher>(&self, hasher: &mut H) {
++ self.as_str().hash(hasher);
++ }
++}
++
++impl Deref for Prerelease {
++ type Target = str;
++
++ fn deref(&self) -> &Self::Target {
++ self.identifier.as_str()
++ }
++}
++
++impl Deref for BuildMetadata {
++ type Target = str;
++
++ fn deref(&self) -> &Self::Target {
++ self.identifier.as_str()
++ }
++}
++
++impl PartialOrd for Prerelease {
++ fn partial_cmp(&self, rhs: &Self) -> Option<Ordering> {
++ Some(Ord::cmp(self, rhs))
++ }
++}
++
++impl PartialOrd for BuildMetadata {
++ fn partial_cmp(&self, rhs: &Self) -> Option<Ordering> {
++ Some(Ord::cmp(self, rhs))
++ }
++}
++
++impl Ord for Prerelease {
++ fn cmp(&self, rhs: &Self) -> Ordering {
++ match self.is_empty() {
++ true if rhs.is_empty() => return Ordering::Equal,
++ // A real release compares greater than prerelease.
++ true => return Ordering::Greater,
++ // Prerelease compares less than the real release.
++ false if rhs.is_empty() => return Ordering::Less,
++ false => {}
++ }
++
++ let lhs = self.as_str().split('.');
++ let mut rhs = rhs.as_str().split('.');
++
++ for lhs in lhs {
++ let rhs = match rhs.next() {
++ // Spec: "A larger set of pre-release fields has a higher
++ // precedence than a smaller set, if all of the preceding
++ // identifiers are equal."
++ None => return Ordering::Greater,
++ Some(rhs) => rhs,
++ };
++
++ let string_cmp = || Ord::cmp(lhs, rhs);
++ let is_ascii_digit = |b: u8| b.is_ascii_digit();
++ let ordering = match (
++ lhs.bytes().all(is_ascii_digit),
++ rhs.bytes().all(is_ascii_digit),
++ ) {
++ // Respect numeric ordering, for example 99 < 100. Spec says:
++ // "Identifiers consisting of only digits are compared
++ // numerically."
++ (true, true) => Ord::cmp(&lhs.len(), &rhs.len()).then_with(string_cmp),
++ // Spec: "Numeric identifiers always have lower precedence than
++ // non-numeric identifiers."
++ (true, false) => return Ordering::Less,
++ (false, true) => return Ordering::Greater,
++ // Spec: "Identifiers with letters or hyphens are compared
++ // lexically in ASCII sort order."
++ (false, false) => string_cmp(),
++ };
++
++ if ordering != Ordering::Equal {
++ return ordering;
++ }
++ }
++
++ if rhs.next().is_none() {
++ Ordering::Equal
++ } else {
++ Ordering::Less
++ }
++ }
++}
++
++impl Ord for BuildMetadata {
++ fn cmp(&self, rhs: &Self) -> Ordering {
++ let lhs = self.as_str().split('.');
++ let mut rhs = rhs.as_str().split('.');
++
++ for lhs in lhs {
++ let rhs = match rhs.next() {
++ None => return Ordering::Greater,
++ Some(rhs) => rhs,
++ };
++
++ let is_ascii_digit = |b: u8| b.is_ascii_digit();
++ let ordering = match (
++ lhs.bytes().all(is_ascii_digit),
++ rhs.bytes().all(is_ascii_digit),
++ ) {
++ (true, true) => {
++ // 0 < 00 < 1 < 01 < 001 < 2 < 02 < 002 < 10
++ let lhval = lhs.trim_start_matches('0');
++ let rhval = rhs.trim_start_matches('0');
++ Ord::cmp(&lhval.len(), &rhval.len())
++ .then_with(|| Ord::cmp(lhval, rhval))
++ .then_with(|| Ord::cmp(&lhs.len(), &rhs.len()))
++ }
++ (true, false) => return Ordering::Less,
++ (false, true) => return Ordering::Greater,
++ (false, false) => Ord::cmp(lhs, rhs),
++ };
++
++ if ordering != Ordering::Equal {
++ return ordering;
++ }
++ }
++
++ if rhs.next().is_none() {
++ Ordering::Equal
++ } else {
++ Ordering::Less
++ }
++ }
++}
++
++impl FromIterator<Comparator> for VersionReq {
++ fn from_iter<I>(iter: I) -> Self
++ where
++ I: IntoIterator<Item = Comparator>,
++ {
++ let comparators = Vec::from_iter(iter);
++ VersionReq { comparators }
++ }
++}
+diff --git a/third_party/rust/semver/src/lib.rs b/third_party/rust/semver/src/lib.rs
+--- a/third_party/rust/semver/src/lib.rs
++++ b/third_party/rust/semver/src/lib.rs
+@@ -1,182 +1,533 @@
+-// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT
+-// file at the top-level directory of this distribution and at
+-// http://rust-lang.org/COPYRIGHT.
+-//
+-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+-// option. This file may not be copied, modified, or distributed
+-// except according to those terms.
+-
+-//! Semantic version parsing and comparison.
++//! [![github]](https://github.com/dtolnay/semver) [![crates-io]](https://crates.io/crates/semver) [![docs-rs]](https://docs.rs/semver)
+ //!
+-//! Semantic versioning (see http://semver.org/) is a set of rules for
+-//! assigning version numbers.
++//! [github]: https://img.shields.io/badge/github-8da0cb?style=for-the-badge&labelColor=5…
++//! [crates-io]: https://img.shields.io/badge/crates.io-fc8d62?style=for-the-badge&labelColo…
++//! [docs-rs]: https://img.shields.io/badge/docs.rs-66c2a5?style=for-the-badge&labelColor=…
+ //!
+-//! ## SemVer overview
+-//!
+-//! Given a version number MAJOR.MINOR.PATCH, increment the:
++//! <br>
+ //!
+-//! 1. MAJOR version when you make incompatible API changes,
+-//! 2. MINOR version when you add functionality in a backwards-compatible
+-//! manner, and
+-//! 3. PATCH version when you make backwards-compatible bug fixes.
+-//!
+-//! Additional labels for pre-release and build metadata are available as
+-//! extensions to the MAJOR.MINOR.PATCH format.
+-//!
+-//! Any references to 'the spec' in this documentation refer to [version 2.0 of
+-//! the SemVer spec](http://semver.org/spec/v2.0.0.html).
++//! A parser and evaluator for Cargo's flavor of Semantic Versioning.
+ //!
+-//! ## SemVer and the Rust ecosystem
+-//!
+-//! Rust itself follows the SemVer specification, as does its standard
+-//! libraries. The two are not tied together.
++//! Semantic Versioning (see <https://semver.org>) is a guideline for how
++//! version numbers are assigned and incremented. It is widely followed within
++//! the Cargo/crates.io ecosystem for Rust.
+ //!
+-//! [Cargo](http://crates.io), Rust's package manager, uses SemVer to determine
+-//! which versions of packages you need installed.
++//! <br>
+ //!
+-//! ## Versions
+-//!
+-//! At its simplest, the `semver` crate allows you to construct `Version`
+-//! objects using the `parse` method:
++//! # Example
+ //!
+-//! ```{rust}
+-//! use semver::Version;
++//! ```
++//! use semver::{BuildMetadata, Prerelease, Version, VersionReq};
+ //!
+-//! assert!(Version::parse("1.2.3") == Ok(Version {
+-//! major: 1,
+-//! minor: 2,
+-//! patch: 3,
+-//! pre: vec!(),
+-//! build: vec!(),
+-//! }));
+-//! ```
+-//!
+-//! If you have multiple `Version`s, you can use the usual comparison operators
+-//! to compare them:
+-//!
+-//! ```{rust}
+-//! use semver::Version;
+-//!
+-//! assert!(Version::parse("1.2.3-alpha") != Version::parse("1.2.3-beta"));
+-//! assert!(Version::parse("1.2.3-alpha2") > Version::parse("1.2.0"));
+-//! ```
++//! fn main() {
++//! let req = VersionReq::parse(">=1.2.3, <1.8.0").unwrap();
+ //!
+-//! If you explicitly need to modify a Version, SemVer also allows you to
+-//! increment the major, minor, and patch numbers in accordance with the spec.
+-//!
+-//! Please note that in order to do this, you must use a mutable Version:
+-//!
+-//! ```{rust}
+-//! use semver::Version;
+-//!
+-//! let mut bugfix_release = Version::parse("1.0.0").unwrap();
+-//! bugfix_release.increment_patch();
++//! // Check whether this requirement matches version 1.2.3-alpha.1 (no)
++//! let version = Version {
++//! major: 1,
++//! minor: 2,
++//! patch: 3,
++//! pre: Prerelease::new("alpha.1").unwrap(),
++//! build: BuildMetadata::EMPTY,
++//! };
++//! assert!(!req.matches(&version));
+ //!
+-//! assert_eq!(Ok(bugfix_release), Version::parse("1.0.1"));
+-//! ```
+-//!
+-//! When incrementing the minor version number, the patch number resets to zero
+-//! (in accordance with section 7 of the spec)
+-//!
+-//! ```{rust}
+-//! use semver::Version;
+-//!
+-//! let mut feature_release = Version::parse("1.4.6").unwrap();
+-//! feature_release.increment_minor();
+-//!
+-//! assert_eq!(Ok(feature_release), Version::parse("1.5.0"));
++//! // Check whether it matches 1.3.0 (yes it does)
++//! let version = Version::parse("1.3.0").unwrap();
++//! assert!(req.matches(&version));
++//! }
+ //! ```
+ //!
+-//! Similarly, when incrementing the major version number, the patch and minor
+-//! numbers reset to zero (in accordance with section 8 of the spec)
++//! <br><br>
+ //!
+-//! ```{rust}
+-//! use semver::Version;
+-//!
+-//! let mut chrome_release = Version::parse("41.5.5377").unwrap();
+-//! chrome_release.increment_major();
++//! # Scope of this crate
+ //!
+-//! assert_eq!(Ok(chrome_release), Version::parse("42.0.0"));
+-//! ```
+-//!
+-//! ## Requirements
+-//!
+-//! The `semver` crate also provides the ability to compare requirements, which
+-//! are more complex comparisons.
+-//!
+-//! For example, creating a requirement that only matches versions greater than
+-//! or equal to 1.0.0:
++//! Besides Cargo, several other package ecosystems and package managers for
++//! other languages also use SemVer: RubyGems/Bundler for Ruby, npm for
++//! JavaScript, Composer for PHP, CocoaPods for Objective-C...
+ //!
+-//! ```{rust}
+-//! # #![allow(unstable)]
+-//! use semver::Version;
+-//! use semver::VersionReq;
+-//!
+-//! let r = VersionReq::parse(">= 1.0.0").unwrap();
+-//! let v = Version::parse("1.0.0").unwrap();
++//! The `semver` crate is specifically intended to implement Cargo's
++//! interpretation of Semantic Versioning.
+ //!
+-//! assert!(r.to_string() == ">= 1.0.0".to_string());
+-//! assert!(r.matches(&v))
+-//! ```
+-//!
+-//! It also allows parsing of `~x.y.z` and `^x.y.z` requirements as defined at
+-//! https://www.npmjs.org/doc/misc/semver.html
++//! Where the various tools differ in their interpretation or implementation of
++//! the spec, this crate follows the implementation choices made by Cargo. If
++//! you are operating on version numbers from some other package ecosystem, you
++//! will want to use a different semver library which is appropriate to that
++//! ecosystem.
+ //!
+-//! **Tilde requirements** specify a minimal version with some updates:
+-//!
+-//! ```notrust
+-//! ~1.2.3 := >=1.2.3 <1.3.0
+-//! ~1.2 := >=1.2.0 <1.3.0
+-//! ~1 := >=1.0.0 <2.0.0
+-//! ```
++//! The extent of Cargo's SemVer support is documented in the *[Specifying
++//! Dependencies]* chapter of the Cargo reference.
+ //!
+-//! **Caret requirements** allow SemVer compatible updates to a specified
+-//! verion, `0.x` and `0.x+1` are not considered compatible, but `1.x` and
+-//! `1.x+1` are.
+-//!
+-//! `0.0.x` is not considered compatible with any other version.
+-//! Missing minor and patch versions are desugared to `0` but allow flexibility
+-//! for that value.
+-//!
+-//! ```notrust
+-//! ^1.2.3 := >=1.2.3 <2.0.0
+-//! ^0.2.3 := >=0.2.3 <0.3.0
+-//! ^0.0.3 := >=0.0.3 <0.0.4
+-//! ^0.0 := >=0.0.0 <0.1.0
+-//! ^0 := >=0.0.0 <1.0.0
+-//! ```
+-//!
+-//! **Wildcard requirements** allows parsing of version requirements of the
+-//! formats `*`, `x.*` and `x.y.*`.
+-//!
+-//! ```notrust
+-//! * := >=0.0.0
+-//! 1.* := >=1.0.0 <2.0.0
+-//! 1.2.* := >=1.2.0 <1.3.0
+-//! ```
++//! [Specifying Dependencies]: https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html
++
++#![doc(html_root_url = "https://docs.rs/semver/1.0.9")]
++#![cfg_attr(doc_cfg, feature(doc_cfg))]
++#![cfg_attr(all(not(feature = "std"), not(no_alloc_crate)), no_std)]
++#![cfg_attr(not(no_unsafe_op_in_unsafe_fn_lint), deny(unsafe_op_in_unsafe_fn))]
++#![cfg_attr(no_unsafe_op_in_unsafe_fn_lint, allow(unused_unsafe))]
++#![cfg_attr(no_str_strip_prefix, allow(unstable_name_collisions))]
++#![allow(
++ clippy::cast_lossless,
++ clippy::cast_possible_truncation,
++ clippy::doc_markdown,
++ clippy::items_after_statements,
++ clippy::manual_map,
++ clippy::match_bool,
++ clippy::missing_errors_doc,
++ clippy::must_use_candidate,
++ clippy::needless_doctest_main,
++ clippy::option_if_let_else,
++ clippy::ptr_as_ptr,
++ clippy::redundant_else,
++ clippy::semicolon_if_nothing_returned, // https://github.com/rust-lang/rust-clippy/issues/7324
++ clippy::similar_names,
++ clippy::unnested_or_patterns,
++ clippy::unseparated_literal_suffix,
++ clippy::wildcard_imports
++)]
++
++#[cfg(not(no_alloc_crate))]
++extern crate alloc;
++
++mod backport;
++mod display;
++mod error;
++mod eval;
++mod identifier;
++mod impls;
++mod parse;
++
++#[cfg(feature = "serde")]
++mod serde;
++
++use crate::alloc::vec::Vec;
++use crate::identifier::Identifier;
++use core::str::FromStr;
++
++#[allow(unused_imports)]
++use crate::backport::*;
++
++pub use crate::parse::Error;
++
++/// **SemVer version** as defined by <https://semver.org>.
++///
++/// # Syntax
++///
++/// - The major, minor, and patch numbers may be any integer 0 through u64::MAX.
++/// When representing a SemVer version as a string, each number is written as
++/// a base 10 integer. For example, `1.0.119`.
++///
++/// - Leading zeros are forbidden in those positions. For example `1.01.00` is
++/// invalid as a SemVer version.
++///
++/// - The pre-release identifier, if present, must conform to the syntax
++/// documented for [`Prerelease`].
++///
++/// - The build metadata, if present, must conform to the syntax documented for
++/// [`BuildMetadata`].
++///
++/// - Whitespace is not allowed anywhere in the version.
++///
++/// # Total ordering
++///
++/// Given any two SemVer versions, one is less than, greater than, or equal to
++/// the other. Versions may be compared against one another using Rust's usual
++/// comparison operators.
++///
++/// - The major, minor, and patch number are compared numerically from left to
++/// right, lexicographically ordered as a 3-tuple of integers. So for example
++/// version `1.5.0` is less than version `1.19.0`, despite the fact that
++/// "1.19.0" < "1.5.0" as ASCIIbetically compared strings and 1.19 < 1.5
++/// as real numbers.
++///
++/// - When major, minor, and patch are equal, a pre-release version is
++/// considered less than the ordinary release: version `1.0.0-alpha.1` is
++/// less than version `1.0.0`.
++///
++/// - Two pre-releases of the same major, minor, patch are compared by
++/// lexicographic ordering of dot-separated components of the pre-release
++/// string.
++///
++/// - Identifiers consisting of only digits are compared
++/// numerically: `1.0.0-pre.8` is less than `1.0.0-pre.12`.
++///
++/// - Identifiers that contain a letter or hyphen are compared in ASCII sort
++/// order: `1.0.0-pre12` is less than `1.0.0-pre8`.
++///
++/// - Any numeric identifier is always less than any non-numeric
++/// identifier: `1.0.0-pre.1` is less than `1.0.0-pre.x`.
++///
++/// Example: `1.0.0-alpha` < `1.0.0-alpha.1` < `1.0.0-alpha.beta` < `1.0.0-beta` < `1.0.0-beta.2` < `1.0.0-beta.11` < `1.0.0-rc.1` < `1.0.0`
++#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
++pub struct Version {
++ pub major: u64,
++ pub minor: u64,
++ pub patch: u64,
++ pub pre: Prerelease,
++ pub build: BuildMetadata,
++}
++
++/// **SemVer version requirement** describing the intersection of some version
++/// comparators, such as `>=1.2.3, <1.8`.
++///
++/// # Syntax
++///
++/// - Either `*` (meaning "any"), or one or more comma-separated comparators.
++///
++/// - A [`Comparator`] is an operator ([`Op`]) and a partial version, separated
++/// by optional whitespace. For example `>=1.0.0` or `>=1.0`.
++///
++/// - Build metadata is syntactically permitted on the partial versions, but is
++/// completely ignored, as it's never relevant to whether any comparator
++/// matches a particular version.
++///
++/// - Whitespace is permitted around commas and around operators. Whitespace is
++/// not permitted within a partial version, i.e. anywhere between the major
++/// version number and its minor, patch, pre-release, or build metadata.
++#[derive(Clone, Eq, PartialEq, Hash, Debug)]
++#[cfg_attr(no_const_vec_new, derive(Default))]
++pub struct VersionReq {
++ pub comparators: Vec<Comparator>,
++}
++
++/// A pair of comparison operator and partial version, such as `>=1.2`. Forms
++/// one piece of a VersionReq.
++#[derive(Clone, Eq, PartialEq, Hash, Debug)]
++pub struct Comparator {
++ pub op: Op,
++ pub major: u64,
++ pub minor: Option<u64>,
++ /// Patch is only allowed if minor is Some.
++ pub patch: Option<u64>,
++ /// Non-empty pre-release is only allowed if patch is Some.
++ pub pre: Prerelease,
++}
++
++/// SemVer comparison operator: `=`, `>`, `>=`, `<`, `<=`, `~`, `^`, `*`.
++///
++/// # Op::Exact
++/// -  **`=I.J.K`** — exactly the version I.J.K
++/// -  **`=I.J`** — equivalent to `>=I.J.0, <I.(J+1).0`
++/// -  **`=I`** — equivalent to `>=I.0.0, <(I+1).0.0`
++///
++/// # Op::Greater
++/// -  **`>I.J.K`**
++/// -  **`>I.J`** — equivalent to `>=I.(J+1).0`
++/// -  **`>I`** — equivalent to `>=(I+1).0.0`
++///
++/// # Op::GreaterEq
++/// -  **`>=I.J.K`**
++/// -  **`>=I.J`** — equivalent to `>=I.J.0`
++/// -  **`>=I`** — equivalent to `>=I.0.0`
++///
++/// # Op::Less
++/// -  **`<I.J.K`**
++/// -  **`<I.J`** — equivalent to `<I.J.0`
++/// -  **`<I`** — equivalent to `<I.0.0`
++///
++/// # Op::LessEq
++/// -  **`<=I.J.K`**
++/// -  **`<=I.J`** — equivalent to `<I.(J+1).0`
++/// -  **`<=I`** — equivalent to `<(I+1).0.0`
++///
++/// # Op::Tilde ("patch" updates)
++/// *Tilde requirements allow the **patch** part of the semver version (the third number) to increase.*
++/// -  **`~I.J.K`** — equivalent to `>=I.J.K, <I.(J+1).0`
++/// -  **`~I.J`** — equivalent to `=I.J`
++/// -  **`~I`** — equivalent to `=I`
++///
++/// # Op::Caret ("compatible" updates)
++/// *Caret requirements allow parts that are **right of the first nonzero** part of the semver version to increase.*
++/// -  **`^I.J.K`** (for I\>0) — equivalent to `>=I.J.K, <(I+1).0.0`
++/// -  **`^0.J.K`** (for J\>0) — equivalent to `>=0.J.K, <0.(J+1).0`
++/// -  **`^0.0.K`** — equivalent to `=0.0.K`
++/// -  **`^I.J`** (for I\>0 or J\>0) — equivalent to `^I.J.0`
++/// -  **`^0.0`** — equivalent to `=0.0`
++/// -  **`^I`** — equivalent to `=I`
++///
++/// # Op::Wildcard
++/// -  **`I.J.*`** — equivalent to `=I.J`
++/// -  **`I.*`** or **`I.*.*`** — equivalent to `=I`
++#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
++#[cfg_attr(not(no_non_exhaustive), non_exhaustive)]
++pub enum Op {
++ Exact,
++ Greater,
++ GreaterEq,
++ Less,
++ LessEq,
++ Tilde,
++ Caret,
++ Wildcard,
++
++ #[cfg(no_non_exhaustive)] // rustc <1.40
++ #[doc(hidden)]
++ __NonExhaustive,
++}
+
+-#![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
+- html_favicon_url = "https://www.rust-lang.org/favicon.ico")]
+-#![deny(missing_docs)]
+-#![cfg_attr(test, deny(warnings))]
++/// Optional pre-release identifier on a version string. This comes after `-` in
++/// a SemVer version, like `1.0.0-alpha.1`
++///
++/// # Examples
++///
++/// Some real world pre-release idioms drawn from crates.io:
++///
++/// - **[mio]** <code>0.7.0-<b>alpha.1</b></code> — the most common style
++/// for numbering pre-releases.
++///
++/// - **[pest]** <code>1.0.0-<b>beta.8</b></code>, <code>1.0.0-<b>rc.0</b></code>
++/// — this crate makes a distinction between betas and release
++/// candidates.
++///
++/// - **[sassers]** <code>0.11.0-<b>shitshow</b></code> — ???.
++///
++/// - **[atomic-utils]** <code>0.0.0-<b>reserved</b></code> — a squatted
++/// crate name.
++///
++/// [mio]: https://crates.io/crates/mio
++/// [pest]: https://crates.io/crates/pest
++/// [atomic-utils]: https://crates.io/crates/atomic-utils
++/// [sassers]: https://crates.io/crates/sassers
++///
++/// *Tip:* Be aware that if you are planning to number your own pre-releases,
++/// you should prefer to separate the numeric part from any non-numeric
++/// identifiers by using a dot in between. That is, prefer pre-releases
++/// `alpha.1`, `alpha.2`, etc rather than `alpha1`, `alpha2` etc. The SemVer
++/// spec's rule for pre-release precedence has special treatment of numeric
++/// components in the pre-release string, but only if there are no non-digit
++/// characters in the same dot-separated component. So you'd have `alpha.2` <
++/// `alpha.11` as intended, but `alpha11` < `alpha2`.
++///
++/// # Syntax
++///
++/// Pre-release strings are a series of dot separated identifiers immediately
++/// following the patch version. Identifiers must comprise only ASCII
++/// alphanumerics and hyphens: `0-9`, `A-Z`, `a-z`, `-`. Identifiers must not be
++/// empty. Numeric identifiers must not include leading zeros.
++///
++/// # Total ordering
++///
++/// Pre-releases have a total order defined by the SemVer spec. It uses
++/// lexicographic ordering of dot-separated components. Identifiers consisting
++/// of only digits are compared numerically. Otherwise, identifiers are compared
++/// in ASCII sort order. Any numeric identifier is always less than any
++/// non-numeric identifier.
++///
++/// Example: `alpha` < `alpha.85` < `alpha.90` < `alpha.200` < `alpha.0a` < `alpha.1a0` < `alpha.a` < `beta`
++#[derive(Default, Clone, Eq, PartialEq, Hash)]
++pub struct Prerelease {
++ identifier: Identifier,
++}
+
+-extern crate semver_parser;
+-
+-// Serialization and deserialization support for version numbers
+-#[cfg(feature = "serde")]
+-extern crate serde;
++/// Optional build metadata identifier. This comes after `+` in a SemVer
++/// version, as in `0.8.1+zstd.1.5.0`.
++///
++/// # Examples
++///
++/// Some real world build metadata idioms drawn from crates.io:
++///
++/// - **[libgit2-sys]** <code>0.12.20+<b>1.1.0</b></code> — for this
++/// crate, the build metadata indicates the version of the C libgit2 library
++/// that the Rust crate is built against.
++///
++/// - **[mashup]** <code>0.1.13+<b>deprecated</b></code> — just the word
++/// "deprecated" for a crate that has been superseded by another. Eventually
++/// people will take notice of this in Cargo's build output where it lists the
++/// crates being compiled.
++///
++/// - **[google-bigquery2]** <code>2.0.4+<b>20210327</b></code> — this
++/// library is automatically generated from an official API schema, and the
++/// build metadata indicates the date on which that schema was last captured.
++///
++/// - **[fbthrift-git]** <code>0.0.6+<b>c7fcc0e</b></code> — this crate is
++/// published from snapshots of a big company monorepo. In monorepo
++/// development, there is no concept of versions, and all downstream code is
++/// just updated atomically in the same commit that breaking changes to a
++/// library are landed. Therefore for crates.io purposes, every published
++/// version must be assumed to be incompatible with the previous. The build
++/// metadata provides the source control hash of the snapshotted code.
++///
++/// [libgit2-sys]: https://crates.io/crates/libgit2-sys
++/// [mashup]: https://crates.io/crates/mashup
++/// [google-bigquery2]: https://crates.io/crates/google-bigquery2
++/// [fbthrift-git]: https://crates.io/crates/fbthrift-git
++///
++/// # Syntax
++///
++/// Build metadata is a series of dot separated identifiers immediately
++/// following the patch or pre-release version. Identifiers must comprise only
++/// ASCII alphanumerics and hyphens: `0-9`, `A-Z`, `a-z`, `-`. Identifiers must
++/// not be empty. Leading zeros *are* allowed, unlike any other place in the
++/// SemVer grammar.
++///
++/// # Total ordering
++///
++/// Build metadata is ignored in evaluating `VersionReq`; it plays no role in
++/// whether a `Version` matches any one of the comparison operators.
++///
++/// However for comparing build metadatas among one another, they do have a
++/// total order which is determined by lexicographic ordering of dot-separated
++/// components. Identifiers consisting of only digits are compared numerically.
++/// Otherwise, identifiers are compared in ASCII sort order. Any numeric
++/// identifier is always less than any non-numeric identifier.
++///
++/// Example: `demo` < `demo.85` < `demo.90` < `demo.090` < `demo.200` < `demo.1a0` < `demo.a` < `memo`
++#[derive(Default, Clone, Eq, PartialEq, Hash)]
++pub struct BuildMetadata {
++ identifier: Identifier,
++}
+
+-// We take the common approach of keeping our own module system private, and
+-// just re-exporting the interface that we want.
++impl Version {
++ /// Create `Version` with an empty pre-release and build metadata.
++ ///
++ /// Equivalent to:
++ ///
++ /// ```
++ /// # use semver::{BuildMetadata, Prerelease, Version};
++ /// #
++ /// # const fn new(major: u64, minor: u64, patch: u64) -> Version {
++ /// Version {
++ /// major,
++ /// minor,
++ /// patch,
++ /// pre: Prerelease::EMPTY,
++ /// build: BuildMetadata::EMPTY,
++ /// }
++ /// # }
++ /// ```
++ pub const fn new(major: u64, minor: u64, patch: u64) -> Self {
++ Version {
++ major,
++ minor,
++ patch,
++ pre: Prerelease::EMPTY,
++ build: BuildMetadata::EMPTY,
++ }
++ }
++
++ /// Create `Version` by parsing from string representation.
++ ///
++ /// # Errors
++ ///
++ /// Possible reasons for the parse to fail include:
++ ///
++ /// - `1.0` — too few numeric components. A SemVer version must have
++ /// exactly three. If you are looking at something that has fewer than
++ /// three numbers in it, it's possible it is a `VersionReq` instead (with
++ /// an implicit default `^` comparison operator).
++ ///
++ /// - `1.0.01` — a numeric component has a leading zero.
++ ///
++ /// - `1.0.unknown` — unexpected character in one of the components.
++ ///
++ /// - `1.0.0-` or `1.0.0+` — the pre-release or build metadata are
++ /// indicated present but empty.
++ ///
++ /// - `1.0.0-alpha_123` — pre-release or build metadata have something
++ /// outside the allowed characters, which are `0-9`, `A-Z`, `a-z`, `-`,
++ /// and `.` (dot).
++ ///
++ /// - `23456789999999999999.0.0` — overflow of a u64.
++ pub fn parse(text: &str) -> Result<Self, Error> {
++ Version::from_str(text)
++ }
++}
++
++impl VersionReq {
++ /// A `VersionReq` with no constraint on the version numbers it matches.
++ /// Equivalent to `VersionReq::parse("*").unwrap()`.
++ ///
++ /// In terms of comparators this is equivalent to `>=0.0.0`.
++ ///
++ /// Counterintuitively a `*` VersionReq does not match every possible
++ /// version number. In particular, in order for *any* `VersionReq` to match
++ /// a pre-release version, the `VersionReq` must contain at least one
++ /// `Comparator` that has an explicit major, minor, and patch version
++ /// identical to the pre-release being matched, and that has a nonempty
++ /// pre-release component. Since `*` is not written with an explicit major,
++ /// minor, and patch version, and does not contain a nonempty pre-release
++ /// component, it does not match any pre-release versions.
++ #[cfg(not(no_const_vec_new))] // rustc <1.39
++ pub const STAR: Self = VersionReq {
++ comparators: Vec::new(),
++ };
+
+-pub use version::{Version, Identifier, SemVerError};
+-pub use version::Identifier::{Numeric, AlphaNumeric};
+-pub use version_req::{VersionReq, ReqParseError};
++ /// Create `VersionReq` by parsing from string representation.
++ ///
++ /// # Errors
++ ///
++ /// Possible reasons for the parse to fail include:
++ ///
++ /// - `>a.b` — unexpected characters in the partial version.
++ ///
++ /// - `(a)1.0.0` — unrecognized comparison operator.
++ ///
++ /// - `^1.0.0, ` — unexpected end of input.
++ ///
++ /// - `>=1.0 <2.0` — missing comma between comparators.
++ ///
++ /// - `*.*` — unsupported wildcard syntax.
++ pub fn parse(text: &str) -> Result<Self, Error> {
++ VersionReq::from_str(text)
++ }
++
++ /// Evaluate whether the given `Version` satisfies the version requirement
++ /// described by `self`.
++ pub fn matches(&self, version: &Version) -> bool {
++ eval::matches_req(self, version)
++ }
++}
++
++/// The default VersionReq is the same as [`VersionReq::STAR`].
++#[cfg(not(no_const_vec_new))]
++impl Default for VersionReq {
++ fn default() -> Self {
++ VersionReq::STAR
++ }
++}
++
++impl Comparator {
++ pub fn parse(text: &str) -> Result<Self, Error> {
++ Comparator::from_str(text)
++ }
+
+-// SemVer-compliant versions.
+-mod version;
++ pub fn matches(&self, version: &Version) -> bool {
++ eval::matches_comparator(self, version)
++ }
++}
++
++impl Prerelease {
++ pub const EMPTY: Self = Prerelease {
++ identifier: Identifier::empty(),
++ };
++
++ pub fn new(text: &str) -> Result<Self, Error> {
++ Prerelease::from_str(text)
++ }
++
++ pub fn as_str(&self) -> &str {
++ self.identifier.as_str()
++ }
+
+-// advanced version comparisons
+-mod version_req;
++ pub fn is_empty(&self) -> bool {
++ self.identifier.is_empty()
++ }
++}
++
++impl BuildMetadata {
++ pub const EMPTY: Self = BuildMetadata {
++ identifier: Identifier::empty(),
++ };
++
++ pub fn new(text: &str) -> Result<Self, Error> {
++ BuildMetadata::from_str(text)
++ }
++
++ pub fn as_str(&self) -> &str {
++ self.identifier.as_str()
++ }
++
++ pub fn is_empty(&self) -> bool {
++ self.identifier.is_empty()
++ }
++}
+diff --git a/third_party/rust/semver/src/parse.rs b/third_party/rust/semver/src/parse.rs
+new file mode 100644
+--- /dev/null
++++ b/third_party/rust/semver/src/parse.rs
+@@ -0,0 +1,405 @@
++use crate::backport::*;
++use crate::error::{ErrorKind, Position};
++use crate::identifier::Identifier;
++use crate::{BuildMetadata, Comparator, Op, Prerelease, Version, VersionReq};
++use core::str::FromStr;
++
++/// Error parsing a SemVer version or version requirement.
++///
++/// # Example
++///
++/// ```
++/// use semver::Version;
++///
++/// fn main() {
++/// let err = Version::parse("1.q.r").unwrap_err();
++///
++/// // "unexpected character 'q' while parsing minor version number"
++/// eprintln!("{}", err);
++/// }
++/// ```
++pub struct Error {
++ pub(crate) kind: ErrorKind,
++}
++
++impl FromStr for Version {
++ type Err = Error;
++
++ fn from_str(text: &str) -> Result<Self, Self::Err> {
++ let mut pos = Position::Major;
++ let (major, text) = numeric_identifier(text, pos)?;
++ let text = dot(text, pos)?;
++
++ pos = Position::Minor;
++ let (minor, text) = numeric_identifier(text, pos)?;
++ let text = dot(text, pos)?;
++
++ pos = Position::Patch;
++ let (patch, text) = numeric_identifier(text, pos)?;
++
++ if text.is_empty() {
++ return Ok(Version::new(major, minor, patch));
++ }
++
++ let (pre, text) = if let Some(text) = text.strip_prefix('-') {
++ pos = Position::Pre;
++ let (pre, text) = prerelease_identifier(text)?;
++ if pre.is_empty() {
++ return Err(Error::new(ErrorKind::EmptySegment(pos)));
++ }
++ (pre, text)
++ } else {
++ (Prerelease::EMPTY, text)
++ };
++
++ let (build, text) = if let Some(text) = text.strip_prefix('+') {
++ pos = Position::Build;
++ let (build, text) = build_identifier(text)?;
++ if build.is_empty() {
++ return Err(Error::new(ErrorKind::EmptySegment(pos)));
++ }
++ (build, text)
++ } else {
++ (BuildMetadata::EMPTY, text)
++ };
++
++ if let Some(unexpected) = text.chars().next() {
++ return Err(Error::new(ErrorKind::UnexpectedCharAfter(pos, unexpected)));
++ }
++
++ Ok(Version {
++ major,
++ minor,
++ patch,
++ pre,
++ build,
++ })
++ }
++}
++
++impl FromStr for VersionReq {
++ type Err = Error;
++
++ fn from_str(text: &str) -> Result<Self, Self::Err> {
++ let text = text.trim_start_matches(' ');
++ if let Some((ch, text)) = wildcard(text) {
++ let rest = text.trim_start_matches(' ');
++ if rest.is_empty() {
++ #[cfg(not(no_const_vec_new))]
++ return Ok(VersionReq::STAR);
++ #[cfg(no_const_vec_new)] // rustc <1.39
++ return Ok(VersionReq {
++ comparators: Vec::new(),
++ });
++ } else if rest.starts_with(',') {
++ return Err(Error::new(ErrorKind::WildcardNotTheOnlyComparator(ch)));
++ } else {
++ return Err(Error::new(ErrorKind::UnexpectedAfterWildcard));
++ }
++ }
++
++ let depth = 0;
++ let mut comparators = Vec::new();
++ let len = version_req(text, &mut comparators, depth)?;
++ unsafe { comparators.set_len(len) }
++ Ok(VersionReq { comparators })
++ }
++}
++
++impl FromStr for Comparator {
++ type Err = Error;
++
++ fn from_str(text: &str) -> Result<Self, Self::Err> {
++ let text = text.trim_start_matches(' ');
++ let (comparator, pos, rest) = comparator(text)?;
++ if !rest.is_empty() {
++ let unexpected = rest.chars().next().unwrap();
++ return Err(Error::new(ErrorKind::UnexpectedCharAfter(pos, unexpected)));
++ }
++ Ok(comparator)
++ }
++}
++
++impl FromStr for Prerelease {
++ type Err = Error;
++
++ fn from_str(text: &str) -> Result<Self, Self::Err> {
++ let (pre, rest) = prerelease_identifier(text)?;
++ if !rest.is_empty() {
++ return Err(Error::new(ErrorKind::IllegalCharacter(Position::Pre)));
++ }
++ Ok(pre)
++ }
++}
++
++impl FromStr for BuildMetadata {
++ type Err = Error;
++
++ fn from_str(text: &str) -> Result<Self, Self::Err> {
++ let (build, rest) = build_identifier(text)?;
++ if !rest.is_empty() {
++ return Err(Error::new(ErrorKind::IllegalCharacter(Position::Build)));
++ }
++ Ok(build)
++ }
++}
++
++impl Error {
++ fn new(kind: ErrorKind) -> Self {
++ Error { kind }
++ }
++}
++
++impl Op {
++ const DEFAULT: Self = Op::Caret;
++}
++
++fn numeric_identifier(input: &str, pos: Position) -> Result<(u64, &str), Error> {
++ let mut len = 0;
++ let mut value = 0u64;
++
++ while let Some(&digit) = input.as_bytes().get(len) {
++ if digit < b'0' || digit > b'9' {
++ break;
++ }
++ if value == 0 && len > 0 {
++ return Err(Error::new(ErrorKind::LeadingZero(pos)));
++ }
++ match value
++ .checked_mul(10)
++ .and_then(|value| value.checked_add((digit - b'0') as u64))
++ {
++ Some(sum) => value = sum,
++ None => return Err(Error::new(ErrorKind::Overflow(pos))),
++ }
++ len += 1;
++ }
++
++ if len > 0 {
++ Ok((value, &input[len..]))
++ } else if let Some(unexpected) = input[len..].chars().next() {
++ Err(Error::new(ErrorKind::UnexpectedChar(pos, unexpected)))
++ } else {
++ Err(Error::new(ErrorKind::UnexpectedEnd(pos)))
++ }
++}
++
++fn wildcard(input: &str) -> Option<(char, &str)> {
++ if let Some(rest) = input.strip_prefix('*') {
++ Some(('*', rest))
++ } else if let Some(rest) = input.strip_prefix('x') {
++ Some(('x', rest))
++ } else if let Some(rest) = input.strip_prefix('X') {
++ Some(('X', rest))
++ } else {
++ None
++ }
++}
++
++fn dot(input: &str, pos: Position) -> Result<&str, Error> {
++ if let Some(rest) = input.strip_prefix('.') {
++ Ok(rest)
++ } else if let Some(unexpected) = input.chars().next() {
++ Err(Error::new(ErrorKind::UnexpectedCharAfter(pos, unexpected)))
++ } else {
++ Err(Error::new(ErrorKind::UnexpectedEnd(pos)))
++ }
++}
++
++fn prerelease_identifier(input: &str) -> Result<(Prerelease, &str), Error> {
++ let (string, rest) = identifier(input, Position::Pre)?;
++ let identifier = unsafe { Identifier::new_unchecked(string) };
++ Ok((Prerelease { identifier }, rest))
++}
++
++fn build_identifier(input: &str) -> Result<(BuildMetadata, &str), Error> {
++ let (string, rest) = identifier(input, Position::Build)?;
++ let identifier = unsafe { Identifier::new_unchecked(string) };
++ Ok((BuildMetadata { identifier }, rest))
++}
++
++fn identifier(input: &str, pos: Position) -> Result<(&str, &str), Error> {
++ let mut accumulated_len = 0;
++ let mut segment_len = 0;
++ let mut segment_has_nondigit = false;
++
++ loop {
++ match input.as_bytes().get(accumulated_len + segment_len) {
++ Some(b'A'..=b'Z') | Some(b'a'..=b'z') | Some(b'-') => {
++ segment_len += 1;
++ segment_has_nondigit = true;
++ }
++ Some(b'0'..=b'9') => {
++ segment_len += 1;
++ }
++ boundary => {
++ if segment_len == 0 {
++ if accumulated_len == 0 && boundary != Some(&b'.') {
++ return Ok(("", input));
++ } else {
++ return Err(Error::new(ErrorKind::EmptySegment(pos)));
++ }
++ }
++ if pos == Position::Pre
++ && segment_len > 1
++ && !segment_has_nondigit
++ && input[accumulated_len..].starts_with('0')
++ {
++ return Err(Error::new(ErrorKind::LeadingZero(pos)));
++ }
++ accumulated_len += segment_len;
++ if boundary == Some(&b'.') {
++ accumulated_len += 1;
++ segment_len = 0;
++ segment_has_nondigit = false;
++ } else {
++ return Ok(input.split_at(accumulated_len));
++ }
++ }
++ }
++ }
++}
++
++fn op(input: &str) -> (Op, &str) {
++ let bytes = input.as_bytes();
++ if bytes.get(0) == Some(&b'=') {
++ (Op::Exact, &input[1..])
++ } else if bytes.get(0) == Some(&b'>') {
++ if bytes.get(1) == Some(&b'=') {
++ (Op::GreaterEq, &input[2..])
++ } else {
++ (Op::Greater, &input[1..])
++ }
++ } else if bytes.get(0) == Some(&b'<') {
++ if bytes.get(1) == Some(&b'=') {
++ (Op::LessEq, &input[2..])
++ } else {
++ (Op::Less, &input[1..])
++ }
++ } else if bytes.get(0) == Some(&b'~') {
++ (Op::Tilde, &input[1..])
++ } else if bytes.get(0) == Some(&b'^') {
++ (Op::Caret, &input[1..])
++ } else {
++ (Op::DEFAULT, input)
++ }
++}
++
++fn comparator(input: &str) -> Result<(Comparator, Position, &str), Error> {
++ let (mut op, text) = op(input);
++ let default_op = input.len() == text.len();
++ let text = text.trim_start_matches(' ');
++
++ let mut pos = Position::Major;
++ let (major, text) = numeric_identifier(text, pos)?;
++ let mut has_wildcard = false;
++
++ let (minor, text) = if let Some(text) = text.strip_prefix('.') {
++ pos = Position::Minor;
++ if let Some((_, text)) = wildcard(text) {
++ has_wildcard = true;
++ if default_op {
++ op = Op::Wildcard;
++ }
++ (None, text)
++ } else {
++ let (minor, text) = numeric_identifier(text, pos)?;
++ (Some(minor), text)
++ }
++ } else {
++ (None, text)
++ };
++
++ let (patch, text) = if let Some(text) = text.strip_prefix('.') {
++ pos = Position::Patch;
++ if let Some((_, text)) = wildcard(text) {
++ if default_op {
++ op = Op::Wildcard;
++ }
++ (None, text)
++ } else if has_wildcard {
++ return Err(Error::new(ErrorKind::UnexpectedAfterWildcard));
++ } else {
++ let (patch, text) = numeric_identifier(text, pos)?;
++ (Some(patch), text)
++ }
++ } else {
++ (None, text)
++ };
++
++ let (pre, text) = if patch.is_some() && text.starts_with('-') {
++ pos = Position::Pre;
++ let text = &text[1..];
++ let (pre, text) = prerelease_identifier(text)?;
++ if pre.is_empty() {
++ return Err(Error::new(ErrorKind::EmptySegment(pos)));
++ }
++ (pre, text)
++ } else {
++ (Prerelease::EMPTY, text)
++ };
++
++ let text = if patch.is_some() && text.starts_with('+') {
++ pos = Position::Build;
++ let text = &text[1..];
++ let (build, text) = build_identifier(text)?;
++ if build.is_empty() {
++ return Err(Error::new(ErrorKind::EmptySegment(pos)));
++ }
++ text
++ } else {
++ text
++ };
++
++ let text = text.trim_start_matches(' ');
++
++ let comparator = Comparator {
++ op,
++ major,
++ minor,
++ patch,
++ pre,
++ };
++
++ Ok((comparator, pos, text))
++}
++
++fn version_req(input: &str, out: &mut Vec<Comparator>, depth: usize) -> Result<usize, Error> {
++ let (comparator, pos, text) = match comparator(input) {
++ Ok(success) => success,
++ Err(mut error) => {
++ if let Some((ch, mut rest)) = wildcard(input) {
++ rest = rest.trim_start_matches(' ');
++ if rest.is_empty() || rest.starts_with(',') {
++ error.kind = ErrorKind::WildcardNotTheOnlyComparator(ch);
++ }
++ }
++ return Err(error);
++ }
++ };
++
++ if text.is_empty() {
++ out.reserve_exact(depth + 1);
++ unsafe { out.as_mut_ptr().add(depth).write(comparator) }
++ return Ok(depth + 1);
++ }
++
++ let text = if let Some(text) = text.strip_prefix(',') {
++ text.trim_start_matches(' ')
++ } else {
++ let unexpected = text.chars().next().unwrap();
++ return Err(Error::new(ErrorKind::ExpectedCommaFound(pos, unexpected)));
++ };
++
++ const MAX_COMPARATORS: usize = 32;
++ if depth + 1 == MAX_COMPARATORS {
++ return Err(Error::new(ErrorKind::ExcessiveComparators));
++ }
++
++ // Recurse to collect parsed Comparator objects on the stack. We perform a
++ // single allocation to allocate exactly the right sized Vec only once the
++ // total number of comparators is known.
++ let len = version_req(text, out, depth + 1)?;
++ unsafe { out.as_mut_ptr().add(depth).write(comparator) }
++ Ok(len)
++}
+diff --git a/third_party/rust/semver/src/serde.rs b/third_party/rust/semver/src/serde.rs
+new file mode 100644
+--- /dev/null
++++ b/third_party/rust/semver/src/serde.rs
+@@ -0,0 +1,74 @@
++use crate::{Version, VersionReq};
++use core::fmt;
++use serde::de::{Deserialize, Deserializer, Error, Visitor};
++use serde::ser::{Serialize, Serializer};
++
++impl Serialize for Version {
++ fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
++ where
++ S: Serializer,
++ {
++ serializer.collect_str(self)
++ }
++}
++
++impl Serialize for VersionReq {
++ fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
++ where
++ S: Serializer,
++ {
++ serializer.collect_str(self)
++ }
++}
++
++impl<'de> Deserialize<'de> for Version {
++ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
++ where
++ D: Deserializer<'de>,
++ {
++ struct VersionVisitor;
++
++ impl<'de> Visitor<'de> for VersionVisitor {
++ type Value = Version;
++
++ fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ formatter.write_str("semver version")
++ }
++
++ fn visit_str<E>(self, string: &str) -> Result<Self::Value, E>
++ where
++ E: Error,
++ {
++ string.parse().map_err(Error::custom)
++ }
++ }
++
++ deserializer.deserialize_str(VersionVisitor)
++ }
++}
++
++impl<'de> Deserialize<'de> for VersionReq {
++ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
++ where
++ D: Deserializer<'de>,
++ {
++ struct VersionReqVisitor;
++
++ impl<'de> Visitor<'de> for VersionReqVisitor {
++ type Value = VersionReq;
++
++ fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ formatter.write_str("semver version")
++ }
++
++ fn visit_str<E>(self, string: &str) -> Result<Self::Value, E>
++ where
++ E: Error,
++ {
++ string.parse().map_err(Error::custom)
++ }
++ }
++
++ deserializer.deserialize_str(VersionReqVisitor)
++ }
++}
+diff --git a/third_party/rust/semver/src/version.rs b/third_party/rust/semver/src/version.rs
+deleted file mode 100644
+--- a/third_party/rust/semver/src/version.rs
++++ /dev/null
+@@ -1,759 +0,0 @@
+-// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT
+-// file at the top-level directory of this distribution and at
+-// http://rust-lang.org/COPYRIGHT.
+-//
+-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+-// option. This file may not be copied, modified, or distributed
+-// except according to those terms.
+-
+-//! The `version` module gives you tools to create and compare SemVer-compliant
+-//! versions.
+-
+-use std::cmp::{self, Ordering};
+-use std::fmt;
+-use std::hash;
+-use std::error::Error;
+-
+-use std::result;
+-use std::str;
+-
+-use semver_parser;
+-
+-#[cfg(feature = "serde")]
+-use serde::ser::{Serialize, Serializer};
+-#[cfg(feature = "serde")]
+-use serde::de::{self, Deserialize, Deserializer, Visitor};
+-
+-/// An identifier in the pre-release or build metadata.
+-///
+-/// See sections 9 and 10 of the spec for more about pre-release identifers and
+-/// build metadata.
+-#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
+-pub enum Identifier {
+- /// An identifier that's solely numbers.
+- Numeric(u64),
+- /// An identifier with letters and numbers.
+- AlphaNumeric(String),
+-}
+-
+-impl From<semver_parser::version::Identifier> for Identifier {
+- fn from(other: semver_parser::version::Identifier) -> Identifier {
+- match other {
+- semver_parser::version::Identifier::Numeric(n) => Identifier::Numeric(n),
+- semver_parser::version::Identifier::AlphaNumeric(s) => Identifier::AlphaNumeric(s),
+- }
+- }
+-}
+-
+-impl fmt::Display for Identifier {
+- #[inline]
+- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- match *self {
+- Identifier::Numeric(ref n) => fmt::Display::fmt(n, f),
+- Identifier::AlphaNumeric(ref s) => fmt::Display::fmt(s, f),
+- }
+- }
+-}
+-
+-#[cfg(feature = "serde")]
+-impl Serialize for Identifier {
+- fn serialize<S>(&self, serializer: S) -> result::Result<S::Ok, S::Error>
+- where S: Serializer
+- {
+- // Serialize Identifier as a number or string.
+- match *self {
+- Identifier::Numeric(n) => serializer.serialize_u64(n),
+- Identifier::AlphaNumeric(ref s) => serializer.serialize_str(s),
+- }
+- }
+-}
+-
+-#[cfg(feature = "serde")]
+-impl<'de> Deserialize<'de> for Identifier {
+- fn deserialize<D>(deserializer: D) -> result::Result<Self, D::Error>
+- where D: Deserializer<'de>
+- {
+- struct IdentifierVisitor;
+-
+- // Deserialize Identifier from a number or string.
+- impl<'de> Visitor<'de> for IdentifierVisitor {
+- type Value = Identifier;
+-
+- fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+- formatter.write_str("a SemVer pre-release or build identifier")
+- }
+-
+- fn visit_u64<E>(self, numeric: u64) -> result::Result<Self::Value, E>
+- where E: de::Error
+- {
+- Ok(Identifier::Numeric(numeric))
+- }
+-
+- fn visit_str<E>(self, alphanumeric: &str) -> result::Result<Self::Value, E>
+- where E: de::Error
+- {
+- Ok(Identifier::AlphaNumeric(alphanumeric.to_owned()))
+- }
+- }
+-
+- deserializer.deserialize_any(IdentifierVisitor)
+- }
+-}
+-
+-/// Represents a version number conforming to the semantic versioning scheme.
+-#[derive(Clone, Eq, Debug)]
+-pub struct Version {
+- /// The major version, to be incremented on incompatible changes.
+- pub major: u64,
+- /// The minor version, to be incremented when functionality is added in a
+- /// backwards-compatible manner.
+- pub minor: u64,
+- /// The patch version, to be incremented when backwards-compatible bug
+- /// fixes are made.
+- pub patch: u64,
+- /// The pre-release version identifier, if one exists.
+- pub pre: Vec<Identifier>,
+- /// The build metadata, ignored when determining version precedence.
+- pub build: Vec<Identifier>,
+-}
+-
+-impl From<semver_parser::version::Version> for Version {
+- fn from(other: semver_parser::version::Version) -> Version {
+- Version {
+- major: other.major,
+- minor: other.minor,
+- patch: other.patch,
+- pre: other.pre.into_iter().map(From::from).collect(),
+- build: other.build.into_iter().map(From::from).collect(),
+- }
+- }
+-}
+-
+-#[cfg(feature = "serde")]
+-impl Serialize for Version {
+- fn serialize<S>(&self, serializer: S) -> result::Result<S::Ok, S::Error>
+- where S: Serializer
+- {
+- // Serialize Version as a string.
+- serializer.collect_str(self)
+- }
+-}
+-
+-#[cfg(feature = "serde")]
+-impl<'de> Deserialize<'de> for Version {
+- fn deserialize<D>(deserializer: D) -> result::Result<Self, D::Error>
+- where D: Deserializer<'de>
+- {
+- struct VersionVisitor;
+-
+- // Deserialize Version from a string.
+- impl<'de> Visitor<'de> for VersionVisitor {
+- type Value = Version;
+-
+- fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+- formatter.write_str("a SemVer version as a string")
+- }
+-
+- fn visit_str<E>(self, v: &str) -> result::Result<Self::Value, E>
+- where E: de::Error
+- {
+- Version::parse(v).map_err(de::Error::custom)
+- }
+- }
+-
+- deserializer.deserialize_str(VersionVisitor)
+- }
+-}
+-
+-/// An error type for this crate
+-///
+-/// Currently, just a generic error. Will make this nicer later.
+-#[derive(Clone,PartialEq,Debug,PartialOrd)]
+-pub enum SemVerError {
+- /// An error ocurred while parsing.
+- ParseError(String),
+-}
+-
+-impl fmt::Display for SemVerError {
+- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- match self {
+- &SemVerError::ParseError(ref m) => write!(f, "{}", m),
+- }
+- }
+-}
+-
+-impl Error for SemVerError {
+- fn description(&self) -> &str {
+- match self {
+- &SemVerError::ParseError(ref m) => m,
+- }
+- }
+-}
+-
+-/// A Result type for errors
+-pub type Result<T> = result::Result<T, SemVerError>;
+-
+-impl Version {
+-
+- /// Contructs the simple case without pre or build.
+- pub fn new(major: u64, minor: u64, patch: u64) -> Version {
+- Version {
+- major: major,
+- minor: minor,
+- patch: patch,
+- pre: Vec::new(),
+- build: Vec::new()
+- }
+- }
+-
+- /// Parse a string into a semver object.
+- pub fn parse(version: &str) -> Result<Version> {
+- let res = semver_parser::version::parse(version);
+-
+- match res {
+- // Convert plain String error into proper ParseError
+- Err(e) => Err(SemVerError::ParseError(e)),
+- Ok(v) => Ok(From::from(v)),
+- }
+- }
+-
+- /// Clears the build metadata
+- fn clear_metadata(&mut self) {
+- self.build = Vec::new();
+- self.pre = Vec::new();
+- }
+-
+- /// Increments the patch number for this Version (Must be mutable)
+- pub fn increment_patch(&mut self) {
+- self.patch += 1;
+- self.clear_metadata();
+- }
+-
+- /// Increments the minor version number for this Version (Must be mutable)
+- ///
+- /// As instructed by section 7 of the spec, the patch number is reset to 0.
+- pub fn increment_minor(&mut self) {
+- self.minor += 1;
+- self.patch = 0;
+- self.clear_metadata();
+- }
+-
+- /// Increments the major version number for this Version (Must be mutable)
+- ///
+- /// As instructed by section 8 of the spec, the minor and patch numbers are
+- /// reset to 0
+- pub fn increment_major(&mut self) {
+- self.major += 1;
+- self.minor = 0;
+- self.patch = 0;
+- self.clear_metadata();
+- }
+-
+- /// Checks to see if the current Version is in pre-release status
+- pub fn is_prerelease(&self) -> bool {
+- !self.pre.is_empty()
+- }
+-}
+-
+-impl str::FromStr for Version {
+- type Err = SemVerError;
+-
+- fn from_str(s: &str) -> Result<Version> {
+- Version::parse(s)
+- }
+-}
+-
+-impl fmt::Display for Version {
+- #[inline]
+- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- try!(write!(f, "{}.{}.{}", self.major, self.minor, self.patch));
+- if !self.pre.is_empty() {
+- try!(write!(f, "-"));
+- for (i, x) in self.pre.iter().enumerate() {
+- if i != 0 {
+- try!(write!(f, "."))
+- }
+- try!(write!(f, "{}", x));
+- }
+- }
+- if !self.build.is_empty() {
+- try!(write!(f, "+"));
+- for (i, x) in self.build.iter().enumerate() {
+- if i != 0 {
+- try!(write!(f, "."))
+- }
+- try!(write!(f, "{}", x));
+- }
+- }
+- Ok(())
+- }
+-}
+-
+-impl cmp::PartialEq for Version {
+- #[inline]
+- fn eq(&self, other: &Version) -> bool {
+- // We should ignore build metadata here, otherwise versions v1 and v2
+- // can exist such that !(v1 < v2) && !(v1 > v2) && v1 != v2, which
+- // violate strict total ordering rules.
+- self.major == other.major && self.minor == other.minor && self.patch == other.patch &&
+- self.pre == other.pre
+- }
+-}
+-
+-impl cmp::PartialOrd for Version {
+- fn partial_cmp(&self, other: &Version) -> Option<Ordering> {
+- Some(self.cmp(other))
+- }
+-}
+-
+-impl cmp::Ord for Version {
+- fn cmp(&self, other: &Version) -> Ordering {
+- match self.major.cmp(&other.major) {
+- Ordering::Equal => {}
+- r => return r,
+- }
+-
+- match self.minor.cmp(&other.minor) {
+- Ordering::Equal => {}
+- r => return r,
+- }
+-
+- match self.patch.cmp(&other.patch) {
+- Ordering::Equal => {}
+- r => return r,
+- }
+-
+- // NB: semver spec says 0.0.0-pre < 0.0.0
+- // but the version of ord defined for vec
+- // says that [] < [pre] so we alter it here
+- match (self.pre.len(), other.pre.len()) {
+- (0, 0) => Ordering::Equal,
+- (0, _) => Ordering::Greater,
+- (_, 0) => Ordering::Less,
+- (_, _) => self.pre.cmp(&other.pre),
+- }
+- }
+-}
+-
+-impl hash::Hash for Version {
+- fn hash<H: hash::Hasher>(&self, into: &mut H) {
+- self.major.hash(into);
+- self.minor.hash(into);
+- self.patch.hash(into);
+- self.pre.hash(into);
+- }
+-}
+-
+-impl From<(u64,u64,u64)> for Version {
+- fn from(tuple: (u64,u64,u64)) -> Version {
+- let (major, minor, patch) = tuple;
+- Version::new(major, minor, patch)
+- }
+-}
+-
+-#[cfg(test)]
+-mod tests {
+- use std::result;
+- use super::Version;
+- use super::Identifier;
+- use super::SemVerError;
+-
+- #[test]
+- fn test_parse() {
+- fn parse_error(e: &str) -> result::Result<Version, SemVerError> {
+- return Err(SemVerError::ParseError(e.to_string()));
+- }
+-
+- assert_eq!(Version::parse(""),
+- parse_error("Error parsing major identifier"));
+- assert_eq!(Version::parse(" "),
+- parse_error("Error parsing major identifier"));
+- assert_eq!(Version::parse("1"),
+- parse_error("Expected dot"));
+- assert_eq!(Version::parse("1.2"),
+- parse_error("Expected dot"));
+- assert_eq!(Version::parse("1.2.3-"),
+- parse_error("Error parsing prerelease"));
+- assert_eq!(Version::parse("a.b.c"),
+- parse_error("Error parsing major identifier"));
+- assert_eq!(Version::parse("1.2.3 abc"),
+- parse_error("Extra junk after valid version: abc"));
+-
+- assert_eq!(Version::parse("1.2.3"),
+- Ok(Version {
+- major: 1,
+- minor: 2,
+- patch: 3,
+- pre: Vec::new(),
+- build: Vec::new(),
+- }));
+-
+- assert_eq!(Version::parse("1.2.3"),
+- Ok(Version::new(1,2,3)));
+-
+- assert_eq!(Version::parse(" 1.2.3 "),
+- Ok(Version {
+- major: 1,
+- minor: 2,
+- patch: 3,
+- pre: Vec::new(),
+- build: Vec::new(),
+- }));
+- assert_eq!(Version::parse("1.2.3-alpha1"),
+- Ok(Version {
+- major: 1,
+- minor: 2,
+- patch: 3,
+- pre: vec![Identifier::AlphaNumeric(String::from("alpha1"))],
+- build: Vec::new(),
+- }));
+- assert_eq!(Version::parse(" 1.2.3-alpha1 "),
+- Ok(Version {
+- major: 1,
+- minor: 2,
+- patch: 3,
+- pre: vec![Identifier::AlphaNumeric(String::from("alpha1"))],
+- build: Vec::new(),
+- }));
+- assert_eq!(Version::parse("1.2.3+build5"),
+- Ok(Version {
+- major: 1,
+- minor: 2,
+- patch: 3,
+- pre: Vec::new(),
+- build: vec![Identifier::AlphaNumeric(String::from("build5"))],
+- }));
+- assert_eq!(Version::parse(" 1.2.3+build5 "),
+- Ok(Version {
+- major: 1,
+- minor: 2,
+- patch: 3,
+- pre: Vec::new(),
+- build: vec![Identifier::AlphaNumeric(String::from("build5"))],
+- }));
+- assert_eq!(Version::parse("1.2.3-alpha1+build5"),
+- Ok(Version {
+- major: 1,
+- minor: 2,
+- patch: 3,
+- pre: vec![Identifier::AlphaNumeric(String::from("alpha1"))],
+- build: vec![Identifier::AlphaNumeric(String::from("build5"))],
+- }));
+- assert_eq!(Version::parse(" 1.2.3-alpha1+build5 "),
+- Ok(Version {
+- major: 1,
+- minor: 2,
+- patch: 3,
+- pre: vec![Identifier::AlphaNumeric(String::from("alpha1"))],
+- build: vec![Identifier::AlphaNumeric(String::from("build5"))],
+- }));
+- assert_eq!(Version::parse("1.2.3-1.alpha1.9+build5.7.3aedf "),
+- Ok(Version {
+- major: 1,
+- minor: 2,
+- patch: 3,
+- pre: vec![Identifier::Numeric(1),
+- Identifier::AlphaNumeric(String::from("alpha1")),
+- Identifier::Numeric(9),
+- ],
+- build: vec![Identifier::AlphaNumeric(String::from("build5")),
+- Identifier::Numeric(7),
+- Identifier::AlphaNumeric(String::from("3aedf")),
+- ],
+- }));
+- assert_eq!(Version::parse("0.4.0-beta.1+0851523"),
+- Ok(Version {
+- major: 0,
+- minor: 4,
+- patch: 0,
+- pre: vec![Identifier::AlphaNumeric(String::from("beta")),
+- Identifier::Numeric(1),
+- ],
+- build: vec![Identifier::AlphaNumeric(String::from("0851523"))],
+- }));
+-
+- }
+-
+- #[test]
+- fn test_increment_patch() {
+- let mut buggy_release = Version::parse("0.1.0").unwrap();
+- buggy_release.increment_patch();
+- assert_eq!(buggy_release, Version::parse("0.1.1").unwrap());
+- }
+-
+- #[test]
+- fn test_increment_minor() {
+- let mut feature_release = Version::parse("1.4.6").unwrap();
+- feature_release.increment_minor();
+- assert_eq!(feature_release, Version::parse("1.5.0").unwrap());
+- }
+-
+- #[test]
+- fn test_increment_major() {
+- let mut chrome_release = Version::parse("46.1.246773").unwrap();
+- chrome_release.increment_major();
+- assert_eq!(chrome_release, Version::parse("47.0.0").unwrap());
+- }
+-
+- #[test]
+- fn test_increment_keep_prerelease() {
+- let mut release = Version::parse("1.0.0-alpha").unwrap();
+- release.increment_patch();
+-
+- assert_eq!(release, Version::parse("1.0.1").unwrap());
+-
+- release.increment_minor();
+-
+- assert_eq!(release, Version::parse("1.1.0").unwrap());
+-
+- release.increment_major();
+-
+- assert_eq!(release, Version::parse("2.0.0").unwrap());
+- }
+-
+-
+- #[test]
+- fn test_increment_clear_metadata() {
+- let mut release = Version::parse("1.0.0+4442").unwrap();
+- release.increment_patch();
+-
+- assert_eq!(release, Version::parse("1.0.1").unwrap());
+- release = Version::parse("1.0.1+hello").unwrap();
+-
+- release.increment_minor();
+-
+- assert_eq!(release, Version::parse("1.1.0").unwrap());
+- release = Version::parse("1.1.3747+hello").unwrap();
+-
+- release.increment_major();
+-
+- assert_eq!(release, Version::parse("2.0.0").unwrap());
+- }
+-
+- #[test]
+- fn test_eq() {
+- assert_eq!(Version::parse("1.2.3"), Version::parse("1.2.3"));
+- assert_eq!(Version::parse("1.2.3-alpha1"),
+- Version::parse("1.2.3-alpha1"));
+- assert_eq!(Version::parse("1.2.3+build.42"),
+- Version::parse("1.2.3+build.42"));
+- assert_eq!(Version::parse("1.2.3-alpha1+42"),
+- Version::parse("1.2.3-alpha1+42"));
+- assert_eq!(Version::parse("1.2.3+23"), Version::parse("1.2.3+42"));
+- }
+-
+- #[test]
+- fn test_ne() {
+- assert!(Version::parse("0.0.0") != Version::parse("0.0.1"));
+- assert!(Version::parse("0.0.0") != Version::parse("0.1.0"));
+- assert!(Version::parse("0.0.0") != Version::parse("1.0.0"));
+- assert!(Version::parse("1.2.3-alpha") != Version::parse("1.2.3-beta"));
+- }
+-
+- #[test]
+- fn test_show() {
+- assert_eq!(format!("{}", Version::parse("1.2.3").unwrap()),
+- "1.2.3".to_string());
+- assert_eq!(format!("{}", Version::parse("1.2.3-alpha1").unwrap()),
+- "1.2.3-alpha1".to_string());
+- assert_eq!(format!("{}", Version::parse("1.2.3+build.42").unwrap()),
+- "1.2.3+build.42".to_string());
+- assert_eq!(format!("{}", Version::parse("1.2.3-alpha1+42").unwrap()),
+- "1.2.3-alpha1+42".to_string());
+- }
+-
+- #[test]
+- fn test_to_string() {
+- assert_eq!(Version::parse("1.2.3").unwrap().to_string(),
+- "1.2.3".to_string());
+- assert_eq!(Version::parse("1.2.3-alpha1").unwrap().to_string(),
+- "1.2.3-alpha1".to_string());
+- assert_eq!(Version::parse("1.2.3+build.42").unwrap().to_string(),
+- "1.2.3+build.42".to_string());
+- assert_eq!(Version::parse("1.2.3-alpha1+42").unwrap().to_string(),
+- "1.2.3-alpha1+42".to_string());
+- }
+-
+- #[test]
+- fn test_lt() {
+- assert!(Version::parse("0.0.0") < Version::parse("1.2.3-alpha2"));
+- assert!(Version::parse("1.0.0") < Version::parse("1.2.3-alpha2"));
+- assert!(Version::parse("1.2.0") < Version::parse("1.2.3-alpha2"));
+- assert!(Version::parse("1.2.3-alpha1") < Version::parse("1.2.3"));
+- assert!(Version::parse("1.2.3-alpha1") < Version::parse("1.2.3-alpha2"));
+- assert!(!(Version::parse("1.2.3-alpha2") < Version::parse("1.2.3-alpha2")));
+- assert!(!(Version::parse("1.2.3+23") < Version::parse("1.2.3+42")));
+- }
+-
+- #[test]
+- fn test_le() {
+- assert!(Version::parse("0.0.0") <= Version::parse("1.2.3-alpha2"));
+- assert!(Version::parse("1.0.0") <= Version::parse("1.2.3-alpha2"));
+- assert!(Version::parse("1.2.0") <= Version::parse("1.2.3-alpha2"));
+- assert!(Version::parse("1.2.3-alpha1") <= Version::parse("1.2.3-alpha2"));
+- assert!(Version::parse("1.2.3-alpha2") <= Version::parse("1.2.3-alpha2"));
+- assert!(Version::parse("1.2.3+23") <= Version::parse("1.2.3+42"));
+- }
+-
+- #[test]
+- fn test_gt() {
+- assert!(Version::parse("1.2.3-alpha2") > Version::parse("0.0.0"));
+- assert!(Version::parse("1.2.3-alpha2") > Version::parse("1.0.0"));
+- assert!(Version::parse("1.2.3-alpha2") > Version::parse("1.2.0"));
+- assert!(Version::parse("1.2.3-alpha2") > Version::parse("1.2.3-alpha1"));
+- assert!(Version::parse("1.2.3") > Version::parse("1.2.3-alpha2"));
+- assert!(!(Version::parse("1.2.3-alpha2") > Version::parse("1.2.3-alpha2")));
+- assert!(!(Version::parse("1.2.3+23") > Version::parse("1.2.3+42")));
+- }
+-
+- #[test]
+- fn test_ge() {
+- assert!(Version::parse("1.2.3-alpha2") >= Version::parse("0.0.0"));
+- assert!(Version::parse("1.2.3-alpha2") >= Version::parse("1.0.0"));
+- assert!(Version::parse("1.2.3-alpha2") >= Version::parse("1.2.0"));
+- assert!(Version::parse("1.2.3-alpha2") >= Version::parse("1.2.3-alpha1"));
+- assert!(Version::parse("1.2.3-alpha2") >= Version::parse("1.2.3-alpha2"));
+- assert!(Version::parse("1.2.3+23") >= Version::parse("1.2.3+42"));
+- }
+-
+- #[test]
+- fn test_prerelease_check() {
+- assert!(Version::parse("1.0.0").unwrap().is_prerelease() == false);
+- assert!(Version::parse("0.0.1").unwrap().is_prerelease() == false);
+- assert!(Version::parse("4.1.4-alpha").unwrap().is_prerelease());
+- assert!(Version::parse("1.0.0-beta294296").unwrap().is_prerelease());
+- }
+-
+- #[test]
+- fn test_spec_order() {
+- let vs = ["1.0.0-alpha",
+- "1.0.0-alpha.1",
+- "1.0.0-alpha.beta",
+- "1.0.0-beta",
+- "1.0.0-beta.2",
+- "1.0.0-beta.11",
+- "1.0.0-rc.1",
+- "1.0.0"];
+- let mut i = 1;
+- while i < vs.len() {
+- let a = Version::parse(vs[i - 1]);
+- let b = Version::parse(vs[i]);
+- assert!(a < b, "nope {:?} < {:?}", a, b);
+- i += 1;
+- }
+- }
+-
+- #[test]
+- fn test_from_str() {
+- assert_eq!("1.2.3".parse(),
+- Ok(Version {
+- major: 1,
+- minor: 2,
+- patch: 3,
+- pre: Vec::new(),
+- build: Vec::new(),
+- }));
+- assert_eq!(" 1.2.3 ".parse(),
+- Ok(Version {
+- major: 1,
+- minor: 2,
+- patch: 3,
+- pre: Vec::new(),
+- build: Vec::new(),
+- }));
+- assert_eq!("1.2.3-alpha1".parse(),
+- Ok(Version {
+- major: 1,
+- minor: 2,
+- patch: 3,
+- pre: vec![Identifier::AlphaNumeric(String::from("alpha1"))],
+- build: Vec::new(),
+- }));
+- assert_eq!(" 1.2.3-alpha1 ".parse(),
+- Ok(Version {
+- major: 1,
+- minor: 2,
+- patch: 3,
+- pre: vec![Identifier::AlphaNumeric(String::from("alpha1"))],
+- build: Vec::new(),
+- }));
+- assert_eq!("1.2.3+build5".parse(),
+- Ok(Version {
+- major: 1,
+- minor: 2,
+- patch: 3,
+- pre: Vec::new(),
+- build: vec![Identifier::AlphaNumeric(String::from("build5"))],
+- }));
+- assert_eq!(" 1.2.3+build5 ".parse(),
+- Ok(Version {
+- major: 1,
+- minor: 2,
+- patch: 3,
+- pre: Vec::new(),
+- build: vec![Identifier::AlphaNumeric(String::from("build5"))],
+- }));
+- assert_eq!("1.2.3-alpha1+build5".parse(),
+- Ok(Version {
+- major: 1,
+- minor: 2,
+- patch: 3,
+- pre: vec![Identifier::AlphaNumeric(String::from("alpha1"))],
+- build: vec![Identifier::AlphaNumeric(String::from("build5"))],
+- }));
+- assert_eq!(" 1.2.3-alpha1+build5 ".parse(),
+- Ok(Version {
+- major: 1,
+- minor: 2,
+- patch: 3,
+- pre: vec![Identifier::AlphaNumeric(String::from("alpha1"))],
+- build: vec![Identifier::AlphaNumeric(String::from("build5"))],
+- }));
+- assert_eq!("1.2.3-1.alpha1.9+build5.7.3aedf ".parse(),
+- Ok(Version {
+- major: 1,
+- minor: 2,
+- patch: 3,
+- pre: vec![Identifier::Numeric(1),
+- Identifier::AlphaNumeric(String::from("alpha1")),
+- Identifier::Numeric(9),
+- ],
+- build: vec![Identifier::AlphaNumeric(String::from("build5")),
+- Identifier::Numeric(7),
+- Identifier::AlphaNumeric(String::from("3aedf")),
+- ],
+- }));
+- assert_eq!("0.4.0-beta.1+0851523".parse(),
+- Ok(Version {
+- major: 0,
+- minor: 4,
+- patch: 0,
+- pre: vec![Identifier::AlphaNumeric(String::from("beta")),
+- Identifier::Numeric(1),
+- ],
+- build: vec![Identifier::AlphaNumeric(String::from("0851523"))],
+- }));
+-
+- }
+-
+- #[test]
+- fn test_from_str_errors() {
+- fn parse_error(e: &str) -> result::Result<Version, SemVerError> {
+- return Err(SemVerError::ParseError(e.to_string()));
+- }
+-
+- assert_eq!("".parse(), parse_error("Error parsing major identifier"));
+- assert_eq!(" ".parse(), parse_error("Error parsing major identifier"));
+- assert_eq!("1".parse(), parse_error("Expected dot"));
+- assert_eq!("1.2".parse(),
+- parse_error("Expected dot"));
+- assert_eq!("1.2.3-".parse(),
+- parse_error("Error parsing prerelease"));
+- assert_eq!("a.b.c".parse(),
+- parse_error("Error parsing major identifier"));
+- assert_eq!("1.2.3 abc".parse(),
+- parse_error("Extra junk after valid version: abc"));
+- }
+-}
+diff --git a/third_party/rust/semver/src/version_req.rs b/third_party/rust/semver/src/version_req.rs
+deleted file mode 100644
+--- a/third_party/rust/semver/src/version_req.rs
++++ /dev/null
+@@ -1,895 +0,0 @@
+-// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT
+-// file at the top-level directory of this distribution and at
+-// http://rust-lang.org/COPYRIGHT.
+-//
+-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+-// option. This file may not be copied, modified, or distributed
+-// except according to those terms.
+-
+-use std::error::Error;
+-use std::fmt;
+-use std::result;
+-use std::str;
+-
+-use Version;
+-use version::Identifier;
+-use semver_parser;
+-
+-#[cfg(feature = "serde")]
+-use serde::ser::{Serialize, Serializer};
+-#[cfg(feature = "serde")]
+-use serde::de::{self, Deserialize, Deserializer, Visitor};
+-
+-use self::Op::{Ex, Gt, GtEq, Lt, LtEq, Tilde, Compatible, Wildcard};
+-use self::WildcardVersion::{Major, Minor, Patch};
+-use self::ReqParseError::*;
+-
+-/// A `VersionReq` is a struct containing a list of predicates that can apply to ranges of version
+-/// numbers. Matching operations can then be done with the `VersionReq` against a particular
+-/// version to see if it satisfies some or all of the constraints.
+-#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
+-pub struct VersionReq {
+- predicates: Vec<Predicate>,
+-}
+-
+-impl From<semver_parser::range::VersionReq> for VersionReq {
+- fn from(other: semver_parser::range::VersionReq) -> VersionReq {
+- VersionReq { predicates: other.predicates.into_iter().map(From::from).collect() }
+- }
+-}
+-
+-#[cfg(feature = "serde")]
+-impl Serialize for VersionReq {
+- fn serialize<S>(&self, serializer: S) -> result::Result<S::Ok, S::Error>
+- where S: Serializer
+- {
+- // Serialize VersionReq as a string.
+- serializer.collect_str(self)
+- }
+-}
+-
+-#[cfg(feature = "serde")]
+-impl<'de> Deserialize<'de> for VersionReq {
+- fn deserialize<D>(deserializer: D) -> result::Result<Self, D::Error>
+- where D: Deserializer<'de>
+- {
+- struct VersionReqVisitor;
+-
+- /// Deserialize `VersionReq` from a string.
+- impl<'de> Visitor<'de> for VersionReqVisitor {
+- type Value = VersionReq;
+-
+- fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+- formatter.write_str("a SemVer version requirement as a string")
+- }
+-
+- fn visit_str<E>(self, v: &str) -> result::Result<Self::Value, E>
+- where E: de::Error
+- {
+- VersionReq::parse(v).map_err(de::Error::custom)
+- }
+- }
+-
+- deserializer.deserialize_str(VersionReqVisitor)
+- }
+-}
+-
+-#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
+-enum WildcardVersion {
+- Major,
+- Minor,
+- Patch,
+-}
+-
+-#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
+-enum Op {
+- Ex, // Exact
+- Gt, // Greater than
+- GtEq, // Greater than or equal to
+- Lt, // Less than
+- LtEq, // Less than or equal to
+- Tilde, // e.g. ~1.0.0
+- Compatible, // compatible by definition of semver, indicated by ^
+- Wildcard(WildcardVersion), // x.y.*, x.*, *
+-}
+-
+-impl From<semver_parser::range::Op> for Op {
+- fn from(other: semver_parser::range::Op) -> Op {
+- use semver_parser::range;
+- match other {
+- range::Op::Ex => Op::Ex,
+- range::Op::Gt => Op::Gt,
+- range::Op::GtEq => Op::GtEq,
+- range::Op::Lt => Op::Lt,
+- range::Op::LtEq => Op::LtEq,
+- range::Op::Tilde => Op::Tilde,
+- range::Op::Compatible => Op::Compatible,
+- range::Op::Wildcard(version) => {
+- match version {
+- range::WildcardVersion::Major => Op::Wildcard(WildcardVersion::Major),
+- range::WildcardVersion::Minor => Op::Wildcard(WildcardVersion::Minor),
+- range::WildcardVersion::Patch => Op::Wildcard(WildcardVersion::Patch),
+- }
+- }
+- }
+- }
+-}
+-
+-#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
+-struct Predicate {
+- op: Op,
+- major: u64,
+- minor: Option<u64>,
+- patch: Option<u64>,
+- pre: Vec<Identifier>,
+-}
+-
+-impl From<semver_parser::range::Predicate> for Predicate {
+- fn from(other: semver_parser::range::Predicate) -> Predicate {
+- Predicate {
+- op: From::from(other.op),
+- major: other.major,
+- minor: other.minor,
+- patch: other.patch,
+- pre: other.pre.into_iter().map(From::from).collect(),
+- }
+- }
+-}
+-
+-/// A `ReqParseError` is returned from methods which parse a string into a `VersionReq`. Each
+-/// enumeration is one of the possible errors that can occur.
+-#[derive(Clone, Debug, PartialEq)]
+-pub enum ReqParseError {
+- /// The given version requirement is invalid.
+- InvalidVersionRequirement,
+- /// You have already provided an operation, such as `=`, `~`, or `^`. Only use one.
+- OpAlreadySet,
+- /// The sigil you have written is not correct.
+- InvalidSigil,
+- /// All components of a version must be numeric.
+- VersionComponentsMustBeNumeric,
+- /// There was an error parsing an identifier.
+- InvalidIdentifier,
+- /// At least a major version is required.
+- MajorVersionRequired,
+- /// An unimplemented version requirement.
+- UnimplementedVersionRequirement,
+- /// This form of requirement is deprecated.
+- DeprecatedVersionRequirement(VersionReq),
+-}
+-
+-impl fmt::Display for ReqParseError {
+- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+- self.description().fmt(f)
+- }
+-}
+-
+-impl Error for ReqParseError {
+- fn description(&self) -> &str {
+- match self {
+- &InvalidVersionRequirement => "the given version requirement is invalid",
+- &OpAlreadySet => {
+- "you have already provided an operation, such as =, ~, or ^; only use one"
+- },
+- &InvalidSigil => "the sigil you have written is not correct",
+- &VersionComponentsMustBeNumeric => "version components must be numeric",
+- &InvalidIdentifier => "invalid identifier",
+- &MajorVersionRequired => "at least a major version number is required",
+- &UnimplementedVersionRequirement => {
+- "the given version requirement is not implemented, yet"
+- },
+- &DeprecatedVersionRequirement(_) => "This requirement is deprecated",
+- }
+- }
+-}
+-
+-impl From<String> for ReqParseError {
+- fn from(other: String) -> ReqParseError {
+- match &*other {
+- "Null is not a valid VersionReq" => ReqParseError::InvalidVersionRequirement,
+- "VersionReq did not parse properly." => ReqParseError::OpAlreadySet,
+- _ => ReqParseError::InvalidVersionRequirement,
+- }
+- }
+-}
+-
+-impl VersionReq {
+- /// `any()` is a factory method which creates a `VersionReq` with no constraints. In other
+- /// words, any version will match against it.
+- ///
+- /// # Examples
+- ///
+- /// ```
+- /// use semver::VersionReq;
+- ///
+- /// let anything = VersionReq::any();
+- /// ```
+- pub fn any() -> VersionReq {
+- VersionReq { predicates: vec![] }
+- }
+-
+- /// `parse()` is the main constructor of a `VersionReq`. It takes a string like `"^1.2.3"`
+- /// and turns it into a `VersionReq` that matches that particular constraint.
+- ///
+- /// A `Result` is returned which contains a `ReqParseError` if there was a problem parsing the
+- /// `VersionReq`.
+- ///
+- /// # Examples
+- ///
+- /// ```
+- /// use semver::VersionReq;
+- ///
+- /// let version = VersionReq::parse("=1.2.3");
+- /// let version = VersionReq::parse(">1.2.3");
+- /// let version = VersionReq::parse("<1.2.3");
+- /// let version = VersionReq::parse("~1.2.3");
+- /// let version = VersionReq::parse("^1.2.3");
+- /// let version = VersionReq::parse("1.2.3"); // synonym for ^1.2.3
+- /// let version = VersionReq::parse("<=1.2.3");
+- /// let version = VersionReq::parse(">=1.2.3");
+- /// ```
+- ///
+- /// This example demonstrates error handling, and will panic.
+- ///
+- /// ```should-panic
+- /// use semver::VersionReq;
+- ///
+- /// let version = match VersionReq::parse("not a version") {
+- /// Ok(version) => version,
+- /// Err(e) => panic!("There was a problem parsing: {}", e),
+- /// }
+- /// ```
+- pub fn parse(input: &str) -> Result<VersionReq, ReqParseError> {
+- let res = semver_parser::range::parse(input);
+-
+- if let Ok(v) = res {
+- return Ok(From::from(v));
+- }
+-
+- return match VersionReq::parse_deprecated(input) {
+- Some(v) => {
+- Err(ReqParseError::DeprecatedVersionRequirement(v))
+- }
+- None => Err(From::from(res.err().unwrap())),
+- }
+- }
+-
+- fn parse_deprecated(version: &str) -> Option<VersionReq> {
+- return match version {
+- ".*" => Some(VersionReq::any()),
+- "0.1.0." => Some(VersionReq::parse("0.1.0").unwrap()),
+- "0.3.1.3" => Some(VersionReq::parse("0.3.13").unwrap()),
+- "0.2*" => Some(VersionReq::parse("0.2.*").unwrap()),
+- "*.0" => Some(VersionReq::any()),
+- _ => None,
+- }
+- }
+-
+- /// `exact()` is a factory method which creates a `VersionReq` with one exact constraint.
+- ///
+- /// # Examples
+- ///
+- /// ```
+- /// use semver::VersionReq;
+- /// use semver::Version;
+- ///
+- /// let version = Version { major: 1, minor: 1, patch: 1, pre: vec![], build: vec![] };
+- /// let exact = VersionReq::exact(&version);
+- /// ```
+- pub fn exact(version: &Version) -> VersionReq {
+- VersionReq { predicates: vec![Predicate::exact(version)] }
+- }
+-
+- /// `matches()` matches a given `Version` against this `VersionReq`.
+- ///
+- /// # Examples
+- ///
+- /// ```
+- /// use semver::VersionReq;
+- /// use semver::Version;
+- ///
+- /// let version = Version { major: 1, minor: 1, patch: 1, pre: vec![], build: vec![] };
+- /// let exact = VersionReq::exact(&version);
+- ///
+- /// assert!(exact.matches(&version));
+- /// ```
+- pub fn matches(&self, version: &Version) -> bool {
+- // no predicates means anything matches
+- if self.predicates.is_empty() {
+- return true;
+- }
+-
+- self.predicates.iter().all(|p| p.matches(version)) &&
+- self.predicates.iter().any(|p| p.pre_tag_is_compatible(version))
+- }
+-}
+-
+-impl str::FromStr for VersionReq {
+- type Err = ReqParseError;
+-
+- fn from_str(s: &str) -> Result<VersionReq, ReqParseError> {
+- VersionReq::parse(s)
+- }
+-}
+-
+-impl Predicate {
+- fn exact(version: &Version) -> Predicate {
+- Predicate {
+- op: Ex,
+- major: version.major,
+- minor: Some(version.minor),
+- patch: Some(version.patch),
+- pre: version.pre.clone(),
+- }
+- }
+-
+- /// `matches()` takes a `Version` and determines if it matches this particular `Predicate`.
+- pub fn matches(&self, ver: &Version) -> bool {
+- match self.op {
+- Ex => self.is_exact(ver),
+- Gt => self.is_greater(ver),
+- GtEq => self.is_exact(ver) || self.is_greater(ver),
+- Lt => !self.is_exact(ver) && !self.is_greater(ver),
+- LtEq => !self.is_greater(ver),
+- Tilde => self.matches_tilde(ver),
+- Compatible => self.is_compatible(ver),
+- Wildcard(_) => self.matches_wildcard(ver),
+- }
+- }
+-
+- fn is_exact(&self, ver: &Version) -> bool {
+- if self.major != ver.major {
+- return false;
+- }
+-
+- match self.minor {
+- Some(minor) => {
+- if minor != ver.minor {
+- return false;
+- }
+- }
+- None => return true,
+- }
+-
+- match self.patch {
+- Some(patch) => {
+- if patch != ver.patch {
+- return false;
+- }
+- }
+- None => return true,
+- }
+-
+- if self.pre != ver.pre {
+- return false;
+- }
+-
+- true
+- }
+-
+- // https://docs.npmjs.com/misc/semver#prerelease-tags
+- fn pre_tag_is_compatible(&self, ver: &Version) -> bool {
+- // If a version has a prerelease tag (for example, 1.2.3-alpha.3) then it will
+- // only be
+- // allowed to satisfy comparator sets if at least one comparator with the same
+- // [major,
+- // minor, patch] tuple also has a prerelease tag.
+- !ver.is_prerelease() ||
+- (self.major == ver.major && self.minor == Some(ver.minor) &&
+- self.patch == Some(ver.patch) && !self.pre.is_empty())
+- }
+-
+- fn is_greater(&self, ver: &Version) -> bool {
+- if self.major != ver.major {
+- return ver.major > self.major;
+- }
+-
+- match self.minor {
+- Some(minor) => {
+- if minor != ver.minor {
+- return ver.minor > minor;
+- }
+- }
+- None => return false,
+- }
+-
+- match self.patch {
+- Some(patch) => {
+- if patch != ver.patch {
+- return ver.patch > patch;
+- }
+- }
+- None => return false,
+- }
+-
+- if !self.pre.is_empty() {
+- return ver.pre.is_empty() || ver.pre > self.pre;
+- }
+-
+- false
+- }
+-
+- // see https://www.npmjs.org/doc/misc/semver.html for behavior
+- fn matches_tilde(&self, ver: &Version) -> bool {
+- let minor = match self.minor {
+- Some(n) => n,
+- None => return self.major == ver.major,
+- };
+-
+- match self.patch {
+- Some(patch) => {
+- self.major == ver.major && minor == ver.minor &&
+- (ver.patch > patch || (ver.patch == patch && self.pre_is_compatible(ver)))
+- }
+- None => self.major == ver.major && minor == ver.minor,
+- }
+- }
+-
+- // see https://www.npmjs.org/doc/misc/semver.html for behavior
+- fn is_compatible(&self, ver: &Version) -> bool {
+- if self.major != ver.major {
+- return false;
+- }
+-
+- let minor = match self.minor {
+- Some(n) => n,
+- None => return self.major == ver.major,
+- };
+-
+- match self.patch {
+- Some(patch) => {
+- if self.major == 0 {
+- if minor == 0 {
+- ver.minor == minor && ver.patch == patch && self.pre_is_compatible(ver)
+- } else {
+- ver.minor == minor &&
+- (ver.patch > patch || (ver.patch == patch && self.pre_is_compatible(ver)))
+- }
+- } else {
+- ver.minor > minor ||
+- (ver.minor == minor &&
+- (ver.patch > patch || (ver.patch == patch && self.pre_is_compatible(ver))))
+- }
+- }
+- None => {
+- if self.major == 0 {
+- ver.minor == minor
+- } else {
+- ver.minor >= minor
+- }
+- }
+- }
+- }
+-
+- fn pre_is_compatible(&self, ver: &Version) -> bool {
+- ver.pre.is_empty() || ver.pre >= self.pre
+- }
+-
+- // see https://www.npmjs.org/doc/misc/semver.html for behavior
+- fn matches_wildcard(&self, ver: &Version) -> bool {
+- match self.op {
+- Wildcard(Major) => true,
+- Wildcard(Minor) => self.major == ver.major,
+- Wildcard(Patch) => {
+- match self.minor {
+- Some(minor) => self.major == ver.major && minor == ver.minor,
+- None => {
+- // minor and patch version astericks mean match on major
+- self.major == ver.major
+- }
+- }
+- }
+- _ => false, // unreachable
+- }
+- }
+-}
+-
+-impl fmt::Display for VersionReq {
+- fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
+- if self.predicates.is_empty() {
+- try!(write!(fmt, "*"));
+- } else {
+- for (i, ref pred) in self.predicates.iter().enumerate() {
+- if i == 0 {
+- try!(write!(fmt, "{}", pred));
+- } else {
+- try!(write!(fmt, ", {}", pred));
+- }
+- }
+- }
+-
+- Ok(())
+- }
+-}
+-
+-impl fmt::Display for Predicate {
+- fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
+- match self.op {
+- Wildcard(Major) => try!(write!(fmt, "*")),
+- Wildcard(Minor) => try!(write!(fmt, "{}.*", self.major)),
+- Wildcard(Patch) => {
+- if let Some(minor) = self.minor {
+- try!(write!(fmt, "{}.{}.*", self.major, minor))
+- } else {
+- try!(write!(fmt, "{}.*.*", self.major))
+- }
+- }
+- _ => {
+- try!(write!(fmt, "{}{}", self.op, self.major));
+-
+- match self.minor {
+- Some(v) => try!(write!(fmt, ".{}", v)),
+- None => (),
+- }
+-
+- match self.patch {
+- Some(v) => try!(write!(fmt, ".{}", v)),
+- None => (),
+- }
+-
+- if !self.pre.is_empty() {
+- try!(write!(fmt, "-"));
+- for (i, x) in self.pre.iter().enumerate() {
+- if i != 0 {
+- try!(write!(fmt, "."))
+- }
+- try!(write!(fmt, "{}", x));
+- }
+- }
+- }
+- }
+-
+- Ok(())
+- }
+-}
+-
+-impl fmt::Display for Op {
+- fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
+- match *self {
+- Ex => try!(write!(fmt, "= ")),
+- Gt => try!(write!(fmt, "> ")),
+- GtEq => try!(write!(fmt, ">= ")),
+- Lt => try!(write!(fmt, "< ")),
+- LtEq => try!(write!(fmt, "<= ")),
+- Tilde => try!(write!(fmt, "~")),
+- Compatible => try!(write!(fmt, "^")),
+- // gets handled specially in Predicate::fmt
+- Wildcard(_) => try!(write!(fmt, "")),
+- }
+- Ok(())
+- }
+-}
+-
+-#[cfg(test)]
+-mod test {
+- use super::{VersionReq, Op};
+- use super::super::version::Version;
+- use std::hash::{Hash, Hasher};
+-
+- fn req(s: &str) -> VersionReq {
+- VersionReq::parse(s).unwrap()
+- }
+-
+- fn version(s: &str) -> Version {
+- match Version::parse(s) {
+- Ok(v) => v,
+- Err(e) => panic!("`{}` is not a valid version. Reason: {:?}", s, e),
+- }
+- }
+-
+- fn assert_match(req: &VersionReq, vers: &[&str]) {
+- for ver in vers.iter() {
+- assert!(req.matches(&version(*ver)), "did not match {}", ver);
+- }
+- }
+-
+- fn assert_not_match(req: &VersionReq, vers: &[&str]) {
+- for ver in vers.iter() {
+- assert!(!req.matches(&version(*ver)), "matched {}", ver);
+- }
+- }
+-
+- fn calculate_hash<T: Hash>(t: T) -> u64 {
+- use std::collections::hash_map::DefaultHasher;
+-
+- let mut s = DefaultHasher::new();
+- t.hash(&mut s);
+- s.finish()
+- }
+-
+- #[test]
+- fn test_parsing_default() {
+- let r = req("1.0.0");
+-
+- assert_eq!(r.to_string(), "^1.0.0".to_string());
+-
+- assert_match(&r, &["1.0.0", "1.0.1"]);
+- assert_not_match(&r, &["0.9.9", "0.10.0", "0.1.0"]);
+- }
+-
+- #[test]
+- fn test_parsing_exact() {
+- let r = req("=1.0.0");
+-
+- assert!(r.to_string() == "= 1.0.0".to_string());
+- assert_eq!(r.to_string(), "= 1.0.0".to_string());
+-
+- assert_match(&r, &["1.0.0"]);
+- assert_not_match(&r, &["1.0.1", "0.9.9", "0.10.0", "0.1.0", "1.0.0-pre"]);
+-
+- let r = req("=0.9.0");
+-
+- assert_eq!(r.to_string(), "= 0.9.0".to_string());
+-
+- assert_match(&r, &["0.9.0"]);
+- assert_not_match(&r, &["0.9.1", "1.9.0", "0.0.9"]);
+-
+- let r = req("=0.1.0-beta2.a");
+-
+- assert_eq!(r.to_string(), "= 0.1.0-beta2.a".to_string());
+-
+- assert_match(&r, &["0.1.0-beta2.a"]);
+- assert_not_match(&r, &["0.9.1", "0.1.0", "0.1.1-beta2.a", "0.1.0-beta2"]);
+- }
+-
+- #[test]
+- fn test_parse_metadata_see_issue_88_see_issue_88() {
+- for op in &[Op::Compatible, Op::Ex, Op::Gt, Op::GtEq, Op::Lt, Op::LtEq, Op::Tilde] {
+- req(&format!("{} 1.2.3+meta", op));
+- }
+- }
+-
+- #[test]
+- pub fn test_parsing_greater_than() {
+- let r = req(">= 1.0.0");
+-
+- assert_eq!(r.to_string(), ">= 1.0.0".to_string());
+-
+- assert_match(&r, &["1.0.0", "2.0.0"]);
+- assert_not_match(&r, &["0.1.0", "0.0.1", "1.0.0-pre", "2.0.0-pre"]);
+-
+- let r = req(">= 2.1.0-alpha2");
+-
+- assert_match(&r, &["2.1.0-alpha2", "2.1.0-alpha3", "2.1.0", "3.0.0"]);
+- assert_not_match(&r,
+- &["2.0.0", "2.1.0-alpha1", "2.0.0-alpha2", "3.0.0-alpha2"]);
+- }
+-
+- #[test]
+- pub fn test_parsing_less_than() {
+- let r = req("< 1.0.0");
+-
+- assert_eq!(r.to_string(), "< 1.0.0".to_string());
+-
+- assert_match(&r, &["0.1.0", "0.0.1"]);
+- assert_not_match(&r, &["1.0.0", "1.0.0-beta", "1.0.1", "0.9.9-alpha"]);
+-
+- let r = req("<= 2.1.0-alpha2");
+-
+- assert_match(&r, &["2.1.0-alpha2", "2.1.0-alpha1", "2.0.0", "1.0.0"]);
+- assert_not_match(&r,
+- &["2.1.0", "2.2.0-alpha1", "2.0.0-alpha2", "1.0.0-alpha2"]);
+- }
+-
+- #[test]
+- pub fn test_multiple() {
+- let r = req("> 0.0.9, <= 2.5.3");
+- assert_eq!(r.to_string(), "> 0.0.9, <= 2.5.3".to_string());
+- assert_match(&r, &["0.0.10", "1.0.0", "2.5.3"]);
+- assert_not_match(&r, &["0.0.8", "2.5.4"]);
+-
+- let r = req("0.3.0, 0.4.0");
+- assert_eq!(r.to_string(), "^0.3.0, ^0.4.0".to_string());
+- assert_not_match(&r, &["0.0.8", "0.3.0", "0.4.0"]);
+-
+- let r = req("<= 0.2.0, >= 0.5.0");
+- assert_eq!(r.to_string(), "<= 0.2.0, >= 0.5.0".to_string());
+- assert_not_match(&r, &["0.0.8", "0.3.0", "0.5.1"]);
+-
+- let r = req("0.1.0, 0.1.4, 0.1.6");
+- assert_eq!(r.to_string(), "^0.1.0, ^0.1.4, ^0.1.6".to_string());
+- assert_match(&r, &["0.1.6", "0.1.9"]);
+- assert_not_match(&r, &["0.1.0", "0.1.4", "0.2.0"]);
+-
+- assert!(VersionReq::parse("> 0.1.0,").is_err());
+- assert!(VersionReq::parse("> 0.3.0, ,").is_err());
+-
+- let r = req(">=0.5.1-alpha3, <0.6");
+- assert_eq!(r.to_string(), ">= 0.5.1-alpha3, < 0.6".to_string());
+- assert_match(&r,
+- &["0.5.1-alpha3", "0.5.1-alpha4", "0.5.1-beta", "0.5.1", "0.5.5"]);
+- assert_not_match(&r,
+- &["0.5.1-alpha1", "0.5.2-alpha3", "0.5.5-pre", "0.5.0-pre"]);
+- assert_not_match(&r, &["0.6.0", "0.6.0-pre"]);
+- }
+-
+- #[test]
+- pub fn test_parsing_tilde() {
+- let r = req("~1");
+- assert_match(&r, &["1.0.0", "1.0.1", "1.1.1"]);
+- assert_not_match(&r, &["0.9.1", "2.9.0", "0.0.9"]);
+-
+- let r = req("~1.2");
+- assert_match(&r, &["1.2.0", "1.2.1"]);
+- assert_not_match(&r, &["1.1.1", "1.3.0", "0.0.9"]);
+-
+- let r = req("~1.2.2");
+- assert_match(&r, &["1.2.2", "1.2.4"]);
+- assert_not_match(&r, &["1.2.1", "1.9.0", "1.0.9", "2.0.1", "0.1.3"]);
+-
+- let r = req("~1.2.3-beta.2");
+- assert_match(&r, &["1.2.3", "1.2.4", "1.2.3-beta.2", "1.2.3-beta.4"]);
+- assert_not_match(&r, &["1.3.3", "1.1.4", "1.2.3-beta.1", "1.2.4-beta.2"]);
+- }
+-
+- #[test]
+- pub fn test_parsing_compatible() {
+- let r = req("^1");
+- assert_match(&r, &["1.1.2", "1.1.0", "1.2.1", "1.0.1"]);
+- assert_not_match(&r, &["0.9.1", "2.9.0", "0.1.4"]);
+- assert_not_match(&r, &["1.0.0-beta1", "0.1.0-alpha", "1.0.1-pre"]);
+-
+- let r = req("^1.1");
+- assert_match(&r, &["1.1.2", "1.1.0", "1.2.1"]);
+- assert_not_match(&r, &["0.9.1", "2.9.0", "1.0.1", "0.1.4"]);
+-
+- let r = req("^1.1.2");
+- assert_match(&r, &["1.1.2", "1.1.4", "1.2.1"]);
+- assert_not_match(&r, &["0.9.1", "2.9.0", "1.1.1", "0.0.1"]);
+- assert_not_match(&r, &["1.1.2-alpha1", "1.1.3-alpha1", "2.9.0-alpha1"]);
+-
+- let r = req("^0.1.2");
+- assert_match(&r, &["0.1.2", "0.1.4"]);
+- assert_not_match(&r, &["0.9.1", "2.9.0", "1.1.1", "0.0.1"]);
+- assert_not_match(&r, &["0.1.2-beta", "0.1.3-alpha", "0.2.0-pre"]);
+-
+- let r = req("^0.5.1-alpha3");
+- assert_match(&r,
+- &["0.5.1-alpha3", "0.5.1-alpha4", "0.5.1-beta", "0.5.1", "0.5.5"]);
+- assert_not_match(&r,
+- &["0.5.1-alpha1", "0.5.2-alpha3", "0.5.5-pre", "0.5.0-pre", "0.6.0"]);
+-
+- let r = req("^0.0.2");
+- assert_match(&r, &["0.0.2"]);
+- assert_not_match(&r, &["0.9.1", "2.9.0", "1.1.1", "0.0.1", "0.1.4"]);
+-
+- let r = req("^0.0");
+- assert_match(&r, &["0.0.2", "0.0.0"]);
+- assert_not_match(&r, &["0.9.1", "2.9.0", "1.1.1", "0.1.4"]);
+-
+- let r = req("^0");
+- assert_match(&r, &["0.9.1", "0.0.2", "0.0.0"]);
+- assert_not_match(&r, &["2.9.0", "1.1.1"]);
+-
+- let r = req("^1.4.2-beta.5");
+- assert_match(&r,
+- &["1.4.2", "1.4.3", "1.4.2-beta.5", "1.4.2-beta.6", "1.4.2-c"]);
+- assert_not_match(&r,
+- &["0.9.9", "2.0.0", "1.4.2-alpha", "1.4.2-beta.4", "1.4.3-beta.5"]);
+- }
+-
+- #[test]
+- pub fn test_parsing_wildcard() {
+- let r = req("");
+- assert_match(&r, &["0.9.1", "2.9.0", "0.0.9", "1.0.1", "1.1.1"]);
+- assert_not_match(&r, &[]);
+- let r = req("*");
+- assert_match(&r, &["0.9.1", "2.9.0", "0.0.9", "1.0.1", "1.1.1"]);
+- assert_not_match(&r, &[]);
+- let r = req("x");
+- assert_match(&r, &["0.9.1", "2.9.0", "0.0.9", "1.0.1", "1.1.1"]);
+- assert_not_match(&r, &[]);
+- let r = req("X");
+- assert_match(&r, &["0.9.1", "2.9.0", "0.0.9", "1.0.1", "1.1.1"]);
+- assert_not_match(&r, &[]);
+-
+- let r = req("1.*");
+- assert_match(&r, &["1.2.0", "1.2.1", "1.1.1", "1.3.0"]);
+- assert_not_match(&r, &["0.0.9"]);
+- let r = req("1.x");
+- assert_match(&r, &["1.2.0", "1.2.1", "1.1.1", "1.3.0"]);
+- assert_not_match(&r, &["0.0.9"]);
+- let r = req("1.X");
+- assert_match(&r, &["1.2.0", "1.2.1", "1.1.1", "1.3.0"]);
+- assert_not_match(&r, &["0.0.9"]);
+-
+- let r = req("1.2.*");
+- assert_match(&r, &["1.2.0", "1.2.2", "1.2.4"]);
+- assert_not_match(&r, &["1.9.0", "1.0.9", "2.0.1", "0.1.3"]);
+- let r = req("1.2.x");
+- assert_match(&r, &["1.2.0", "1.2.2", "1.2.4"]);
+- assert_not_match(&r, &["1.9.0", "1.0.9", "2.0.1", "0.1.3"]);
+- let r = req("1.2.X");
+- assert_match(&r, &["1.2.0", "1.2.2", "1.2.4"]);
+- assert_not_match(&r, &["1.9.0", "1.0.9", "2.0.1", "0.1.3"]);
+- }
+-
+- #[test]
+- pub fn test_any() {
+- let r = VersionReq::any();
+- assert_match(&r, &["0.0.1", "0.1.0", "1.0.0"]);
+- }
+-
+- #[test]
+- pub fn test_pre() {
+- let r = req("=2.1.1-really.0");
+- assert_match(&r, &["2.1.1-really.0"]);
+- }
+-
+- // #[test]
+- // pub fn test_parse_errors() {
+- // assert_eq!(Err(InvalidVersionRequirement), VersionReq::parse("\0"));
+- // assert_eq!(Err(OpAlreadySet), VersionReq::parse(">= >= 0.0.2"));
+- // assert_eq!(Err(InvalidSigil), VersionReq::parse(">== 0.0.2"));
+- // assert_eq!(Err(VersionComponentsMustBeNumeric),
+- // VersionReq::parse("a.0.0"));
+- // assert_eq!(Err(InvalidIdentifier), VersionReq::parse("1.0.0-"));
+- // assert_eq!(Err(MajorVersionRequired), VersionReq::parse(">="));
+- // }
+-
+- #[test]
+- pub fn test_from_str() {
+- assert_eq!("1.0.0".parse::<VersionReq>().unwrap().to_string(),
+- "^1.0.0".to_string());
+- assert_eq!("=1.0.0".parse::<VersionReq>().unwrap().to_string(),
+- "= 1.0.0".to_string());
+- assert_eq!("~1".parse::<VersionReq>().unwrap().to_string(),
+- "~1".to_string());
+- assert_eq!("~1.2".parse::<VersionReq>().unwrap().to_string(),
+- "~1.2".to_string());
+- assert_eq!("^1".parse::<VersionReq>().unwrap().to_string(),
+- "^1".to_string());
+- assert_eq!("^1.1".parse::<VersionReq>().unwrap().to_string(),
+- "^1.1".to_string());
+- assert_eq!("*".parse::<VersionReq>().unwrap().to_string(),
+- "*".to_string());
+- assert_eq!("1.*".parse::<VersionReq>().unwrap().to_string(),
+- "1.*".to_string());
+- assert_eq!("< 1.0.0".parse::<VersionReq>().unwrap().to_string(),
+- "< 1.0.0".to_string());
+- }
+-
+- // #[test]
+- // pub fn test_from_str_errors() {
+- // assert_eq!(Err(InvalidVersionRequirement), "\0".parse::<VersionReq>());
+- // assert_eq!(Err(OpAlreadySet), ">= >= 0.0.2".parse::<VersionReq>());
+- // assert_eq!(Err(InvalidSigil), ">== 0.0.2".parse::<VersionReq>());
+- // assert_eq!(Err(VersionComponentsMustBeNumeric),
+- // "a.0.0".parse::<VersionReq>());
+- // assert_eq!(Err(InvalidIdentifier), "1.0.0-".parse::<VersionReq>());
+- // assert_eq!(Err(MajorVersionRequired), ">=".parse::<VersionReq>());
+- // }
+-
+- #[test]
+- fn test_cargo3202() {
+- let v = "0.*.*".parse::<VersionReq>().unwrap();
+- assert_eq!("0.*.*", format!("{}", v.predicates[0]));
+-
+- let v = "0.0.*".parse::<VersionReq>().unwrap();
+- assert_eq!("0.0.*", format!("{}", v.predicates[0]));
+-
+- let r = req("0.*.*");
+- assert_match(&r, &["0.5.0"]);
+- }
+-
+- #[test]
+- fn test_eq_hash() {
+- assert!(req("^1") == req("^1"));
+- assert!(calculate_hash(req("^1")) == calculate_hash(req("^1")));
+- assert!(req("^1") != req("^2"));
+- }
+-
+- #[test]
+- fn test_ordering() {
+- assert!(req("=1") < req("*"));
+- assert!(req(">1") < req("*"));
+- assert!(req(">=1") < req("*"));
+- assert!(req("<1") < req("*"));
+- assert!(req("<=1") < req("*"));
+- assert!(req("~1") < req("*"));
+- assert!(req("^1") < req("*"));
+- assert!(req("*") == req("*"));
+- }
+-}
+diff --git a/third_party/rust/semver/tests/deprecation.rs b/third_party/rust/semver/tests/deprecation.rs
+deleted file mode 100644
+--- a/third_party/rust/semver/tests/deprecation.rs
++++ /dev/null
+@@ -1,22 +0,0 @@
+-extern crate semver;
+-
+-#[test]
+-fn test_regressions() {
+- use semver::VersionReq;
+- use semver::ReqParseError;
+-
+- let versions = vec![
+- (".*", VersionReq::any()),
+- ("0.1.0.", VersionReq::parse("0.1.0").unwrap()),
+- ("0.3.1.3", VersionReq::parse("0.3.13").unwrap()),
+- ("0.2*", VersionReq::parse("0.2.*").unwrap()),
+- ("*.0", VersionReq::any()),
+- ];
+-
+- for (version, requirement) in versions.into_iter() {
+- let parsed = VersionReq::parse(version);
+- let error = parsed.err().unwrap();
+-
+- assert_eq!(ReqParseError::DeprecatedVersionRequirement(requirement), error);
+- }
+-}
+diff --git a/third_party/rust/semver/tests/node/mod.rs b/third_party/rust/semver/tests/node/mod.rs
+new file mode 100644
+--- /dev/null
++++ b/third_party/rust/semver/tests/node/mod.rs
+@@ -0,0 +1,43 @@
++#![cfg(test_node_semver)]
++
++use semver::Version;
++use std::fmt::{self, Display};
++use std::process::Command;
++
++#[derive(Default, Eq, PartialEq, Hash, Debug)]
++pub(super) struct VersionReq(semver::VersionReq);
++
++impl VersionReq {
++ pub(super) const STAR: Self = VersionReq(semver::VersionReq::STAR);
++
++ pub(super) fn matches(&self, version: &Version) -> bool {
++ let out = Command::new("node")
++ .arg("-e")
++ .arg(format!(
++ "console.log(require('semver').satisfies('{}', '{}'))",
++ version,
++ self.to_string().replace(',', ""),
++ ))
++ .output()
++ .unwrap();
++ if out.stdout == b"true\n" {
++ true
++ } else if out.stdout == b"false\n" {
++ false
++ } else {
++ let s = String::from_utf8_lossy(&out.stdout) + String::from_utf8_lossy(&out.stderr);
++ panic!("unexpected output: {}", s);
++ }
++ }
++}
++
++impl Display for VersionReq {
++ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
++ Display::fmt(&self.0, formatter)
++ }
++}
++
++#[cfg_attr(not(no_track_caller), track_caller)]
++pub(super) fn req(text: &str) -> VersionReq {
++ VersionReq(crate::util::req(text))
++}
+diff --git a/third_party/rust/semver/tests/regression.rs b/third_party/rust/semver/tests/regression.rs
+deleted file mode 100644
+--- a/third_party/rust/semver/tests/regression.rs
++++ /dev/null
+@@ -1,25 +0,0 @@
+-extern crate semver;
+-extern crate crates_index;
+-extern crate tempdir;
+-
+-// This test checks to see if every existing crate parses successfully. Important to not break the
+-// Rust universe!
+-
+-#[cfg(feature = "ci")]
+-#[test]
+-fn test_regressions() {
+- use tempdir::TempDir;
+- use crates_index::Index;
+- use semver::Version;
+-
+- let dir = TempDir::new("semver").unwrap();
+- let index = Index::new(dir.into_path());
+- index.clone().unwrap();
+-
+- for krate in index.crates() {
+- for version in krate.versions() {
+- let v = version.version();
+- assert!(Version::parse(v).is_ok(), "failed: {} ({})", version.name(), v);
+- }
+- }
+-}
+diff --git a/third_party/rust/semver/tests/serde.rs b/third_party/rust/semver/tests/serde.rs
+deleted file mode 100644
+--- a/third_party/rust/semver/tests/serde.rs
++++ /dev/null
+@@ -1,90 +0,0 @@
+-#![cfg(feature = "serde")]
+-
+-#[macro_use]
+-extern crate serde_derive;
+-
+-extern crate semver;
+-extern crate serde_json;
+-
+-use semver::{Identifier, Version, VersionReq};
+-
+-#[derive(Serialize, Deserialize, PartialEq, Debug)]
+-struct Identified {
+- name: String,
+- identifier: Identifier,
+-}
+-
+-#[derive(Serialize, Deserialize, PartialEq, Debug)]
+-struct Versioned {
+- name: String,
+- vers: Version,
+-}
+-
+-#[test]
+-fn serialize_identifier() {
+- let id = Identified {
+- name: "serde".to_owned(),
+- identifier: Identifier::Numeric(100),
+- };
+- let j = serde_json::to_string(&id).unwrap();
+- assert_eq!(j, r#"{"name":"serde","identifier":100}"#);
+-
+- let id = Identified {
+- name: "serde".to_owned(),
+- identifier: Identifier::AlphaNumeric("b100".to_owned()),
+- };
+- let j = serde_json::to_string(&id).unwrap();
+- assert_eq!(j, r#"{"name":"serde","identifier":"b100"}"#);
+-}
+-
+-#[test]
+-fn deserialize_identifier() {
+- let j = r#"{"name":"serde","identifier":100}"#;
+- let id = serde_json::from_str::<Identified>(j).unwrap();
+- let expected = Identified {
+- name: "serde".to_owned(),
+- identifier: Identifier::Numeric(100),
+- };
+- assert_eq!(id, expected);
+-
+- let j = r#"{"name":"serde","identifier":"b100"}"#;
+- let id = serde_json::from_str::<Identified>(j).unwrap();
+- let expected = Identified {
+- name: "serde".to_owned(),
+- identifier: Identifier::AlphaNumeric("b100".to_owned()),
+- };
+- assert_eq!(id, expected);
+-}
+-
+-#[test]
+-fn serialize_version() {
+- let v = Versioned {
+- name: "serde".to_owned(),
+- vers: Version::parse("1.0.0").unwrap(),
+- };
+- let j = serde_json::to_string(&v).unwrap();
+- assert_eq!(j, r#"{"name":"serde","vers":"1.0.0"}"#);
+-}
+-
+-#[test]
+-fn deserialize_version() {
+- let j = r#"{"name":"serde","vers":"1.0.0"}"#;
+- let v = serde_json::from_str::<Versioned>(j).unwrap();
+- let expected = Versioned {
+- name: "serde".to_owned(),
+- vers: Version::parse("1.0.0").unwrap(),
+- };
+- assert_eq!(v, expected);
+-}
+-
+-#[test]
+-fn serialize_versionreq() {
+- let v = VersionReq::exact(&Version::parse("1.0.0").unwrap());
+-
+- assert_eq!(serde_json::to_string(&v).unwrap(), r#""= 1.0.0""#);
+-}
+-
+-#[test]
+-fn deserialize_versionreq() {
+- assert_eq!("1.0.0".parse::<VersionReq>().unwrap(), serde_json::from_str(r#""1.0.0""#).unwrap());
+-}
+diff --git a/third_party/rust/semver/tests/test_autotrait.rs b/third_party/rust/semver/tests/test_autotrait.rs
+new file mode 100644
+--- /dev/null
++++ b/third_party/rust/semver/tests/test_autotrait.rs
+@@ -0,0 +1,12 @@
++fn assert_send_sync<T: Send + Sync>() {}
++
++#[test]
++fn test() {
++ assert_send_sync::<semver::BuildMetadata>();
++ assert_send_sync::<semver::Comparator>();
++ assert_send_sync::<semver::Error>();
++ assert_send_sync::<semver::Prerelease>();
++ assert_send_sync::<semver::Version>();
++ assert_send_sync::<semver::VersionReq>();
++ assert_send_sync::<semver::Op>();
++}
+diff --git a/third_party/rust/semver/tests/test_identifier.rs b/third_party/rust/semver/tests/test_identifier.rs
+new file mode 100644
+--- /dev/null
++++ b/third_party/rust/semver/tests/test_identifier.rs
+@@ -0,0 +1,45 @@
++#![allow(
++ clippy::eq_op,
++ clippy::needless_pass_by_value,
++ clippy::toplevel_ref_arg,
++ clippy::wildcard_imports
++)]
++
++mod util;
++
++use crate::util::*;
++use semver::Prerelease;
++
++#[test]
++fn test_new() {
++ fn test(identifier: Prerelease, expected: &str) {
++ assert_eq!(identifier.is_empty(), expected.is_empty());
++ assert_eq!(identifier.len(), expected.len());
++ assert_eq!(identifier.as_str(), expected);
++ assert_eq!(identifier, identifier);
++ assert_eq!(identifier, identifier.clone());
++ }
++
++ let ref mut string = String::new();
++ let limit = if cfg!(miri) { 40 } else { 280 }; // miri is slow
++ for _ in 0..limit {
++ test(prerelease(string), string);
++ string.push('1');
++ }
++
++ if !cfg!(miri) {
++ let ref string = string.repeat(20000);
++ test(prerelease(string), string);
++ }
++}
++
++#[test]
++fn test_eq() {
++ assert_eq!(prerelease("-"), prerelease("-"));
++ assert_ne!(prerelease("a"), prerelease("aa"));
++ assert_ne!(prerelease("aa"), prerelease("a"));
++ assert_ne!(prerelease("aaaaaaaaa"), prerelease("a"));
++ assert_ne!(prerelease("a"), prerelease("aaaaaaaaa"));
++ assert_ne!(prerelease("aaaaaaaaa"), prerelease("bbbbbbbbb"));
++ assert_ne!(build_metadata("1"), build_metadata("001"));
++}
+diff --git a/third_party/rust/semver/tests/test_version.rs b/third_party/rust/semver/tests/test_version.rs
+new file mode 100644
+--- /dev/null
++++ b/third_party/rust/semver/tests/test_version.rs
+@@ -0,0 +1,241 @@
++#![allow(
++ clippy::nonminimal_bool,
++ clippy::too_many_lines,
++ clippy::wildcard_imports
++)]
++
++mod util;
++
++use crate::util::*;
++use semver::{BuildMetadata, Prerelease, Version};
++
++#[test]
++fn test_parse() {
++ let err = version_err("");
++ assert_to_string(
++ err,
++ "unexpected end of input while parsing major version number",
++ );
++
++ let err = version_err(" ");
++ assert_to_string(
++ err,
++ "unexpected character ' ' while parsing major version number",
++ );
++
++ let err = version_err("1");
++ assert_to_string(
++ err,
++ "unexpected end of input while parsing major version number",
++ );
++
++ let err = version_err("1.2");
++ assert_to_string(
++ err,
++ "unexpected end of input while parsing minor version number",
++ );
++
++ let err = version_err("1.2.3-");
++ assert_to_string(err, "empty identifier segment in pre-release identifier");
++
++ let err = version_err("a.b.c");
++ assert_to_string(
++ err,
++ "unexpected character 'a' while parsing major version number",
++ );
++
++ let err = version_err("1.2.3 abc");
++ assert_to_string(err, "unexpected character ' ' after patch version number");
++
++ let err = version_err("1.2.3-01");
++ assert_to_string(err, "invalid leading zero in pre-release identifier");
++
++ let parsed = version("1.2.3");
++ let expected = Version::new(1, 2, 3);
++ assert_eq!(parsed, expected);
++ let expected = Version {
++ major: 1,
++ minor: 2,
++ patch: 3,
++ pre: Prerelease::EMPTY,
++ build: BuildMetadata::EMPTY,
++ };
++ assert_eq!(parsed, expected);
++
++ let parsed = version("1.2.3-alpha1");
++ let expected = Version {
++ major: 1,
++ minor: 2,
++ patch: 3,
++ pre: prerelease("alpha1"),
++ build: BuildMetadata::EMPTY,
++ };
++ assert_eq!(parsed, expected);
++
++ let parsed = version("1.2.3+build5");
++ let expected = Version {
++ major: 1,
++ minor: 2,
++ patch: 3,
++ pre: Prerelease::EMPTY,
++ build: build_metadata("build5"),
++ };
++ assert_eq!(parsed, expected);
++
++ let parsed = version("1.2.3+5build");
++ let expected = Version {
++ major: 1,
++ minor: 2,
++ patch: 3,
++ pre: Prerelease::EMPTY,
++ build: build_metadata("5build"),
++ };
++ assert_eq!(parsed, expected);
++
++ let parsed = version("1.2.3-alpha1+build5");
++ let expected = Version {
++ major: 1,
++ minor: 2,
++ patch: 3,
++ pre: prerelease("alpha1"),
++ build: build_metadata("build5"),
++ };
++ assert_eq!(parsed, expected);
++
++ let parsed = version("1.2.3-1.alpha1.9+build5.7.3aedf");
++ let expected = Version {
++ major: 1,
++ minor: 2,
++ patch: 3,
++ pre: prerelease("1.alpha1.9"),
++ build: build_metadata("build5.7.3aedf"),
++ };
++ assert_eq!(parsed, expected);
++
++ let parsed = version("1.2.3-0a.alpha1.9+05build.7.3aedf");
++ let expected = Version {
++ major: 1,
++ minor: 2,
++ patch: 3,
++ pre: prerelease("0a.alpha1.9"),
++ build: build_metadata("05build.7.3aedf"),
++ };
++ assert_eq!(parsed, expected);
++
++ let parsed = version("0.4.0-beta.1+0851523");
++ let expected = Version {
++ major: 0,
++ minor: 4,
++ patch: 0,
++ pre: prerelease("beta.1"),
++ build: build_metadata("0851523"),
++ };
++ assert_eq!(parsed, expected);
++
++ // for https://nodejs.org/dist/index.json, where some older npm versions are "1.1.0-beta-10"
++ let parsed = version("1.1.0-beta-10");
++ let expected = Version {
++ major: 1,
++ minor: 1,
++ patch: 0,
++ pre: prerelease("beta-10"),
++ build: BuildMetadata::EMPTY,
++ };
++ assert_eq!(parsed, expected);
++}
++
++#[test]
++fn test_eq() {
++ assert_eq!(version("1.2.3"), version("1.2.3"));
++ assert_eq!(version("1.2.3-alpha1"), version("1.2.3-alpha1"));
++ assert_eq!(version("1.2.3+build.42"), version("1.2.3+build.42"));
++ assert_eq!(version("1.2.3-alpha1+42"), version("1.2.3-alpha1+42"));
++}
++
++#[test]
++fn test_ne() {
++ assert_ne!(version("0.0.0"), version("0.0.1"));
++ assert_ne!(version("0.0.0"), version("0.1.0"));
++ assert_ne!(version("0.0.0"), version("1.0.0"));
++ assert_ne!(version("1.2.3-alpha"), version("1.2.3-beta"));
++ assert_ne!(version("1.2.3+23"), version("1.2.3+42"));
++}
++
++#[test]
++fn test_display() {
++ assert_to_string(version("1.2.3"), "1.2.3");
++ assert_to_string(version("1.2.3-alpha1"), "1.2.3-alpha1");
++ assert_to_string(version("1.2.3+build.42"), "1.2.3+build.42");
++ assert_to_string(version("1.2.3-alpha1+42"), "1.2.3-alpha1+42");
++}
++
++#[test]
++fn test_lt() {
++ assert!(version("0.0.0") < version("1.2.3-alpha2"));
++ assert!(version("1.0.0") < version("1.2.3-alpha2"));
++ assert!(version("1.2.0") < version("1.2.3-alpha2"));
++ assert!(version("1.2.3-alpha1") < version("1.2.3"));
++ assert!(version("1.2.3-alpha1") < version("1.2.3-alpha2"));
++ assert!(!(version("1.2.3-alpha2") < version("1.2.3-alpha2")));
++ assert!(version("1.2.3+23") < version("1.2.3+42"));
++}
++
++#[test]
++fn test_le() {
++ assert!(version("0.0.0") <= version("1.2.3-alpha2"));
++ assert!(version("1.0.0") <= version("1.2.3-alpha2"));
++ assert!(version("1.2.0") <= version("1.2.3-alpha2"));
++ assert!(version("1.2.3-alpha1") <= version("1.2.3-alpha2"));
++ assert!(version("1.2.3-alpha2") <= version("1.2.3-alpha2"));
++ assert!(version("1.2.3+23") <= version("1.2.3+42"));
++}
++
++#[test]
++fn test_gt() {
++ assert!(version("1.2.3-alpha2") > version("0.0.0"));
++ assert!(version("1.2.3-alpha2") > version("1.0.0"));
++ assert!(version("1.2.3-alpha2") > version("1.2.0"));
++ assert!(version("1.2.3-alpha2") > version("1.2.3-alpha1"));
++ assert!(version("1.2.3") > version("1.2.3-alpha2"));
++ assert!(!(version("1.2.3-alpha2") > version("1.2.3-alpha2")));
++ assert!(!(version("1.2.3+23") > version("1.2.3+42")));
++}
++
++#[test]
++fn test_ge() {
++ assert!(version("1.2.3-alpha2") >= version("0.0.0"));
++ assert!(version("1.2.3-alpha2") >= version("1.0.0"));
++ assert!(version("1.2.3-alpha2") >= version("1.2.0"));
++ assert!(version("1.2.3-alpha2") >= version("1.2.3-alpha1"));
++ assert!(version("1.2.3-alpha2") >= version("1.2.3-alpha2"));
++ assert!(!(version("1.2.3+23") >= version("1.2.3+42")));
++}
++
++#[test]
++fn test_spec_order() {
++ let vs = [
++ "1.0.0-alpha",
++ "1.0.0-alpha.1",
++ "1.0.0-alpha.beta",
++ "1.0.0-beta",
++ "1.0.0-beta.2",
++ "1.0.0-beta.11",
++ "1.0.0-rc.1",
++ "1.0.0",
++ ];
++ let mut i = 1;
++ while i < vs.len() {
++ let a = version(vs[i - 1]);
++ let b = version(vs[i]);
++ assert!(a < b, "nope {:?} < {:?}", a, b);
++ i += 1;
++ }
++}
++
++#[test]
++fn test_align() {
++ let version = version("1.2.3-rc1");
++ assert_eq!("1.2.3-rc1 ", format!("{:20}", version));
++ assert_eq!("*****1.2.3-rc1******", format!("{:*^20}", version));
++ assert_eq!(" 1.2.3-rc1", format!("{:>20}", version));
++}
+diff --git a/third_party/rust/semver/tests/test_version_req.rs b/third_party/rust/semver/tests/test_version_req.rs
+new file mode 100644
+--- /dev/null
++++ b/third_party/rust/semver/tests/test_version_req.rs
+@@ -0,0 +1,443 @@
++#![allow(
++ clippy::missing_panics_doc,
++ clippy::shadow_unrelated,
++ clippy::toplevel_ref_arg,
++ clippy::wildcard_imports
++)]
++
++mod node;
++mod util;
++
++use crate::util::*;
++use std::collections::hash_map::DefaultHasher;
++use std::hash::{Hash, Hasher};
++
++#[cfg(test_node_semver)]
++use node::{req, VersionReq};
++#[cfg(not(test_node_semver))]
++use semver::VersionReq;
++
++#[cfg_attr(not(no_track_caller), track_caller)]
++fn assert_match_all(req: &VersionReq, versions: &[&str]) {
++ for string in versions {
++ let parsed = version(string);
++ assert!(req.matches(&parsed), "did not match {}", string);
++ }
++}
++
++#[cfg_attr(not(no_track_caller), track_caller)]
++fn assert_match_none(req: &VersionReq, versions: &[&str]) {
++ for string in versions {
++ let parsed = version(string);
++ assert!(!req.matches(&parsed), "matched {}", string);
++ }
++}
++
++#[test]
++fn test_basic() {
++ let ref r = req("1.0.0");
++ assert_to_string(r, "^1.0.0");
++ assert_match_all(r, &["1.0.0", "1.1.0", "1.0.1"]);
++ assert_match_none(r, &["0.9.9", "0.10.0", "0.1.0", "1.0.0-pre", "1.0.1-pre"]);
++}
++
++#[test]
++#[cfg(not(no_const_vec_new))]
++fn test_default() {
++ let ref r = VersionReq::default();
++ assert_eq!(r, &VersionReq::STAR);
++}
++
++#[test]
++fn test_exact() {
++ let ref r = req("=1.0.0");
++ assert_to_string(r, "=1.0.0");
++ assert_match_all(r, &["1.0.0"]);
++ assert_match_none(r, &["1.0.1", "0.9.9", "0.10.0", "0.1.0", "1.0.0-pre"]);
++
++ let ref r = req("=0.9.0");
++ assert_to_string(r, "=0.9.0");
++ assert_match_all(r, &["0.9.0"]);
++ assert_match_none(r, &["0.9.1", "1.9.0", "0.0.9", "0.9.0-pre"]);
++
++ let ref r = req("=0.0.2");
++ assert_to_string(r, "=0.0.2");
++ assert_match_all(r, &["0.0.2"]);
++ assert_match_none(r, &["0.0.1", "0.0.3", "0.0.2-pre"]);
++
++ let ref r = req("=0.1.0-beta2.a");
++ assert_to_string(r, "=0.1.0-beta2.a");
++ assert_match_all(r, &["0.1.0-beta2.a"]);
++ assert_match_none(r, &["0.9.1", "0.1.0", "0.1.1-beta2.a", "0.1.0-beta2"]);
++
++ let ref r = req("=0.1.0+meta");
++ assert_to_string(r, "=0.1.0");
++ assert_match_all(r, &["0.1.0", "0.1.0+meta", "0.1.0+any"]);
++}
++
++#[test]
++pub fn test_greater_than() {
++ let ref r = req(">= 1.0.0");
++ assert_to_string(r, ">=1.0.0");
++ assert_match_all(r, &["1.0.0", "2.0.0"]);
++ assert_match_none(r, &["0.1.0", "0.0.1", "1.0.0-pre", "2.0.0-pre"]);
++
++ let ref r = req(">= 2.1.0-alpha2");
++ assert_to_string(r, ">=2.1.0-alpha2");
++ assert_match_all(r, &["2.1.0-alpha2", "2.1.0-alpha3", "2.1.0", "3.0.0"]);
++ assert_match_none(
++ r,
++ &["2.0.0", "2.1.0-alpha1", "2.0.0-alpha2", "3.0.0-alpha2"],
++ );
++}
++
++#[test]
++pub fn test_less_than() {
++ let ref r = req("< 1.0.0");
++ assert_to_string(r, "<1.0.0");
++ assert_match_all(r, &["0.1.0", "0.0.1"]);
++ assert_match_none(r, &["1.0.0", "1.0.0-beta", "1.0.1", "0.9.9-alpha"]);
++
++ let ref r = req("<= 2.1.0-alpha2");
++ assert_match_all(r, &["2.1.0-alpha2", "2.1.0-alpha1", "2.0.0", "1.0.0"]);
++ assert_match_none(
++ r,
++ &["2.1.0", "2.2.0-alpha1", "2.0.0-alpha2", "1.0.0-alpha2"],
++ );
++
++ let ref r = req(">1.0.0-alpha, <1.0.0");
++ assert_match_all(r, &["1.0.0-beta"]);
++
++ let ref r = req(">1.0.0-alpha, <1.0");
++ assert_match_none(r, &["1.0.0-beta"]);
++
++ let ref r = req(">1.0.0-alpha, <1");
++ assert_match_none(r, &["1.0.0-beta"]);
++}
++
++#[test]
++pub fn test_multiple() {
++ let ref r = req("> 0.0.9, <= 2.5.3");
++ assert_to_string(r, ">0.0.9, <=2.5.3");
++ assert_match_all(r, &["0.0.10", "1.0.0", "2.5.3"]);
++ assert_match_none(r, &["0.0.8", "2.5.4"]);
++
++ let ref r = req("0.3.0, 0.4.0");
++ assert_to_string(r, "^0.3.0, ^0.4.0");
++ assert_match_none(r, &["0.0.8", "0.3.0", "0.4.0"]);
++
++ let ref r = req("<= 0.2.0, >= 0.5.0");
++ assert_to_string(r, "<=0.2.0, >=0.5.0");
++ assert_match_none(r, &["0.0.8", "0.3.0", "0.5.1"]);
++
++ let ref r = req("0.1.0, 0.1.4, 0.1.6");
++ assert_to_string(r, "^0.1.0, ^0.1.4, ^0.1.6");
++ assert_match_all(r, &["0.1.6", "0.1.9"]);
++ assert_match_none(r, &["0.1.0", "0.1.4", "0.2.0"]);
++
++ let err = req_err("> 0.1.0,");
++ assert_to_string(
++ err,
++ "unexpected end of input while parsing major version number",
++ );
++
++ let err = req_err("> 0.3.0, ,");
++ assert_to_string(
++ err,
++ "unexpected character ',' while parsing major version number",
++ );
++
++ let ref r = req(">=0.5.1-alpha3, <0.6");
++ assert_to_string(r, ">=0.5.1-alpha3, <0.6");
++ assert_match_all(
++ r,
++ &[
++ "0.5.1-alpha3",
++ "0.5.1-alpha4",
++ "0.5.1-beta",
++ "0.5.1",
++ "0.5.5",
++ ],
++ );
++ assert_match_none(
++ r,
++ &["0.5.1-alpha1", "0.5.2-alpha3", "0.5.5-pre", "0.5.0-pre"],
++ );
++ assert_match_none(r, &["0.6.0", "0.6.0-pre"]);
++
++ // https://github.com/steveklabnik/semver/issues/56
++ let err = req_err("1.2.3 - 2.3.4");
++ assert_to_string(err, "expected comma after patch version number, found '-'");
++}
++
++#[test]
++pub fn test_whitespace_delimited_comparator_sets() {
++ // https://github.com/steveklabnik/semver/issues/55
++ let err = req_err("> 0.0.9 <= 2.5.3");
++ assert_to_string(err, "expected comma after patch version number, found '<'");
++}
++
++#[test]
++pub fn test_tilde() {
++ let ref r = req("~1");
++ assert_match_all(r, &["1.0.0", "1.0.1", "1.1.1"]);
++ assert_match_none(r, &["0.9.1", "2.9.0", "0.0.9"]);
++
++ let ref r = req("~1.2");
++ assert_match_all(r, &["1.2.0", "1.2.1"]);
++ assert_match_none(r, &["1.1.1", "1.3.0", "0.0.9"]);
++
++ let ref r = req("~1.2.2");
++ assert_match_all(r, &["1.2.2", "1.2.4"]);
++ assert_match_none(r, &["1.2.1", "1.9.0", "1.0.9", "2.0.1", "0.1.3"]);
++
++ let ref r = req("~1.2.3-beta.2");
++ assert_match_all(r, &["1.2.3", "1.2.4", "1.2.3-beta.2", "1.2.3-beta.4"]);
++ assert_match_none(r, &["1.3.3", "1.1.4", "1.2.3-beta.1", "1.2.4-beta.2"]);
++}
++
++#[test]
++pub fn test_caret() {
++ let ref r = req("^1");
++ assert_match_all(r, &["1.1.2", "1.1.0", "1.2.1", "1.0.1"]);
++ assert_match_none(r, &["0.9.1", "2.9.0", "0.1.4"]);
++ assert_match_none(r, &["1.0.0-beta1", "0.1.0-alpha", "1.0.1-pre"]);
++
++ let ref r = req("^1.1");
++ assert_match_all(r, &["1.1.2", "1.1.0", "1.2.1"]);
++ assert_match_none(r, &["0.9.1", "2.9.0", "1.0.1", "0.1.4"]);
++
++ let ref r = req("^1.1.2");
++ assert_match_all(r, &["1.1.2", "1.1.4", "1.2.1"]);
++ assert_match_none(r, &["0.9.1", "2.9.0", "1.1.1", "0.0.1"]);
++ assert_match_none(r, &["1.1.2-alpha1", "1.1.3-alpha1", "2.9.0-alpha1"]);
++
++ let ref r = req("^0.1.2");
++ assert_match_all(r, &["0.1.2", "0.1.4"]);
++ assert_match_none(r, &["0.9.1", "2.9.0", "1.1.1", "0.0.1"]);
++ assert_match_none(r, &["0.1.2-beta", "0.1.3-alpha", "0.2.0-pre"]);
++
++ let ref r = req("^0.5.1-alpha3");
++ assert_match_all(
++ r,
++ &[
++ "0.5.1-alpha3",
++ "0.5.1-alpha4",
++ "0.5.1-beta",
++ "0.5.1",
++ "0.5.5",
++ ],
++ );
++ assert_match_none(
++ r,
++ &[
++ "0.5.1-alpha1",
++ "0.5.2-alpha3",
++ "0.5.5-pre",
++ "0.5.0-pre",
++ "0.6.0",
++ ],
++ );
++
++ let ref r = req("^0.0.2");
++ assert_match_all(r, &["0.0.2"]);
++ assert_match_none(r, &["0.9.1", "2.9.0", "1.1.1", "0.0.1", "0.1.4"]);
++
++ let ref r = req("^0.0");
++ assert_match_all(r, &["0.0.2", "0.0.0"]);
++ assert_match_none(r, &["0.9.1", "2.9.0", "1.1.1", "0.1.4"]);
++
++ let ref r = req("^0");
++ assert_match_all(r, &["0.9.1", "0.0.2", "0.0.0"]);
++ assert_match_none(r, &["2.9.0", "1.1.1"]);
++
++ let ref r = req("^1.4.2-beta.5");
++ assert_match_all(
++ r,
++ &["1.4.2", "1.4.3", "1.4.2-beta.5", "1.4.2-beta.6", "1.4.2-c"],
++ );
++ assert_match_none(
++ r,
++ &[
++ "0.9.9",
++ "2.0.0",
++ "1.4.2-alpha",
++ "1.4.2-beta.4",
++ "1.4.3-beta.5",
++ ],
++ );
++}
++
++#[test]
++pub fn test_wildcard() {
++ let err = req_err("");
++ assert_to_string(
++ err,
++ "unexpected end of input while parsing major version number",
++ );
++
++ let ref r = req("*");
++ assert_match_all(r, &["0.9.1", "2.9.0", "0.0.9", "1.0.1", "1.1.1"]);
++ assert_match_none(r, &["1.0.0-pre"]);
++
++ for s in &["x", "X"] {
++ assert_eq!(*r, req(s));
++ }
++
++ let ref r = req("1.*");
++ assert_match_all(r, &["1.2.0", "1.2.1", "1.1.1", "1.3.0"]);
++ assert_match_none(r, &["0.0.9", "1.2.0-pre"]);
++
++ for s in &["1.x", "1.X", "1.*.*"] {
++ assert_eq!(*r, req(s));
++ }
++
++ let ref r = req("1.2.*");
++ assert_match_all(r, &["1.2.0", "1.2.2", "1.2.4"]);
++ assert_match_none(r, &["1.9.0", "1.0.9", "2.0.1", "0.1.3", "1.2.2-pre"]);
++
++ for s in &["1.2.x", "1.2.X"] {
++ assert_eq!(*r, req(s));
++ }
++}
++
++#[test]
++pub fn test_logical_or() {
++ // https://github.com/steveklabnik/semver/issues/57
++ let err = req_err("=1.2.3 || =2.3.4");
++ assert_to_string(err, "expected comma after patch version number, found '|'");
++
++ let err = req_err("1.1 || =1.2.3");
++ assert_to_string(err, "expected comma after minor version number, found '|'");
++
++ let err = req_err("6.* || 8.* || >= 10.*");
++ assert_to_string(err, "expected comma after minor version number, found '|'");
++}
++
++#[test]
++pub fn test_any() {
++ #[cfg(not(no_const_vec_new))]
++ let ref r = VersionReq::STAR;
++ #[cfg(no_const_vec_new)]
++ let ref r = VersionReq {
++ comparators: Vec::new(),
++ };
++ assert_match_all(r, &["0.0.1", "0.1.0", "1.0.0"]);
++}
++
++#[test]
++pub fn test_pre() {
++ let ref r = req("=2.1.1-really.0");
++ assert_match_all(r, &["2.1.1-really.0"]);
++}
++
++#[test]
++pub fn test_parse_errors() {
++ let err = req_err("\0");
++ assert_to_string(
++ err,
++ "unexpected character '\\0' while parsing major version number",
++ );
++
++ let err = req_err(">= >= 0.0.2");
++ assert_to_string(
++ err,
++ "unexpected character '>' while parsing major version number",
++ );
++
++ let err = req_err(">== 0.0.2");
++ assert_to_string(
++ err,
++ "unexpected character '=' while parsing major version number",
++ );
++
++ let err = req_err("a.0.0");
++ assert_to_string(
++ err,
++ "unexpected character 'a' while parsing major version number",
++ );
++
++ let err = req_err("1.0.0-");
++ assert_to_string(err, "empty identifier segment in pre-release identifier");
++
++ let err = req_err(">=");
++ assert_to_string(
++ err,
++ "unexpected end of input while parsing major version number",
++ );
++}
++
++#[test]
++fn test_cargo3202() {
++ let ref r = req("0.*.*");
++ assert_to_string(r, "0.*");
++ assert_match_all(r, &["0.5.0"]);
++
++ let ref r = req("0.0.*");
++ assert_to_string(r, "0.0.*");
++}
++
++#[test]
++fn test_digit_after_wildcard() {
++ let err = req_err("*.1");
++ assert_to_string(err, "unexpected character after wildcard in version req");
++
++ let err = req_err("1.*.1");
++ assert_to_string(err, "unexpected character after wildcard in version req");
++
++ let err = req_err(">=1.*.1");
++ assert_to_string(err, "unexpected character after wildcard in version req");
++}
++
++#[test]
++fn test_eq_hash() {
++ fn calculate_hash(value: impl Hash) -> u64 {
++ let mut hasher = DefaultHasher::new();
++ value.hash(&mut hasher);
++ hasher.finish()
++ }
++
++ assert!(req("^1") == req("^1"));
++ assert!(calculate_hash(req("^1")) == calculate_hash(req("^1")));
++ assert!(req("^1") != req("^2"));
++}
++
++#[test]
++fn test_leading_digit_in_pre_and_build() {
++ for op in &["=", ">", ">=", "<", "<=", "~", "^"] {
++ // digit then alpha
++ req(&format!("{} 1.2.3-1a", op));
++ req(&format!("{} 1.2.3+1a", op));
++
++ // digit then alpha (leading zero)
++ req(&format!("{} 1.2.3-01a", op));
++ req(&format!("{} 1.2.3+01", op));
++
++ // multiple
++ req(&format!("{} 1.2.3-1+1", op));
++ req(&format!("{} 1.2.3-1-1+1-1-1", op));
++ req(&format!("{} 1.2.3-1a+1a", op));
++ req(&format!("{} 1.2.3-1a-1a+1a-1a-1a", op));
++ }
++}
++
++#[test]
++fn test_wildcard_and_another() {
++ let err = req_err("*, 0.20.0-any");
++ assert_to_string(
++ err,
++ "wildcard req (*) must be the only comparator in the version req",
++ );
++
++ let err = req_err("0.20.0-any, *");
++ assert_to_string(
++ err,
++ "wildcard req (*) must be the only comparator in the version req",
++ );
++
++ let err = req_err("0.20.0-any, *, 1.0");
++ assert_to_string(
++ err,
++ "wildcard req (*) must be the only comparator in the version req",
++ );
++}
+diff --git a/third_party/rust/semver/tests/util/mod.rs b/third_party/rust/semver/tests/util/mod.rs
+new file mode 100644
+--- /dev/null
++++ b/third_party/rust/semver/tests/util/mod.rs
+@@ -0,0 +1,39 @@
++#![allow(dead_code)]
++
++use semver::{BuildMetadata, Error, Prerelease, Version, VersionReq};
++use std::fmt::Display;
++
++#[cfg_attr(not(no_track_caller), track_caller)]
++pub(super) fn version(text: &str) -> Version {
++ Version::parse(text).unwrap()
++}
++
++#[cfg_attr(not(no_track_caller), track_caller)]
++pub(super) fn version_err(text: &str) -> Error {
++ Version::parse(text).unwrap_err()
++}
++
++#[cfg_attr(not(no_track_caller), track_caller)]
++pub(super) fn req(text: &str) -> VersionReq {
++ VersionReq::parse(text).unwrap()
++}
++
++#[cfg_attr(not(no_track_caller), track_caller)]
++pub(super) fn req_err(text: &str) -> Error {
++ VersionReq::parse(text).unwrap_err()
++}
++
++#[cfg_attr(not(no_track_caller), track_caller)]
++pub(super) fn prerelease(text: &str) -> Prerelease {
++ Prerelease::new(text).unwrap()
++}
++
++#[cfg_attr(not(no_track_caller), track_caller)]
++pub(super) fn build_metadata(text: &str) -> BuildMetadata {
++ BuildMetadata::new(text).unwrap()
++}
++
++#[cfg_attr(not(no_track_caller), track_caller)]
++pub(super) fn assert_to_string(value: impl Display, expected: &str) {
++ assert_eq!(value.to_string(), expected);
++}
+diff --git a/toolkit/library/rust/shared/Cargo.toml b/toolkit/library/rust/shared/Cargo.toml
+--- a/toolkit/library/rust/shared/Cargo.toml
++++ b/toolkit/library/rust/shared/Cargo.toml
+@@ -16,17 +16,17 @@ nsstring = { path = "../../../../xpcom/r
+ netwerk_helper = { path = "../../../../netwerk/base/rust-helper" }
+ xpcom = { path = "../../../../xpcom/rust/xpcom" }
+ prefs_parser = { path = "../../../../modules/libpref/parser" }
+ static_prefs = { path = "../../../../modules/libpref/init/static_prefs" }
+ profiler_helper = { path = "../../../../tools/profiler/rust-helper", optional = true }
+ mozurl = { path = "../../../../netwerk/base/mozurl" }
+ webrender_bindings = { path = "../../../../gfx/webrender_bindings" }
+ cubeb-coreaudio = { git = "https://github.com/mozilla/cubeb-coreaudio-rs", rev = "44eca95823bb57e964cf7b6d9791ed2ccb4b2108", optional = true }
+-cubeb-pulse = { git = "https://github.com/mozilla/cubeb-pulse-rs", rev="df4dc0288b07b865440f4c7e41ca49ca9ccffc63", optional = true, features=["pulse-dlopen"] }
++cubeb-pulse = { git = "https://github.com/mozilla/cubeb-pulse-rs", rev="1f1fe1e08e01a9a534ec7f079702a583a0899ce7", optional = true, features=["pulse-dlopen"] }
+ cubeb-sys = { version = "0.10", optional = true, features=["gecko-in-tree"] }
+ audioipc2-client = { git = "https://github.com/kinetiknz/audioipc-2", rev = "85e9839059f4bf8f68130825b8fd02c39a6a51b9", optional = true } # macos (v2) branch
+ audioipc2-server = { git = "https://github.com/kinetiknz/audioipc-2", rev = "85e9839059f4bf8f68130825b8fd02c39a6a51b9", optional = true } # macos (v2) branch
+ audioipc-client = { git = "https://github.com/mozilla/audioipc-2", rev = "c144368c4e084ec0f076af6262970655c2d99e8d", optional = true }
+ audioipc-server = { git = "https://github.com/mozilla/audioipc-2", rev = "c144368c4e084ec0f076af6262970655c2d99e8d", optional = true }
+ encoding_glue = { path = "../../../../intl/encoding_glue" }
+ authenticator = "0.3.1"
+ gkrust_utils = { path = "../../../../xpcom/rust/gkrust_utils" }
+diff --git a/xpcom/rust/gkrust_utils/Cargo.toml b/xpcom/rust/gkrust_utils/Cargo.toml
+--- a/xpcom/rust/gkrust_utils/Cargo.toml
++++ b/xpcom/rust/gkrust_utils/Cargo.toml
+@@ -1,8 +1,8 @@
+ [package]
+ name = "gkrust_utils"
+ version = "0.1.0"
+ authors = ["Jonathan Kingston <jkt(a)mozilla.com>"]
+
+ [dependencies]
+-semver = "0.9"
++semver = "1.0"
+ nsstring = { path = "../nsstring" }
+
1
0
commit 5ef7497f1f872f6fc269e37c044a9fdd6b8eae05
Author: Danny Rawlins <contact(a)romster.me>
Date: Mon Sep 19 08:44:25 2022 +1000
cuda: 11.7.0 -> 11.7.1
diff --git a/cuda/.footprint b/cuda/.footprint
index f1c345a7a..5bd7d2dcb 100644
--- a/cuda/.footprint
+++ b/cuda/.footprint
@@ -400,8 +400,8 @@ drwxr-xr-x root/root opt/cuda/extras/CUPTI/include/Openmp/
drwxr-xr-x root/root opt/cuda/extras/CUPTI/lib64/
-rwxr-xr-x root/root opt/cuda/extras/CUPTI/lib64/libcheckpoint.so
lrwxrwxrwx root/root opt/cuda/extras/CUPTI/lib64/libcupti.so -> libcupti.so.11.7
-lrwxrwxrwx root/root opt/cuda/extras/CUPTI/lib64/libcupti.so.11.7 -> libcupti.so.2022.2.0
--rwxr-xr-x root/root opt/cuda/extras/CUPTI/lib64/libcupti.so.2022.2.0
+lrwxrwxrwx root/root opt/cuda/extras/CUPTI/lib64/libcupti.so.11.7 -> libcupti.so.2022.2.1
+-rwxr-xr-x root/root opt/cuda/extras/CUPTI/lib64/libcupti.so.2022.2.1
-rw-r--r-- root/root opt/cuda/extras/CUPTI/lib64/libcupti_static.a
-rwxr-xr-x root/root opt/cuda/extras/CUPTI/lib64/libnvperf_host.so
-rw-r--r-- root/root opt/cuda/extras/CUPTI/lib64/libnvperf_host_static.a
@@ -749,7 +749,7 @@ drwxr-xr-x root/root opt/cuda/extras/compute-sanitizer/x86/
-rwxr-xr-x root/root opt/cuda/extras/compute-sanitizer/x86/libTreeLauncherPlaceholder.so
-rwxr-xr-x root/root opt/cuda/extras/compute-sanitizer/x86/libTreeLauncherTargetInjection.so
-rwxr-xr-x root/root opt/cuda/extras/compute-sanitizer/x86/libTreeLauncherTargetUpdatePreloadInjection.so
--rw-r--r-- root/root opt/cuda/extras/cuda-gdb-11.7.50.src.tar.gz
+-rw-r--r-- root/root opt/cuda/extras/cuda-gdb-11.7.91.src.tar.gz
drwxr-xr-x root/root opt/cuda/extras/demo_suite/
-rwxr-xr-x root/root opt/cuda/extras/demo_suite/bandwidthTest
-rwxr-xr-x root/root opt/cuda/extras/demo_suite/busGrind
@@ -767,6 +767,80 @@ drwxr-xr-x root/root opt/cuda/extras/demo_suite/oceanFFT_data_files/
drwxr-xr-x root/root opt/cuda/extras/demo_suite/randomFog_data_files/
-rw-r--r-- root/root opt/cuda/extras/demo_suite/randomFog_data_files/ref_randomFog.bin
-rwxr-xr-x root/root opt/cuda/extras/demo_suite/vectorAdd
+drwxr-xr-x root/root opt/cuda/gds-11.7/
+-rw-r--r-- root/root opt/cuda/gds-11.7/changelog
+-rw-r--r-- root/root opt/cuda/gds-11.7/copyright
+drwxr-xr-x root/root opt/cuda/gds-tools/
+drwxr-xr-x root/root opt/cuda/gds-tools/usr/
+drwxr-xr-x root/root opt/cuda/gds-tools/usr/local/
+drwxr-xr-x root/root opt/cuda/gds-tools/usr/local/gds/
+drwxr-xr-x root/root opt/cuda/gds-tools/usr/share/
+drwxr-xr-x root/root opt/cuda/gds-tools/usr/share/doc/
+drwxr-xr-x root/root opt/cuda/gds/
+-rw-r--r-- root/root opt/cuda/gds/EULA.txt
+-rw-r--r-- root/root opt/cuda/gds/cufile.json
+drwxr-xr-x root/root opt/cuda/gds/doc/
+-rw-r--r-- root/root opt/cuda/gds/doc/README
+-rw-r--r-- root/root opt/cuda/gds/doc/changelog
+-rw-r--r-- root/root opt/cuda/gds/doc/copyright
+drwxr-xr-x root/root opt/cuda/gds/etc/
+drwxr-xr-x root/root opt/cuda/gds/man/
+drwxr-xr-x root/root opt/cuda/gds/man/man3/
+-rw-r--r-- root/root opt/cuda/gds/man/man3/CUfileDescr_t.3.gz
+-rw-r--r-- root/root opt/cuda/gds/man/man3/CUfileDrvProps.3.gz
+-rw-r--r-- root/root opt/cuda/gds/man/man3/CUfileError.3.gz
+-rw-r--r-- root/root opt/cuda/gds/man/man3/CUfileFSOps.3.gz
+-rw-r--r-- root/root opt/cuda/gds/man/man3/CUfileIOEvents.3.gz
+-rw-r--r-- root/root opt/cuda/gds/man/man3/CUfileIOParams.3.gz
+-rw-r--r-- root/root opt/cuda/gds/man/man3/CUfileOpError.h.3.gz
+-rw-r--r-- root/root opt/cuda/gds/man/man3/cufile.h.3.gz
+-rw-r--r-- root/root opt/cuda/gds/man/man3/cufileRDMAInfo.3.gz
+drwxr-xr-x root/root opt/cuda/gds/samples/
+-rw-r--r-- root/root opt/cuda/gds/samples/Makefile
+-rw-r--r-- root/root opt/cuda/gds/samples/README
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_001.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_002.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_003.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_004.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_005.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_006.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_007.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_008.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_009.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_010.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_011.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_012.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_013.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_014.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_015.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_016.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_017.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_018.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_019.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_020.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_021.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_022.cc
+-rw-r--r-- root/root opt/cuda/gds/samples/cufile_sample_utils.h
+drwxr-xr-x root/root opt/cuda/gds/tools/
+-rw-r--r-- root/root opt/cuda/gds/tools/README
+-rwxr-xr-x root/root opt/cuda/gds/tools/gds_log_collection.py
+-rwxr-xr-x root/root opt/cuda/gds/tools/gds_perf.sh
+-rwxr-xr-x root/root opt/cuda/gds/tools/gds_stats
+-rwxr-xr-x root/root opt/cuda/gds/tools/gdscheck
+-rwxr-xr-x root/root opt/cuda/gds/tools/gdscheck.py
+-rwxr-xr-x root/root opt/cuda/gds/tools/gdscp
+-rwxr-xr-x root/root opt/cuda/gds/tools/gdsio
+-rwxr-xr-x root/root opt/cuda/gds/tools/gdsio_verify
+-rwxr-xr-x root/root opt/cuda/gds/tools/run_gdsio.cfg
+-rw-r--r-- root/root opt/cuda/gds/tools/rw-random_fill.gdsio
+-rw-r--r-- root/root opt/cuda/gds/tools/rw-random_unaligned.gdsio
+-rw-r--r-- root/root opt/cuda/gds/tools/rw-sample.gdsio
+drwxr-xr-x root/root opt/cuda/gds/usr/
+drwxr-xr-x root/root opt/cuda/gds/usr/local/
+drwxr-xr-x root/root opt/cuda/gds/usr/local/gds/
+drwxr-xr-x root/root opt/cuda/gds/usr/share/
+drwxr-xr-x root/root opt/cuda/gds/usr/share/doc/
+drwxr-xr-x root/root opt/cuda/gds/usr/share/man/
lrwxrwxrwx root/root opt/cuda/include -> targets/x86_64-linux/include
drwxr-xr-x root/root opt/cuda/integration/
drwxr-xr-x root/root opt/cuda/integration/Sanitizer/
@@ -791,35 +865,35 @@ drwxr-xr-x root/root opt/cuda/libnvvp/configuration/org.eclipse.update/
-rw-r--r-- root/root opt/cuda/libnvvp/configuration/org.eclipse.update/platform.xml
-rw-r--r-- root/root opt/cuda/libnvvp/epl-v10.html
drwxr-xr-x root/root opt/cuda/libnvvp/features/
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202204060229/
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202204060229/META-INF/
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202204060229/META-INF/MANIFEST.MF
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202204060229/META-INF/maven/
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.cuda.ide/
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.editor.feature/
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.editor.feature/pom.properties
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.editor.feature/pom.xml
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202204060229/feature.xml
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/META-INF/
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/META-INF/MANIFEST.MF
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/META-INF/maven/
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.cuda.ide/
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.remote.feature/
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.remote.feature/pom.properties
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.remote.feature/pom.xml
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/feature.properties
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/feature.xml
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/license.html
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202204060229/
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202204060229/META-INF/
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202204060229/META-INF/MANIFEST.MF
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202204060229/META-INF/maven/
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.viper/
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.viper/com.nvidia.viper.feature/
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.viper/com.nvidia.viper.feature/pom.properties
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.viper/com.nvidia.viper.feature/pom.xml
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202204060229/feature.xml
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202207121854/
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202207121854/META-INF/
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202207121854/META-INF/MANIFEST.MF
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202207121854/META-INF/maven/
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202207121854/META-INF/maven/com.nvidia.cuda.ide/
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202207121854/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.editor.feature/
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202207121854/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.editor.feature/pom.properties
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202207121854/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.editor.feature/pom.xml
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202207121854/feature.xml
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202207121854/
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202207121854/META-INF/
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202207121854/META-INF/MANIFEST.MF
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202207121854/META-INF/maven/
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202207121854/META-INF/maven/com.nvidia.cuda.ide/
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202207121854/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.remote.feature/
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202207121854/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.remote.feature/pom.properties
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202207121854/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.remote.feature/pom.xml
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202207121854/feature.properties
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202207121854/feature.xml
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202207121854/license.html
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202207121854/
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202207121854/META-INF/
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202207121854/META-INF/MANIFEST.MF
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202207121854/META-INF/maven/
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202207121854/META-INF/maven/com.nvidia.viper/
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202207121854/META-INF/maven/com.nvidia.viper/com.nvidia.viper.feature/
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202207121854/META-INF/maven/com.nvidia.viper/com.nvidia.viper.feature/pom.properties
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202207121854/META-INF/maven/com.nvidia.viper/com.nvidia.viper.feature/pom.xml
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202207121854/feature.xml
drwxr-xr-x root/root opt/cuda/libnvvp/features/org.eclipse.e4.rcp_1.3.100.v20140909-1633/
drwxr-xr-x root/root opt/cuda/libnvvp/features/org.eclipse.e4.rcp_1.3.100.v20140909-1633/META-INF/
-rw-r--r-- root/root opt/cuda/libnvvp/features/org.eclipse.e4.rcp_1.3.100.v20140909-1633/META-INF/ECLIPSE_.RSA
@@ -1032,7 +1106,7 @@ drwxr-xr-x root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.core/
drwxr-xr-x root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.core/cache/
-rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.core/cache/artifacts.xml
drwxr-xr-x root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.core/cache/binary/
--rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.core/cache/binary/com.nvidia.viper.application.product.executable.gtk.linux.x86_64_11.7.0.202204060229
+-rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.core/cache/binary/com.nvidia.viper.application.product.executable.gtk.linux.x86_64_11.7.0.202207121854
-rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.platform_root_4.4.0.v20140925-0400
-rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp_root_4.4.0.v20140925-0400
drwxr-xr-x root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/
@@ -1043,25 +1117,25 @@ drwxr-xr-x root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRe
drwxr-xr-x root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/
drwxr-xr-x root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/.data/
-rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/.lock (EMPTY)
--rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/1649212193563.profile.gz
--rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/1649212193587.profile.gz
--rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/1649212195435.profile.gz
--rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/1649212195834.profile.gz
+-rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/1657652109062.profile.gz
+-rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/1657652109092.profile.gz
+-rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/1657652111625.profile.gz
+-rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/1657652112154.profile.gz
drwxr-xr-x root/root opt/cuda/libnvvp/plugins/
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.ibm.icu_52.1.0.v201404241930.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.jcraft.jsch_0.1.50.v201403120620.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.lowagie.text_2.1.7.v201004222200.jar
--rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.common_11.7.0.202204060229.jar
--rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.cuda.ide.editor_11.7.0.202204060229.jar
--rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.cuda.ide.remote.connection_11.7.0.202204060229.jar
+-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.common_11.7.0.202207121854.jar
+-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.cuda.ide.editor_11.7.0.202207121854.jar
+-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.cuda.ide.remote.connection_11.7.0.202207121854.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.help.bpg_11.7.0.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.help.pug_11.7.0.jar
--rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.pgprof.application_11.7.0.202204060229.jar
+-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.pgprof.application_11.7.0.202207121854.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.pgprof.help.pug_11.7.0.jar
--rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.viper.application_11.7.0.202204060229.jar
--rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.viper.birt_11.7.0.202204060229.jar
--rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.viper.help_11.7.0.202204060229.jar
--rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.viper_11.7.0.202204060229.jar
+-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.viper.application_11.7.0.202207121854.jar
+-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.viper.birt_11.7.0.202207121854.jar
+-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.viper.help_11.7.0.202207121854.jar
+-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.viper_11.7.0.202207121854.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.sun.el_2.2.0.v201303151357.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/javax.annotation_1.2.0.v201401042248.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/javax.el_2.2.0.v201303151357.jar
@@ -1330,7 +1404,7 @@ drwxr-xr-x root/root opt/cuda/libnvvp/plugins/org.eclipse.equinox.launcher.gtk.l
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/org.eclipse.jsch.ui_1.1.500.v20131112-1442.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/org.eclipse.ltk.core.refactoring_3.6.101.v20140817-1500.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/org.eclipse.ltk.ui.refactoring_3.7.100.v20140324-1358.jar
--rw-r--r-- root/root opt/cuda/libnvvp/plugins/org.eclipse.nebula.widgets.pshelf_1.0.0.202204060229.jar
+-rw-r--r-- root/root opt/cuda/libnvvp/plugins/org.eclipse.nebula.widgets.pshelf_1.0.0.202207121854.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/org.eclipse.osgi.compatibility.state_1.0.1.v20140709-1414.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/org.eclipse.osgi.services_3.4.0.v20140312-2051.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/org.eclipse.osgi.util_3.3.0.v20131023-1243.jar
@@ -3744,6 +3818,7 @@ drwxr-xr-x root/root opt/cuda/targets/x86_64-linux/include/cuda/std/detail/libcx
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cufft.h
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cufftXt.h
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cufftw.h
+-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cufile.h
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/curand.h
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/curand_discrete.h
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/curand_discrete2.h
@@ -3780,6 +3855,7 @@ drwxr-xr-x root/root opt/cuda/targets/x86_64-linux/include/cuda/std/detail/libcx
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/fatbinary_section.h
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/host_config.h
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/host_defines.h
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/include/include -> targets/x86_64-linux/include
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/library_types.h
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/math_constants.h
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/math_functions.h
@@ -4729,120 +4805,129 @@ drwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/cmake/thrust/
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/cmake/thrust/README.md
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/cmake/thrust/thrust-config-version.cmake
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/cmake/thrust/thrust-config.cmake
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/lib64 -> targets/x86_64-linux/lib
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libOpenCL.so -> libOpenCL.so.1
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libOpenCL.so.1 -> libOpenCL.so.1.0
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libOpenCL.so.1.0 -> libOpenCL.so.1.0.0
-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libOpenCL.so.1.0.0
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libaccinj64.so -> libaccinj64.so.11.7
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libaccinj64.so.11.7 -> libaccinj64.so.11.7.50
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libaccinj64.so.11.7.50
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libaccinj64.so.11.7 -> libaccinj64.so.11.7.101
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libaccinj64.so.11.7.101
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcublas.so -> libcublas.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcublas.so.11 -> ./libcublas.so.11.10.1.25
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcublas.so.11.10.1.25
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcublas.so.11 -> ./libcublas.so.11.10.3.66
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcublas.so.11.10.3.66
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcublasLt.so -> libcublasLt.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcublasLt.so.11 -> ./libcublasLt.so.11.10.1.25
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcublasLt.so.11.10.1.25
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcublasLt.so.11 -> ./libcublasLt.so.11.10.3.66
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcublasLt.so.11.10.3.66
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcublasLt_static.a
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcublas_static.a
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcudadevrt.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcudart.so -> libcudart.so.11.0
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcudart.so.11.0 -> libcudart.so.11.7.60
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcudart.so.11.7.60
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcudart.so.11.0 -> libcudart.so.11.7.99
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcudart.so.11.7.99
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcudart_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcufft.so -> libcufft.so.10
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcufft.so.10 -> libcufft.so.10.7.2.50
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcufft.so.10.7.2.50
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcufft.so.10 -> libcufft.so.10.7.2.91
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcufft.so.10.7.2.91
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcufft_static.a
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcufft_static_nocallback.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcufftw.so -> libcufftw.so.10
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcufftw.so.10 -> libcufftw.so.10.7.2.50
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcufftw.so.10.7.2.50
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcufftw.so.10 -> libcufftw.so.10.7.2.91
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcufftw.so.10.7.2.91
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcufftw_static.a
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcufile.so -> libcufile.so.0
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcufile.so.0 -> libcufile.so.1.3.1
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcufile.so.1.3.1
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcufile_rdma.so -> libcufile_rdma.so.1
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcufile_rdma.so.1 -> libcufile_rdma.so.1.3.1
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcufile_rdma.so.1.3.1
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcufile_rdma_static.a
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcufile_static.a
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcufilt.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcuinj64.so -> libcuinj64.so.11.7
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcuinj64.so.11.7 -> libcuinj64.so.11.7.50
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcuinj64.so.11.7.50
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcuinj64.so.11.7 -> libcuinj64.so.11.7.101
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcuinj64.so.11.7.101
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libculibos.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcurand.so -> libcurand.so.10
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcurand.so.10 -> libcurand.so.10.2.10.50
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcurand.so.10.2.10.50
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcurand.so.10 -> libcurand.so.10.2.10.91
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcurand.so.10.2.10.91
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcurand_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcusolver.so -> libcusolver.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcusolver.so.11 -> libcusolver.so.11.3.5.50
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcusolver.so.11.3.5.50
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcusolver.so.11 -> libcusolver.so.11.4.0.1
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcusolver.so.11.4.0.1
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcusolverMg.so -> libcusolverMg.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcusolverMg.so.11 -> libcusolverMg.so.11.3.5.50
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcusolverMg.so.11.3.5.50
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcusolverMg.so.11 -> libcusolverMg.so.11.4.0.1
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcusolverMg.so.11.4.0.1
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcusolver_lapack_static.a
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcusolver_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcusparse.so -> libcusparse.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcusparse.so.11 -> libcusparse.so.11.7.3.50
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcusparse.so.11.7.3.50
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcusparse.so.11 -> libcusparse.so.11.7.4.91
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcusparse.so.11.7.4.91
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcusparse_static.a
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/liblapack_static.a
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libmetis_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppc.so -> libnppc.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppc.so.11 -> libnppc.so.11.7.3.21
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppc.so.11.7.3.21
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppc.so.11 -> libnppc.so.11.7.4.75
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppc.so.11.7.4.75
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnppc_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppial.so -> libnppial.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppial.so.11 -> libnppial.so.11.7.3.21
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppial.so.11.7.3.21
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppial.so.11 -> libnppial.so.11.7.4.75
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppial.so.11.7.4.75
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnppial_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppicc.so -> libnppicc.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppicc.so.11 -> libnppicc.so.11.7.3.21
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppicc.so.11.7.3.21
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppicc.so.11 -> libnppicc.so.11.7.4.75
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppicc.so.11.7.4.75
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnppicc_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppidei.so -> libnppidei.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppidei.so.11 -> libnppidei.so.11.7.3.21
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppidei.so.11.7.3.21
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppidei.so.11 -> libnppidei.so.11.7.4.75
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppidei.so.11.7.4.75
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnppidei_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppif.so -> libnppif.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppif.so.11 -> libnppif.so.11.7.3.21
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppif.so.11.7.3.21
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppif.so.11 -> libnppif.so.11.7.4.75
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppif.so.11.7.4.75
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnppif_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppig.so -> libnppig.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppig.so.11 -> libnppig.so.11.7.3.21
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppig.so.11.7.3.21
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppig.so.11 -> libnppig.so.11.7.4.75
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppig.so.11.7.4.75
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnppig_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppim.so -> libnppim.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppim.so.11 -> libnppim.so.11.7.3.21
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppim.so.11.7.3.21
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppim.so.11 -> libnppim.so.11.7.4.75
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppim.so.11.7.4.75
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnppim_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppist.so -> libnppist.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppist.so.11 -> libnppist.so.11.7.3.21
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppist.so.11.7.3.21
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppist.so.11 -> libnppist.so.11.7.4.75
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppist.so.11.7.4.75
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnppist_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppisu.so -> libnppisu.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppisu.so.11 -> libnppisu.so.11.7.3.21
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppisu.so.11.7.3.21
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppisu.so.11 -> libnppisu.so.11.7.4.75
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppisu.so.11.7.4.75
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnppisu_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppitc.so -> libnppitc.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppitc.so.11 -> libnppitc.so.11.7.3.21
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppitc.so.11.7.3.21
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppitc.so.11 -> libnppitc.so.11.7.4.75
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppitc.so.11.7.4.75
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnppitc_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnpps.so -> libnpps.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnpps.so.11 -> libnpps.so.11.7.3.21
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnpps.so.11.7.3.21
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnpps.so.11 -> libnpps.so.11.7.4.75
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnpps.so.11.7.4.75
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnpps_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvToolsExt.so -> libnvToolsExt.so.1
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvToolsExt.so.1 -> libnvToolsExt.so.1.0.0
-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnvToolsExt.so.1.0.0
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvblas.so -> libnvblas.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvblas.so.11 -> ./libnvblas.so.11.10.1.25
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnvblas.so.11.10.1.25
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvblas.so.11 -> ./libnvblas.so.11.10.3.66
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnvblas.so.11.10.3.66
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvjpeg.so -> libnvjpeg.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvjpeg.so.11 -> libnvjpeg.so.11.7.2.34
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnvjpeg.so.11.7.2.34
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvjpeg.so.11 -> libnvjpeg.so.11.8.0.2
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnvjpeg.so.11.8.0.2
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnvjpeg_static.a
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnvptxcompiler_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc-builtins.so -> libnvrtc-builtins.so.11.7
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc-builtins.so.11.7 -> libnvrtc-builtins.so.11.7.50
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc-builtins.so.11.7.50
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc-builtins.so.11.7 -> libnvrtc-builtins.so.11.7.99
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc-builtins.so.11.7.99
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc-builtins_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc.so -> libnvrtc.so.11.2
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc.so.11.2 -> libnvrtc.so.11.7.50
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc.so.11.7.50
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc.so.11.2 -> libnvrtc.so.11.7.99
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc.so.11.7.99
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc_static.a
drwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/stubs/
-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/stubs/libcublas.so
@@ -4870,6 +4955,44 @@ drwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/stubs/
-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/stubs/libnvrtc.so
drwxr-xr-x root/root opt/cuda/tools/
-rw-r--r-- root/root opt/cuda/tools/CUDA_Occupancy_Calculator.xls
+drwxr-xr-x root/root opt/cuda/usr/
+drwxr-xr-x root/root opt/cuda/usr/share/
+drwxr-xr-x root/root opt/cuda/usr/share/doc/
+drwxr-xr-x root/root opt/cuda/usr/share/doc/nvidia-fs/
+-rw-r--r-- root/root opt/cuda/usr/share/doc/nvidia-fs/copyright
+drwxr-xr-x root/root opt/cuda/usr/src/
+drwxr-xr-x root/root opt/cuda/usr/src/nvidia-fs-2.12/
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/ChangeLog
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/GDS_VERSION
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/Makefile
+-rwxr-xr-x root/root opt/cuda/usr/src/nvidia-fs-2.12/configure
+-rwxr-xr-x root/root opt/cuda/usr/src/nvidia-fs-2.12/create_nv.symvers.sh
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/dkms.conf
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-batch.c
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-batch.h
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-core.c
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-core.h
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-dma.c
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-dma.h
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-fault.c
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-fault.h
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-kernel-interface.c
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-kernel-interface.h
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-mmap.c
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-mmap.h
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-mod.c
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-p2p.c
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-p2p.h
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-pci.c
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-pci.h
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-proc.c
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-rdma.c
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-rdma.h
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-stat.c
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-stat.h
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/nvfs-vers.h
+drwxr-xr-x root/root opt/cuda/usr/src/nvidia-fs-2.12/tests/
+-rw-r--r-- root/root opt/cuda/usr/src/nvidia-fs-2.12/tests/nvfs-blk-simulation.c
drwxr-xr-x root/root usr/
drwxr-xr-x root/root usr/lib/
drwxr-xr-x root/root usr/lib/pkgconfig/
diff --git a/cuda/.signature b/cuda/.signature
index 70370d84b..13e15e227 100644
--- a/cuda/.signature
+++ b/cuda/.signature
@@ -1,8 +1,8 @@
untrusted comment: verify with /etc/ports/contrib.pub
-RWSagIOpLGJF3yd2qKNTti9gzrtFYPD1VqpqvbhcdMNwp2BFaVK2ErO84gIEklBxGBhoUJ1rL38bk99ynx0mLg8Z++XgTf0xrwA=
-SHA256 (Pkgfile) = f643b045ba93887ced6fd51637b9eaaea695817ba15fd5ed215fc9e34f0db36f
-SHA256 (.footprint) = e1508ba603310f934e45e09b92dc9319dedb83eeaf58aab43aceba2fc33d95b5
-SHA256 (cuda_11.7.0_515.43.04_linux.run) = 087fdfcbba1f79543b1f78e43a8dfdac5f6db242d042dde820e16dc185892f26
+RWSagIOpLGJF36XyY6FdrOQJO3m+oVFCAdqOwfF9Bh6xzcZ3pXM5TtZ2A7S/Q6YuxHYNDQ9mz2FF951SKJBnFeVtlIP9eW3rIAs=
+SHA256 (Pkgfile) = 5682459fc0cfd6b6814b1d05f5f367450c8cfbda071fc07e4f3a7349da5bd26e
+SHA256 (.footprint) = 81b56188b10a7ed3c7df320507bfe51efe77dd98509f9f509f22c85e9b059dc6
+SHA256 (cuda_11.7.1_515.65.01_linux.run) = 52286a29706549b7d0feeb0e7e3eca1b15287c436a69fa880ad385b1be3e04db
SHA256 (cuda.sh) = ab92658d9efa337f12da5b093d9a643c031c6067ffc30abd8e87bd7bedecf0c0
SHA256 (cuda.conf) = a65f7d96e2447eb40b1be9586b90eb0bd776a8938c93d21f9606d2880b548b28
SHA256 (cuda.revdep) = b4beef4ac94f5fb418127b00cca7b011a6804d4e0d0a581986a5a028486aa349
diff --git a/cuda/Pkgfile b/cuda/Pkgfile
index 847c50484..8232db83c 100644
--- a/cuda/Pkgfile
+++ b/cuda/Pkgfile
@@ -4,8 +4,8 @@
# Depends on: nvidia lsb-release
name=cuda
-version=11.7.0
-_driverver=515.43.04
+version=11.7.1
+_driverver=515.65.01
release=1
source=(https://developer.download.nvidia.com/compute/cuda/${version}/local…
cuda.sh cuda.conf $name.revdep
1
0
commit 4945f252146251dfd7e04f1619623f63cbbf42a5
Author: Danny Rawlins <contact(a)romster.me>
Date: Mon Sep 19 08:43:28 2022 +1000
libaom: initial import
diff --git a/libaom/.footprint b/libaom/.footprint
new file mode 100644
index 000000000..905620cb9
--- /dev/null
+++ b/libaom/.footprint
@@ -0,0 +1,23 @@
+drwxr-xr-x root/root usr/
+drwxr-xr-x root/root usr/bin/
+-rwxr-xr-x root/root usr/bin/aomdec
+-rwxr-xr-x root/root usr/bin/aomenc
+drwxr-xr-x root/root usr/include/
+drwxr-xr-x root/root usr/include/aom/
+-rw-r--r-- root/root usr/include/aom/aom.h
+-rw-r--r-- root/root usr/include/aom/aom_codec.h
+-rw-r--r-- root/root usr/include/aom/aom_decoder.h
+-rw-r--r-- root/root usr/include/aom/aom_encoder.h
+-rw-r--r-- root/root usr/include/aom/aom_external_partition.h
+-rw-r--r-- root/root usr/include/aom/aom_frame_buffer.h
+-rw-r--r-- root/root usr/include/aom/aom_image.h
+-rw-r--r-- root/root usr/include/aom/aom_integer.h
+-rw-r--r-- root/root usr/include/aom/aomcx.h
+-rw-r--r-- root/root usr/include/aom/aomdx.h
+drwxr-xr-x root/root usr/lib64/
+-rw-r--r-- root/root usr/lib64/libaom.a
+lrwxrwxrwx root/root usr/lib64/libaom.so -> libaom.so.3
+lrwxrwxrwx root/root usr/lib64/libaom.so.3 -> libaom.so.3.4.0
+-rwxr-xr-x root/root usr/lib64/libaom.so.3.4.0
+drwxr-xr-x root/root usr/lib64/pkgconfig/
+-rw-r--r-- root/root usr/lib64/pkgconfig/aom.pc
diff --git a/libaom/.signature b/libaom/.signature
new file mode 100644
index 000000000..92522db94
--- /dev/null
+++ b/libaom/.signature
@@ -0,0 +1,4 @@
+untrusted comment: verify with /etc/ports/contrib.pub
+RWSagIOpLGJF3xhKwmvF8MBRC1bFbkgTUODpwc4LVSs5fg7L6ISO+nJEfufgLnzTzfQZLWkTL38eNci5up8Z2v1Ik+u2YAybWAU=
+SHA256 (Pkgfile) = 4b20ead3e802cb25e502a2e4bf57c1cd1746894b6158106027eed30539b155e5
+SHA256 (libaom-3.4.0.tar.gz) = bd754b58c3fa69f3ffd29da77de591bd9c26970e3b18537951336d6c0252e354
diff --git a/libaom/Pkgfile b/libaom/Pkgfile
new file mode 100644
index 000000000..b1088a439
--- /dev/null
+++ b/libaom/Pkgfile
@@ -0,0 +1,19 @@
+# Description: Alliance for Open Media video codec
+# URL: https://aomedia.org/
+# Maintainer: Danny Rawlins, crux at romster dot me
+# Depends on: cmake ninja yasm
+
+name=libaom
+version=3.4.0
+release=1
+source=(https://storage.googleapis.com/aom-releases/$name-$version.tar.gz)
+
+build() {
+ cmake -S $name-$version -B build -G Ninja \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DBUILD_SHARED_LIBS=1 \
+ -DENABLE_TESTS=0
+
+ cmake --build build
+ DESTDIR="$PKG" cmake --install build
+}
1
0
commit 5c3d5d99ce20b91e1bc80ff9bb6177b179be96d0
Author: Danny Rawlins <contact(a)romster.me>
Date: Mon Sep 19 08:42:01 2022 +1000
wasi-libc++: 13.0.1 -> 14.0.6
diff --git a/wasi-libc++/.footprint b/wasi-libc++/.footprint
index 1b2192402..7b1726b3e 100644
--- a/wasi-libc++/.footprint
+++ b/wasi-libc++/.footprint
@@ -32,6 +32,9 @@ drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__algorithm/
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__algorithm/generate.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__algorithm/generate_n.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__algorithm/half_positive.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__algorithm/in_in_out_result.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__algorithm/in_in_result.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__algorithm/in_out_result.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__algorithm/includes.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__algorithm/inplace_merge.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__algorithm/is_heap.h
@@ -99,26 +102,117 @@ drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__algorithm/
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__algorithm/unwrap_iter.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__algorithm/upper_bound.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__availability
+drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__bit/
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__bit/bit_cast.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__bit/byteswap.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__bit_reference
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__bits
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__bsd_locale_defaults.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__bsd_locale_fallbacks.h
+drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__charconv/
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__charconv/chars_format.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__charconv/from_chars_result.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__charconv/to_chars_result.h
+drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__chrono/
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__chrono/calendar.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__chrono/convert_to_timespec.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__chrono/duration.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__chrono/file_clock.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__chrono/high_resolution_clock.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__chrono/steady_clock.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__chrono/system_clock.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__chrono/time_point.h
+drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__compare/
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__compare/common_comparison_category.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__compare/compare_partial_order_fallback.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__compare/compare_strong_order_fallback.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__compare/compare_three_way.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__compare/compare_three_way_result.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__compare/compare_weak_order_fallback.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__compare/is_eq.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__compare/ordering.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__compare/partial_order.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__compare/strong_order.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__compare/synth_three_way.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__compare/three_way_comparable.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__compare/weak_order.h
+drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/arithmetic.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/assignable.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/boolean_testable.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/class_or_enum.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/common_reference_with.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/common_with.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/constructible.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/convertible_to.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/copyable.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/derived_from.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/destructible.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/different_from.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/equality_comparable.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/invocable.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/movable.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/predicate.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/regular.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/relation.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/same_as.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/semiregular.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/swappable.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__concepts/totally_ordered.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__config
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__config_site
+drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__coroutine/
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__coroutine/coroutine_handle.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__coroutine/coroutine_traits.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__coroutine/noop_coroutine_handle.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__coroutine/trivial_awaitables.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__cxxabi_config.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__debug
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__errc
+drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__filesystem/
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__filesystem/copy_options.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__filesystem/directory_entry.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__filesystem/directory_iterator.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__filesystem/directory_options.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__filesystem/file_status.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__filesystem/file_time_type.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__filesystem/file_type.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__filesystem/filesystem_error.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__filesystem/operations.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__filesystem/path.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__filesystem/path_iterator.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__filesystem/perm_options.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__filesystem/perms.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__filesystem/recursive_directory_iterator.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__filesystem/space_info.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__filesystem/u8path.h
drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__format/
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__format/format_arg.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__format/format_args.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__format/format_context.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__format/format_error.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__format/format_fwd.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__format/format_parse_context.h
--rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__function_like.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__format/format_string.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__format/format_to_n_result.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__format/formatter.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__format/formatter_bool.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__format/formatter_char.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__format/formatter_floating_point.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__format/formatter_integer.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__format/formatter_integral.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__format/formatter_pointer.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__format/formatter_string.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__format/parser_std_format_spec.h
drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__functional/
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__functional/binary_function.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__functional/binary_negate.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__functional/bind.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__functional/bind_back.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__functional/bind_front.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__functional/binder1st.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__functional/binder2nd.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__functional/compose.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__functional/default_searcher.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__functional/function.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__functional/hash.h
@@ -154,6 +248,7 @@ drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__iterator/
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__iterator/erase_if_container.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__iterator/front_insert_iterator.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__iterator/incrementable_traits.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__iterator/indirectly_comparable.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__iterator/insert_iterator.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__iterator/istream_iterator.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__iterator/istreambuf_iterator.h
@@ -171,9 +266,11 @@ drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__iterator/
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__iterator/reverse_access.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__iterator/reverse_iterator.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__iterator/size.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__iterator/unreachable_sentinel.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__iterator/wrap_iter.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__libcpp_version
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__locale
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__mbstate_t.h
drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__memory/
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__memory/addressof.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__memory/allocation_guard.h
@@ -182,26 +279,79 @@ drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__memory/
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__memory/allocator_traits.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__memory/auto_ptr.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__memory/compressed_pair.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__memory/concepts.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__memory/construct_at.h
--rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__memory/pointer_safety.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__memory/pointer_traits.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__memory/ranges_construct_at.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__memory/ranges_uninitialized_algorithms.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__memory/raw_storage_iterator.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__memory/shared_ptr.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__memory/temporary_buffer.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__memory/uninitialized_algorithms.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__memory/unique_ptr.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__memory/uses_allocator.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__memory/voidify.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__mutex_base
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__node_handle
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__nullptr
+drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__numeric/
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__numeric/accumulate.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__numeric/adjacent_difference.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__numeric/exclusive_scan.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__numeric/gcd_lcm.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__numeric/inclusive_scan.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__numeric/inner_product.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__numeric/iota.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__numeric/midpoint.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__numeric/partial_sum.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__numeric/reduce.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__numeric/transform_exclusive_scan.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__numeric/transform_inclusive_scan.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__numeric/transform_reduce.h
drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__random/
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/bernoulli_distribution.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/binomial_distribution.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/cauchy_distribution.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/chi_squared_distribution.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/clamp_to_integral.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/default_random_engine.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/discard_block_engine.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/discrete_distribution.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/exponential_distribution.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/extreme_value_distribution.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/fisher_f_distribution.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/gamma_distribution.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/generate_canonical.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/geometric_distribution.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/independent_bits_engine.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/is_seed_sequence.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/knuth_b.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/linear_congruential_engine.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/log2.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/lognormal_distribution.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/mersenne_twister_engine.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/negative_binomial_distribution.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/normal_distribution.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/piecewise_constant_distribution.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/piecewise_linear_distribution.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/poisson_distribution.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/random_device.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/ranlux.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/seed_seq.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/shuffle_order_engine.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/student_t_distribution.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/subtract_with_carry_engine.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/uniform_int_distribution.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/uniform_random_bit_generator.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/uniform_real_distribution.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__random/weibull_distribution.h
drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/access.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/all.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/common_view.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/concepts.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/copyable_box.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/counted.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/dangling.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/data.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/drop_view.h
@@ -209,12 +359,20 @@ drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/empty_view.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/enable_borrowed_range.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/enable_view.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/iota_view.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/join_view.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/non_propagating_cache.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/owning_view.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/range_adaptor.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/ref_view.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/reverse_view.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/single_view.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/size.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/subrange.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/take_view.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/transform_view.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/view_interface.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__ranges/views.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__split_buffer
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__std_stream
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__string
@@ -226,7 +384,6 @@ drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__support/fuchsia/
drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__support/ibm/
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__support/ibm/gettod_zos.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__support/ibm/limits.h
--rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__support/ibm/locale_mgmt_aix.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__support/ibm/locale_mgmt_zos.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__support/ibm/nanosleep.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__support/ibm/support.h
@@ -235,8 +392,6 @@ drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__support/musl/
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__support/musl/xlocale.h
drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__support/newlib/
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__support/newlib/xlocale.h
-drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__support/nuttx/
--rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__support/nuttx/xlocale.h
drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__support/openbsd/
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__support/openbsd/xlocale.h
drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__support/solaris/
@@ -250,13 +405,16 @@ drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__support/xlocale/
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__support/xlocale/__nop_locale_mgmt.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__support/xlocale/__posix_l_fallback.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__support/xlocale/__strtonum_fallback.h
+drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__thread/
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__thread/poll_with_backoff.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__thread/timed_backoff_policy.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__threading_support
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__tree
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__tuple
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__undef_macros
drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__utility/
--rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__utility/__decay_copy.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__utility/as_const.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__utility/auto_cast.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__utility/cmp.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__utility/declval.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__utility/exchange.h
@@ -266,9 +424,11 @@ drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__utility/
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__utility/move.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__utility/pair.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__utility/piecewise_construct.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__utility/priority_tag.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__utility/rel_ops.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__utility/swap.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__utility/to_underlying.h
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__utility/transaction.h
drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__variant/
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/__variant/monostate.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/algorithm
@@ -297,6 +457,7 @@ drwxr-xr-x root/root usr/share/wasi-sysroot/include/c++/v1/__variant/
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/complex.h
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/concepts
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/condition_variable
+-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/coroutine
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/csetjmp
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/csignal
-rw-r--r-- root/root usr/share/wasi-sysroot/include/c++/v1/cstdarg
diff --git a/wasi-libc++/.signature b/wasi-libc++/.signature
index 75d3938f1..a2a04099f 100644
--- a/wasi-libc++/.signature
+++ b/wasi-libc++/.signature
@@ -1,9 +1,6 @@
untrusted comment: verify with /etc/ports/contrib.pub
-RWSagIOpLGJF36dCOsCKpnPE4Pkg8WGCnGEiNNlDaICbfIsFHlK4nsK7HI+hFPlx8UfiKDymPOI8REPBia/n0GfE7okfozih1wY=
-SHA256 (Pkgfile) = 3a6d7faf9ee378a493693ce1a9286b4276e5fa4da323e351fe6a74e4d06c49ee
-SHA256 (.footprint) = b55ae7145f987ce4d5c395c3669b92c4d87215a5aec27c8cdcc96416efaa22a5
-SHA256 (llvm-13.0.1.src.tar.xz) = ec6b80d82c384acad2dc192903a6cf2cdbaffb889b84bfb98da9d71e630fc834
-SHA256 (libcxx-13.0.1.src.tar.xz) = 2f446acc00bb7cfb4e866c2fa46d1b6dbf4e7d2ab62e3c3d84e56f7b9e28110f
-SHA256 (libcxxabi-13.0.1.src.tar.xz) = db5fa6093c786051e8b1c85527240924eceb6c95eeff0a2bbc57be8422b3cef1
-SHA256 (WASI.cmake) = e9e87d4781d6a999ee73a1e2c19754de01415124d0cd9746898f5ee7726dc1e1
-SHA256 (wasi-toolchain.cmake) = 52957ee81622bc22adcf0968cbb124a0595fa38e70549a355d42c6e487818edd
+RWSagIOpLGJF33J6jsBeFGPUZg44KC3GHMf/ZRggsiE0OfgHNTXmKlZWrg0fGMXOC2zt+qnbxmbh90nx/iTc/zobQbaTYSfgvQA=
+SHA256 (Pkgfile) = 3b2873d8fdc9c349267510e2ce08c99b8335e137eca8cbf788c413c6c65e621a
+SHA256 (.footprint) = 0ac5b3b40093f86b63989438c7f7471930b1ee4232a10ea4c4486923fe32b4c8
+SHA256 (llvm-project-14.0.6.src.tar.xz) = 8b3cfd7bc695bd6cea0f37f53f0981f34f87496e79e2529874fd03a2f9dd3a8a
+SHA256 (wasi-sdk-16.tar.gz) = 6866ff1c60a498e24d0ab6bf26576621ff8ce22eecb0008cdd5b336801fb5c72
diff --git a/wasi-libc++/Pkgfile b/wasi-libc++/Pkgfile
index 7fd6664d5..1596b7750 100644
--- a/wasi-libc++/Pkgfile
+++ b/wasi-libc++/Pkgfile
@@ -4,85 +4,59 @@
# Depends on: clang wasi-libc wasi-compiler-rt
name=wasi-libc++
-version=13.0.1
+version=14.0.6
+_wasi_sdk_ver=16
release=1
-source=(https://github.com/llvm/llvm-project/releases/download/llvmorg-$version/llvm-$version.src.tar.xz
- https://github.com/llvm/llvm-project/releases/download/llvmorg-$version/lib…
- https://github.com/llvm/llvm-project/releases/download/llvmorg-$version/lib…
- WASI.cmake
- wasi-toolchain.cmake)
+source=(https://github.com/llvm/llvm-project/releases/download/llvmorg-$version/llvm-project-$version.src.tar.xz
+ https://github.com/WebAssembly/wasi-sdk/archive/refs/tags/wasi-sdk-$_wasi_s…)
build() {
- # Platform files have been copied from https://github.com/WebAssembly/wasi-sdk
- mkdir -p cmake/Platform
- cp WASI.cmake cmake/Platform
- mv libcxx-${version}.src libcxx
- mv libcxxabi-${version}.src libcxxabi
- mv llvm-${version}.src llvm
+ cd llvm-project-$version.src
- # Build options are derived from https://github.com/WebAssembly/wasi-sdk/blob/main/Makefile
- # Currently, wasi-sdk requires C++ code be compiled with -fno-exceptions.
- # libc++abi is currently compiled with exception-handling support disabled.
- # https://github.com/WebAssembly/wasi-sdk/issues/52#issuecomment-530619365
- cmake -S libcxx -B build-libcxx -G Ninja \
- -D CMAKE_BUILD_TYPE=Release \
- -D CMAKE_C_COMPILER_WORKS=ON \
- -D CMAKE_CXX_COMPILER_WORKS=ON \
- -D CMAKE_MODULE_PATH="$SRC/cmake" \
- -D CMAKE_TOOLCHAIN_FILE="$SRC/wasi-toolchain.cmake" \
- -D CMAKE_STAGING_PREFIX=/usr/share/wasi-sysroot \
- -D LIBCXX_ENABLE_EXCEPTIONS:BOOL=OFF \
- -D LIBCXX_ENABLE_SHARED:BOOL=OFF \
- -D LIBCXX_ENABLE_THREADS:BOOL=OFF \
- -D LIBCXX_HAS_PTHREAD_API:BOOL=OFF \
- -D LIBCXX_HAS_EXTERNAL_THREAD_API:BOOL=OFF \
- -D LIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF \
- -D LIBCXX_HAS_WIN32_THREAD_API:BOOL=OFF \
- -D LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY:BOOL=OFF \
- -D LIBCXX_ENABLE_FILESYSTEM:BOOL=OFF \
- -D LIBCXX_CXX_ABI=libcxxabi \
- -D LIBCXX_CXX_ABI_INCLUDE_PATHS=libcxxabi/include \
- -D LIBCXX_HAS_MUSL_LIBC:BOOL=ON \
- -D LIBCXX_ABI_VERSION=2 \
- -D WASI_SDK_PREFIX=/usr \
- -D CMAKE_C_FLAGS_RELEASE="-fno-exceptions --sysroot=/usr/share/wasi-sysroot" \
- -D CMAKE_CXX_FLAGS_RELEASE="-fno-exceptions --sysroot=/usr/share/wasi-sysroot" \
- -D LIBCXX_LIBDIR_SUFFIX=/wasm32-wasi
-
- cmake --build build-libcxx
+ mkdir -p build cmake/Platform
+ cp "$SRC"/wasi-sdk-wasi-sdk-$_wasi_sdk_ver/wasi-sdk.cmake build
+ cp "$SRC"/wasi-sdk-wasi-sdk-$_wasi_sdk_ver/cmake/Platform/WASI.cmake cmake/Platform/WASI.cmake
- cmake -S libcxxabi -B build-libcxxabi -G Ninja \
+ cmake -G Ninja -S runtimes -B build \
-D CMAKE_BUILD_TYPE=Release \
- -D CMAKE_C_COMPILER_WORKS=ON \
+ -D CMAKE_C_FLAGS_RELEASE="$CFLAGS -fno-exceptions --sysroot=/usr/share/wasi-sysroot" \
+ -D CMAKE_CXX_FLAGS_RELEASE="$CXXFLAGS -fno-exceptions --sysroot=/usr/share/wasi-sysroot" \
+ -D CMAKE_TOOLCHAIN_FILE=wasi-sdk.cmake \
-D CMAKE_CXX_COMPILER_WORKS=ON \
- -D CMAKE_MODULE_PATH="$SRC/cmake" \
- -D CMAKE_TOOLCHAIN_FILE="$SRC/wasi-toolchain.cmake" \
- -D CMAKE_STAGING_PREFIX=/usr/share/wasi-sysroot \
- -D LIBCXXABI_ENABLE_EXCEPTIONS:BOOL=OFF \
- -D LIBCXXABI_ENABLE_SHARED:BOOL=OFF \
- -D LIBCXXABI_ENABLE_THREADS:BOOL=OFF \
- -D LIBCXXABI_HAS_PTHREAD_API:BOOL=OFF \
- -D LIBCXXABI_HAS_EXTERNAL_THREAD_API:BOOL=OFF \
- -D LIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF \
- -D LIBCXXABI_HAS_WIN32_THREAD_API:BOOL=OFF \
+ -D CMAKE_C_COMPILER_WORKS=ON \
+ -D CMAKE_INSTALL_PREFIX=/usr/share/wasi-sysroot \
+ -D LLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
+ -D LLVM_DEFAULT_TARGET_TRIPLE=wasm32-wasi \
+ -D LIBCXX_ABI_VERSION=2 \
+ -D LIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY=OFF \
+ -D LIBCXX_ENABLE_EXCEPTIONS=OFF \
+ -D LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF \
+ -D LIBCXX_ENABLE_FILESYSTEM=OFF \
+ -D LIBCXX_ENABLE_SHARED=OFF \
+ -D LIBCXX_ENABLE_THREADS=OFF \
+ -D LIBCXX_HAS_EXTERNAL_THREAD_API=OFF \
+ -D LIBCXX_HAS_PTHREAD_API=OFF \
+ -D LIBCXX_HAS_WIN32_THREAD_API=OFF \
+ -D LIBCXX_INCLUDE_TESTS=OFF \
+ -D LIBCXX_LIBDIR_SUFFIX=/wasm32-wasi \
+ -D LIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY=OFF \
+ -D LIBCXXABI_ENABLE_EXCEPTIONS=OFF \
+ -D LIBCXXABI_ENABLE_SHARED=OFF \
+ -D LIBCXXABI_ENABLE_THREADS=OFF \
+ -D LIBCXXABI_HAS_EXTERNAL_THREAD_API=OFF \
+ -D LIBCXXABI_HAS_PTHREAD_API=OFF \
+ -D LIBCXXABI_HAS_WIN32_THREAD_API=OFF \
+ -D LIBCXXABI_INCLUDE_TESTS=OFF \
+ -D LIBCXXABI_LIBDIR_SUFFIX=/wasm32-wasi \
-D LIBCXXABI_SILENT_TERMINATE:BOOL=ON \
- -D LIBCXXABI_ENABLE_PIC:BOOL=OFF \
- -D UNIX:BOOL=ON \
- -D CXX_SUPPORTS_CXX11=ON \
- -D LIBCXXABI_LIBCXX_PATH=libcxx \
- -D LIBCXXABI_LIBCXX_INCLUDES="$SRC/build-libcxx/include/c++/v1" \
- -D WASI_SDK_PREFIX=/usr \
- -D CMAKE_C_FLAGS_RELEASE="-fno-exceptions --sysroot=/usr/share/wasi-sysroot" \
- -D CMAKE_CXX_FLAGS_RELEASE="-fno-exceptions --sysroot=/usr/share/wasi-sysroot" \
- -D LIBCXXABI_LIBDIR_SUFFIX=/wasm32-wasi
-
- cmake --build build-libcxxabi -v
+ -D UNIX=ON \
+ -D WASI_SDK_PREFIX=/usr
- DESTDIR=$PKG cmake --install build-libcxx
- DESTDIR=$PKG cmake --install build-libcxxabi
+ ninja -C build cxx cxxabi
+ DESTDIR="$PKG" ninja -C build install-cxx install-cxxabi
- cd $PKG/usr/share/wasi-sysroot/lib/wasm32-wasi
- for f in *.a; do
+ cd "$PKG"/usr/share/wasi-sysroot/lib/wasm32-wasi
+ for f in *.a; do
/usr/bin/llvm-ranlib $f
/usr/bin/llvm-strip --strip-debug $f
done
diff --git a/wasi-libc++/WASI.cmake b/wasi-libc++/WASI.cmake
deleted file mode 100644
index b49713f1b..000000000
--- a/wasi-libc++/WASI.cmake
+++ /dev/null
@@ -1 +0,0 @@
-set(WASI 1)
diff --git a/wasi-libc++/wasi-toolchain.cmake b/wasi-libc++/wasi-toolchain.cmake
deleted file mode 100644
index 0920f7608..000000000
--- a/wasi-libc++/wasi-toolchain.cmake
+++ /dev/null
@@ -1,29 +0,0 @@
-# Cmake toolchain description file for the Makefile
-
-# This is arbitrary, AFAIK, for now.
-cmake_minimum_required(VERSION 3.4.0)
-
-set(CMAKE_SYSTEM_NAME WASI)
-set(CMAKE_SYSTEM_VERSION 1)
-set(CMAKE_SYSTEM_PROCESSOR wasm32)
-set(triple wasm32-wasi)
-
-if(WIN32)
- set(WASI_HOST_EXE_SUFFIX ".exe")
-else()
- set(WASI_HOST_EXE_SUFFIX "")
-endif()
-
-set(CMAKE_C_COMPILER ${WASI_SDK_PREFIX}/bin/clang${WASI_HOST_EXE_SUFFIX})
-set(CMAKE_CXX_COMPILER ${WASI_SDK_PREFIX}/bin/clang++${WASI_HOST_EXE_SUFFIX})
-set(CMAKE_AR ${WASI_SDK_PREFIX}/bin/llvm-ar${WASI_HOST_EXE_SUFFIX})
-set(CMAKE_RANLIB ${WASI_SDK_PREFIX}/bin/llvm-ranlib${WASI_HOST_EXE_SUFFIX})
-set(CMAKE_C_COMPILER_TARGET ${triple})
-set(CMAKE_CXX_COMPILER_TARGET ${triple})
-
-# Don't look in the sysroot for executables to run during the build
-set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
-# Only look in the sysroot (not in the host paths) for the rest
-set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
-set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
1
0
commit 1da168feda94ea8ab3edceaa33a30358d5ec960a
Author: Danny Rawlins <contact(a)romster.me>
Date: Mon Sep 19 08:36:09 2022 +1000
wasi-libc: 232.3eb02a7 -> 0.20220525
diff --git a/wasi-libc/.signature b/wasi-libc/.signature
index 4ef100ecf..eadbd61a7 100644
--- a/wasi-libc/.signature
+++ b/wasi-libc/.signature
@@ -1,6 +1,6 @@
untrusted comment: verify with /etc/ports/contrib.pub
-RWSagIOpLGJF3xmtMYsjBwA4MEBMYJZXSMuhwNg3ktRmUfWunSFf6ltRdzuNa2twqOTwf6onneRcOgssA0U7tS3iLlSEkNrvJAU=
-SHA256 (Pkgfile) = d4e162ca88b9153044a6d5f2dafd17edc0770358c0700a604ad25a4558a2a96d
+RWSagIOpLGJF3zyWJkTqoWzawjyDieVtxZtyU3fdDVjkcifuMCc9o1lmx3wK4TzKWFIID3CMk/KG7aRfcGOmvG7bFoAk5CUZkAE=
+SHA256 (Pkgfile) = 43d00c4e3ed67ce09e86dfca5d7b8d8096357c1dc8bfd8c1d340ee515f569aeb
SHA256 (.footprint) = c0628cc7294ebe05a3a7f4c43cffc9aa31ac513281cccbd92ba96f4f9c9ea87b
-SHA256 (wasi-libc-232.3eb02a7.tar.gz) = 198ac245d9053d4fb62d8ffeffd34cbf7ecd3d7991fcefbbf2883e4ec6fcda64
-SHA256 (llvm-14.patch) = d058fc91994e3c2a7bde544e356a39acb132fdbc75c9dbfc3c7f245b89f379c8
+SHA256 (wasi-libc-0.20220525.tar.gz) = d6496bf32e60edb355dd0a7c6aabfc67012e1e93d14fb0e94a33d3a30e20fe3d
+SHA256 (no-double-build.patch) = 875fd0131997dfdec737ba7a2df93d6d243def5ad0b60aac6d48fab9c902b464
diff --git a/wasi-libc/Pkgfile b/wasi-libc/Pkgfile
index fc82a78a3..ddeebe9d0 100644
--- a/wasi-libc/Pkgfile
+++ b/wasi-libc/Pkgfile
@@ -4,24 +4,21 @@
# Depends on: clang
name=wasi-libc
-version=232.3eb02a7
-_commit=3eb02a798b3ec0048c39d2ab8b97a70575892a5a
+version=0.20220525
+_commit=30094b6ed05f19cee102115215863d185f2db4f0
release=1
source=(https://github.com/WebAssembly/wasi-libc/archive/$_commit/$name-$ve…
- llvm-14.patch)
+ no-double-build.patch)
build() {
cd $name-$_commit
- patch -p1 -i $SRC/llvm-14.patch
+ patch -p1 -i $SRC/no-double-build.patch
- make \
- WASM_CC=/usr/bin/clang \
- WASM_AR=/usr/bin/llvm-ar \
- WASM_NM=/usr/bin/llvm-nm
-
- install -dm755 $PKG/usr/share
- cp -dr --preserve=mode,timestamp sysroot $PKG/usr/share/wasi-sysroot
+ # Remove bulk memory support
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=1773200#c4
+ make CC=clang BULK_MEMORY_SOURCES=
+ make INSTALL_DIR="$PKG"/usr/share/wasi-sysroot install
cd $PKG/usr/share/wasi-sysroot/lib/wasm32-wasi
for f in *.a; do
diff --git a/wasi-libc/llvm-14.patch b/wasi-libc/llvm-14.patch
deleted file mode 100644
index 769982268..000000000
--- a/wasi-libc/llvm-14.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From c06cecb74c8b7662305235aac10921e81efd602d Mon Sep 17 00:00:00 2001
-From: Mike Hommey <mh(a)glandium.org>
-Date: Fri, 8 Apr 2022 10:38:53 +0900
-Subject: [PATCH] Adjust the Makefile for LLVM 14
-
-Rebased by Danny Rawlins, crux at romster dot me
-
-diff -pruN wasi-libc-3eb02a798b3ec0048c39d2ab8b97a70575892a5a.orig/Makefile wasi-libc-3eb02a798b3ec0048c39d2ab8b97a70575892a5a/Makefile
---- wasi-libc-3eb02a798b3ec0048c39d2ab8b97a70575892a5a.orig/Makefile 2022-04-09 09:44:41.031980458 +0000
-+++ wasi-libc-3eb02a798b3ec0048c39d2ab8b97a70575892a5a/Makefile 2022-04-09 09:48:10.370241521 +0000
-@@ -530,6 +530,7 @@ check-symbols: startup_files libc
- @#
- @# TODO: Undefine __FLOAT128__ for now since it's not in clang 8.0.
- @# TODO: Filter out __FLT16_* for now, as not all versions of clang have these.
-+ @# TODO: Filter out __NO_MATH_ERRNO_ and a few __*WIDTH__ that are new to clang 14.
- $(WASM_CC) $(CFLAGS) "$(SYSROOT_SHARE)/include-all.c" \
- -isystem $(SYSROOT_INC) \
- -std=gnu17 \
-@@ -548,8 +549,11 @@ check-symbols: startup_files libc
- -U__GNUC_PATCHLEVEL__ \
- -U__VERSION__ \
- -U__FLOAT128__ \
-+ -U__NO_MATH_ERRNO__ \
-+ -U__BITINT_MAXWIDTH__ \
- | sed -e 's/__[[:upper:][:digit:]]*_ATOMIC_\([[:upper:][:digit:]_]*\)_LOCK_FREE/__compiler_ATOMIC_\1_LOCK_FREE/' \
- | grep -v '^#define __FLT16_' \
-+ | grep -v '^#define __\(BOOL\|INT_\(LEAST\|FAST\)\(8\|16\|32\|64\)\|INT\|LONG\|LLONG\|SHRT\)_WIDTH__' \
- > "$(SYSROOT_SHARE)/predefined-macros.txt"
-
- # Check that the computed metadata matches the expected metadata.
diff --git a/wasi-libc/no-double-build.patch b/wasi-libc/no-double-build.patch
new file mode 100644
index 000000000..013d3322d
--- /dev/null
+++ b/wasi-libc/no-double-build.patch
@@ -0,0 +1,11 @@
+--- a/Makefile
++++ b/Makefile
+@@ -547,7 +547,7 @@
+ # This ignores whitespace because on Windows the output has CRLF line endings.
+ diff -wur "$(CURDIR)/expected/$(MULTIARCH_TRIPLE)" "$(SYSROOT_SHARE)"
+
+-install: finish
++install:
+ mkdir -p "$(INSTALL_DIR)"
+ cp -r "$(SYSROOT)/lib" "$(SYSROOT)/share" "$(SYSROOT)/include" "$(INSTALL_DIR)"
+
1
0
commit 0a7ce3aa010d7dc52dd490afcd46e1a049d3a9e2
Author: Danny Rawlins <contact(a)romster.me>
Date: Sun Aug 28 21:49:53 2022 +1000
multimc: 0.6.13 -> 0.6.16
diff --git a/multimc/.footprint b/multimc/.footprint
index 67d239391..af789873e 100644
--- a/multimc/.footprint
+++ b/multimc/.footprint
@@ -1,11 +1,14 @@
+drwxr-xr-x root/root etc/
+drwxr-xr-x root/root etc/ld.so.conf.d/
+-rw-r--r-- root/root etc/ld.so.conf.d/multimc5.conf
drwxr-xr-x root/root usr/
drwxr-xr-x root/root usr/bin/
-rwxr-xr-x root/root usr/bin/multimc
drwxr-xr-x root/root usr/lib/
--rwxr-xr-x root/root usr/lib/libMultiMC_iconfix.so
--rwxr-xr-x root/root usr/lib/libMultiMC_nbt++.so
--rwxr-xr-x root/root usr/lib/libMultiMC_quazip.so
--rwxr-xr-x root/root usr/lib/libMultiMC_rainbow.so
+-rwxr-xr-x root/root usr/lib/libLauncher_iconfix.so
+-rwxr-xr-x root/root usr/lib/libLauncher_nbt++.so
+-rwxr-xr-x root/root usr/lib/libLauncher_quazip.so
+-rwxr-xr-x root/root usr/lib/libLauncher_rainbow.so
drwxr-xr-x root/root usr/share/
drwxr-xr-x root/root usr/share/applications/
-rwxr-xr-x root/root usr/share/applications/multimc.desktop
diff --git a/multimc/.signature b/multimc/.signature
index d1836aa39..027cbf32e 100644
--- a/multimc/.signature
+++ b/multimc/.signature
@@ -1,9 +1,12 @@
untrusted comment: verify with /etc/ports/contrib.pub
-RWSagIOpLGJF38S3RLmFugJ4Zdvtbb40TW8pg1JwITzS1SLqk8QnKKOERBbp8qIFBPGV+8G5oINdaxVowhyuY6Z32qsdiqDzhA0=
-SHA256 (Pkgfile) = fdf8bbfeac4a5cf82233ee4d6737b12a83a02111ed273d45e84dcec30fc89d90
-SHA256 (.footprint) = e9a4a28059c35431dcd80a096e8622462fdb3f7691b894c71689653e98fba78c
-SHA256 (MultiMC5-0.6.13.tar.gz) = af083b41bda801c6d2b6639a2b7a8cfa3a472b1b5942a5af485900449343b967
-SHA256 (multimc-3.tar.gz) = ffa60368b1c196859691b637c740f4c60597b2ac47217995082ae8b2a3a9ac18
-SHA256 (multimc-0.6.1.tar.gz) = 36c816e6b1ef8ece52c57dfa9bfda3a23808d0c6c3288b25d8bcf49c7cdb5b07
-SHA256 (quazip-fix-build-with-qt-511.patch) = 83906ae48e7861d149a93cd6ce7c083f52c67dd36589e84668881c8e8de1f868
-SHA256 (modern-java.patch) = 72dd9554a73d78c27ed26004d740be6955fd82e025580890438eac247049e9ae
+RWSagIOpLGJF36pIuPcw6ERf7CGv2Gk2qXB5YFQxT3RS7h0KF7sJEeUG4xlrk833MMQ304YSl+AP4ANt/AmFB2vsUcxxnYR2uA4=
+SHA256 (Pkgfile) = 1bc158ba34dc383e6b857b35c076f706a55fa65f4f44bd10b39395c0990f5b77
+SHA256 (.footprint) = 05132b93040aac25bc12b92e5ec5f7e6016511781a199a70243273ffce5bd50e
+SHA256 (Launcher-0.6.16.tar.gz) = 2ff5a4368a01bf467790667a7a1e7728b4a2639bea2a15b285aa309ff1d8a557
+SHA256 (b1a72ac0bb5a732bf887a535ab75c6f9bedb6b6b.tar.gz) = 4eb37f558f20f728357c955f14788608679745a0711522d0eeca2578fd4c9c13
+SHA256 (dc72a20b7efd304d12af2025223fad07b4b78464.tar.gz) = 2ed9dc824007b4f7b12f807f56c98e1248b8a7aba7eca4838085092958dc1595
+SHA256 (mmc-stable-lin64.tar.gz) = 63a43c5095b099ca780506365b0190fe795d20638e9e74f0363401bbef45ff11
+SHA256 (0001-Readd-lin-system-and-LAUNCHER_LINUX_DATADIR.patch) = 8d882296b58dece4f09f629ba88a1a54c23911abb26055f4a1fdadd1d0cb61b3
+SHA256 (fix-jars.patch) = 981cffbafc1827e427b3b86f7dcbbb836d179ef7cd0c6d4a4da92fef562d2c01
+SHA256 (mmc-brand.patch) = eb5a56bf2b9f7e9e1892bc30cb7d7820137cba4296a177a6cfe74fb6eae8e854
+SHA256 (multimc.desktop) = 6d12903a5630c9ff7aa35769566f29a8b4b591024cc61be826f4a3b1e8bea3bc
diff --git a/multimc/0001-Readd-lin-system-and-LAUNCHER_LINUX_DATADIR.patch b/multimc/0001-Readd-lin-system-and-LAUNCHER_LINUX_DATADIR.patch
new file mode 100644
index 000000000..18e488b60
--- /dev/null
+++ b/multimc/0001-Readd-lin-system-and-LAUNCHER_LINUX_DATADIR.patch
@@ -0,0 +1,75 @@
+From 27e3d0174139b99da9e6afad1ba6fffff95ff3a9 Mon Sep 17 00:00:00 2001
+From: Miko <mikoxyzzz(a)gmail.com>
+Date: Sat, 20 Nov 2021 20:10:36 +0100
+Subject: [PATCH] Readd "lin-system" and LAUNCHER_LINUX_DATADIR
+
+During the debranding of MultiMC, peterix removed the "lin-system"
+layout and LAUNCHER_LINUX_DATADIR (previously known as
+MULTIMC_LINUX_DATADIR.) This patch reverts those two changes.
+
+Signed-off-by: Miko <mikoxyzzz(a)gmail.com>
+---
+ CMakeLists.txt | 20 ++++++++++++++++++--
+ launcher/Application.cpp | 8 +++++++-
+ 2 files changed, 25 insertions(+), 3 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 0cf93758..2fc38b59 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -140,8 +140,8 @@ endif()
+ ####################################### Install layout #######################################
+
+ # How to install the build results
+-set(Launcher_LAYOUT "auto" CACHE STRING "The layout for the launcher installation (auto, win-bundle, lin-nodeps, mac-bundle)")
+-set_property(CACHE Launcher_LAYOUT PROPERTY STRINGS auto win-bundle lin-nodeps mac-bundle)
++set(Launcher_LAYOUT "auto" CACHE STRING "The layout for the launcher installation (auto, win-bundle, lin-nodeps, lin-system, mac-bundle)")
++set_property(CACHE Launcher_LAYOUT PROPERTY STRINGS auto win-bundle lin-nodeps lin-system mac-bundle)
+
+ if(Launcher_LAYOUT STREQUAL "auto")
+ if(UNIX AND APPLE)
+@@ -206,6 +206,22 @@ elseif(Launcher_LAYOUT_REAL STREQUAL "lin-nodeps")
+ configure_file(launcher/Launcher.in "${CMAKE_CURRENT_BINARY_DIR}/LauncherScript" @ONLY)
+ install(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/LauncherScript" DESTINATION ${BUNDLE_DEST_DIR} RENAME ${Launcher_Name})
+
++elseif(Launcher_LAYOUT_REAL STREQUAL "lin-system")
++ set(Launcher_APP_BINARY_NAME "devlauncher" CACHE STRING "Name of the Launcher binary")
++ set(Launcher_BINARY_DEST_DIR "bin" CACHE STRING "Path to the binary directory")
++ set(Launcher_LIBRARY_DEST_DIR "lib${LIB_SUFFIX}" CACHE STRING "Path to the library directory")
++ set(Launcher_SHARE_DEST_DIR "share/devlauncher" CACHE STRING "Path to the shard data directory")
++ set(JARS_DEST_DIR "${Launcher_SHARE_DEST_DIR}/jars")
++
++ set(BINARY_DEST_DIR ${Launcher_BINARY_DEST_DIR})
++ set(LIBRARY_DEST_DIR ${Launcher_LIBRARY_DEST_DIR})
++
++ MESSAGE(STATUS "Compiling for linux system with ${Launcher_SHARE_DEST_DIR} and LAUNCHER_LINUX_DATADIR")
++ SET(Launcher_APP_BINARY_DEFS "-DMULTIMC_JARS_LOCATION=${CMAKE_INSTALL_PREFIX}/${JARS_DEST_DIR}" "-DLAUNCHER_LINUX_DATADIR")
++
++ # install as bundle with no dependencies included
++ set(INSTALL_BUNDLE "nodeps")
++
+ elseif(Launcher_LAYOUT_REAL STREQUAL "win-bundle")
+ set(BINARY_DEST_DIR ".")
+ set(LIBRARY_DEST_DIR ".")
+diff --git a/launcher/Application.cpp b/launcher/Application.cpp
+index 8789d096..6ef64762 100644
+--- a/launcher/Application.cpp
++++ b/launcher/Application.cpp
+@@ -304,7 +304,13 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
+ }
+ else
+ {
+-#if defined(Q_OS_MAC)
++#ifdef LAUNCHER_LINUX_DATADIR
++ QString xdgDataHome = QFile::decodeName(qgetenv("XDG_DATA_HOME"));
++ if (xdgDataHome.isEmpty())
++ xdgDataHome = QDir::homePath() + QLatin1String("/.local/share");
++ dataPath = xdgDataHome + "/multimc";
++ adjustedBy += "XDG standard " + dataPath;
++#elif defined(Q_OS_MAC)
+ QDir foo(FS::PathCombine(applicationDirPath(), "../../Data"));
+ dataPath = foo.absolutePath();
+ adjustedBy += "Fallback to special Mac location " + dataPath;
+--
+2.34.0
+
diff --git a/multimc/Pkgfile b/multimc/Pkgfile
index b4f0b45bd..79c44e22a 100644
--- a/multimc/Pkgfile
+++ b/multimc/Pkgfile
@@ -1,54 +1,74 @@
# Description: Minecraft launcher with ability to manage multiple instances.
# URL: https://multimc.org/
# Maintainer: Danny Rawlins, crux at romster dot me
-# Depends on: openjdk11-jdk qt5
+# Depends on: openjdk17-jdk qt5
name=multimc
-version=0.6.13
+_pkgname=multimc
+version=0.6.16
release=1
-source=(https://github.com/MultiMC/MultiMC5/archive/$version/MultiMC5-$version.tar.gz
- https://github.com/MultiMC/quazip/archive/multimc-3.tar.gz
- https://github.com/MultiMC/libnbtplusplus/archive/multimc-0.6.1.tar.gz
- quazip-fix-build-with-qt-511.patch
- modern-java.patch)
+source=(#https://github.com/MultiMC/Launcher/archive/refs/tags/0.6.16.tar.gz
+ https://github.com/MultiMC/Launcher/archive/$version/Launcher-$version.tar.…
+ https://github.com/MultiMC/quazip/archive/b1a72ac0bb5a732bf887a535ab75c6f9b…
+ #https://github.com/MultiMC/quazip/archive/multimc-3.tar.gz
+ #https://github.com/MultiMC/libnbtplusplus/archive/multimc-0.6.1.tar.gz
+ https://github.com/MultiMC/libnbtplusplus/archive/dc72a20b7efd304d12af20252…
+ "https://files.multimc.org/downloads/mmc-stable-lin64.tar.gz"
+ "0001-Readd-lin-system-and-LAUNCHER_LINUX_DATADIR.patch"
+ "fix-jars.patch"
+ "mmc-brand.patch"
+ "multimc.desktop"
+)
build() {
- cd MultiMC5-$version
+ cd Launcher-$version
- rmdir libraries/libnbtplusplus
- rmdir libraries/quazip
- ln -sfT $SRC/libnbtplusplus-multimc-0.6.1/ libraries/libnbtplusplus
- ln -sfT $SRC/quazip-multimc-3/ libraries/quazip
+ patch -p1 < "${SRC}/0001-Readd-lin-system-and-LAUNCHER_LINUX_DATADIR.patch"
+ patch -p1 < "${SRC}/fix-jars.patch"
+ patch -p1 < "${SRC}/mmc-brand.patch"
- # https://github.com/MultiMC/quazip/pull/1
- patch -d libraries/quazip -p1 -i $SRC/quazip-fix-build-with-qt-511.patch
+ # generate microsoft client id (https://aur.archlinux.org/packages/multimc-git)
+ pushd ${SRC}/MultiMC/bin
+ local client_id_asm=$(objdump -j '.text' --no-show-raw-insn -C --disassemble='Secrets::getMSAClientID(unsigned char)' MultiMC)
+ local client_id="$(grep -oP '[a-z0-9]{2}(?=,%r[89]d)' <<< ${client_id_asm} | tac | tr -d '\n')$(grep -oP '(push.+0x)\K[a-z0-9]{2}' <<< ${client_id_asm} | tac | tr -d '\n')"
+ client_id="${client_id:0:8}-${client_id:8:4}-${client_id:12:4}-${client_id:16:4}-${client_id:20}"
+ popd
+ sed -i 's/""/"'"${client_id}"'"/g' notsecrets/Secrets.cpp
- patch -p1 -i $SRC/modern-java.patch
+ rmdir libraries/libnbtplusplus
+ rmdir libraries/quazip
+ ln -sfT $SRC/libnbtplusplus-dc72a20b7efd304d12af2025223fad07b4b78464/ libraries/libnbtplusplus
+ ln -sfT $SRC/quazip-b1a72ac0bb5a732bf887a535ab75c6f9bedb6b6b/ libraries/quazip
- export JAVA_HOME="/usr/lib/java/openjdk11-jdk/"
+ export JAVA_HOME="/usr/lib/java/openjdk17-jdk/"
mkdir -p build
cd build
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
- -DMultiMC_UPDATER=OFF \
-DCMAKE_INSTALL_PREFIX="/usr" \
- -DMultiMC_LAYOUT=lin-system \
- -DMultiMC_NOTIFICATION_URL:STRING=http://files.multimc.org/notifications.json
+ -DLauncher_LAYOUT=lin-system \
+ -DLauncher_APP_BINARY_NAME="${_pkgname}" \
+ -DLauncher_SHARE_DEST_DIR="share/${_pkgname}" \
+ -DLauncher_LIBRARAY_DEST_DIR="lib/${_pkgname}"
make
make DESTDIR=$PKG install
- install -D $SRC/MultiMC5-$version/launcher/resources/multimc/scalable/multimc.svg \
+ mkdir -p "${PKG}/etc/ld.so.conf.d"
+ echo -e "/usr/lib/${_pkgname}" > "${PKG}/etc/ld.so.conf.d/multimc5.conf"
+
+
+ install -D $SRC/Launcher-$version/launcher/package/ubuntu/multimc/opt/multimc/icon.svg \
$PKG/usr/share/pixmaps/multimc.svg
- install -D $SRC/MultiMC5-$version/launcher/package/linux/multimc.desktop \
+ install -D $SRC/multimc.desktop \
$PKG/usr/share/applications/multimc.desktop
- install -D $SRC/MultiMC5-$version/build/libMultiMC_quazip.so \
- $PKG/usr/lib/libMultiMC_quazip.so
+# install -D $SRC/Launcher-$version/build/libMultiMC_quazip.so \
+# $PKG/usr/lib/libMultiMC_quazip.so
- install -D $SRC/MultiMC5-$version/build/libMultiMC_nbt++.so \
- $PKG/usr/lib/libMultiMC_nbt++.so
+# install -D $SRC/Launcher-$version/build/libMultiMC_nbt++.so \
+# $PKG/usr/lib/libMultiMC_nbt++.so
}
diff --git a/multimc/fix-jars.patch b/multimc/fix-jars.patch
new file mode 100644
index 000000000..3d60d9dad
--- /dev/null
+++ b/multimc/fix-jars.patch
@@ -0,0 +1,15 @@
+diff --git a/launcher/Application.cpp b/launcher/Application.cpp
+index 2d0c81bb..74f250fb 100644
+--- a/launcher/Application.cpp
++++ b/launcher/Application.cpp
+@@ -524,6 +524,10 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
+ FS::updateTimestamp(m_rootPath);
+ #endif
+
++#ifdef MULTIMC_JARS_LOCATION
++ m_jarsPath = TOSTRING(MULTIMC_JARS_LOCATION);
++#endif
++
+ qDebug() << BuildConfig.LAUNCHER_DISPLAYNAME << ", (c) 2013-2021 " << BuildConfig.LAUNCHER_COPYRIGHT;
+ qDebug() << "Version : " << BuildConfig.printableVersionString();
+ qDebug() << "Git commit : " << BuildConfig.GIT_COMMIT;
diff --git a/multimc/mmc-brand.patch b/multimc/mmc-brand.patch
new file mode 100644
index 000000000..4685c6589
--- /dev/null
+++ b/multimc/mmc-brand.patch
@@ -0,0 +1,35 @@
+diff --git a/launcher/resources/multimc/multimc.qrc b/launcher/resources/multimc/multimc.qrc
+index 5b36cb3d..f2322279 100644
+--- a/launcher/resources/multimc/multimc.qrc
++++ b/launcher/resources/multimc/multimc.qrc
+@@ -282,6 +282,9 @@
+ <file>32x32/instances/herobrine.png</file>
+ <file>128x128/instances/herobrine.png</file>
+
++ <file>32x32/instances/infinity.png</file>
++ <file>128x128/instances/infinity.png</file>
++
+ <file>32x32/instances/magitech.png</file>
+ <file>128x128/instances/magitech.png</file>
+
+diff --git a/notsecrets/CMakeLists.txt b/notsecrets/CMakeLists.txt
+index b5dd3cf8..3abd8002 100644
+--- a/notsecrets/CMakeLists.txt
++++ b/notsecrets/CMakeLists.txt
+@@ -3,14 +3,14 @@ target_link_libraries(secrets Qt5::Core)
+ target_compile_definitions(secrets PUBLIC -DEMBED_SECRETS)
+ target_include_directories(secrets PUBLIC .)
+
+-set(Launcher_CommonName "DevLauncher")
++set(Launcher_CommonName "MultiMC")
+
+ set(Launcher_Copyright "MultiMC Contributors" PARENT_SCOPE)
+ set(Launcher_Domain "multimc.org" PARENT_SCOPE)
+ set(Launcher_Name "${Launcher_CommonName}" PARENT_SCOPE)
+ set(Launcher_DisplayName "${Launcher_CommonName} 5" PARENT_SCOPE)
+ set(Launcher_UserAgent "${Launcher_CommonName}/5.0" PARENT_SCOPE)
+-set(Launcher_ConfigFile "devlauncher.cfg" PARENT_SCOPE)
++set(Launcher_ConfigFile "multimc.cfg" PARENT_SCOPE)
+ set(Launcher_Git "https://github.com/MultiMC/Launcher" PARENT_SCOPE)
+
+ set(Launcher_Branding_ICNS "notsecrets/Launcher.icns" PARENT_SCOPE)
diff --git a/multimc/multimc.desktop b/multimc/multimc.desktop
new file mode 100644
index 000000000..c25be047f
--- /dev/null
+++ b/multimc/multimc.desktop
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Version=1.0
+Name=MultiMC
+GenericName=Minecraft Launcher
+Comment=Free, open source launcher and instance manager for Minecraft.
+Type=Application
+Terminal=false
+Exec=multimc
+Icon=multimc
+Categories=Game
+Keywords=game;minecraft;
1
0
commit dba6d798f2645fce23b4e81edb6714bb9772507b
Author: Danny Rawlins <contact(a)romster.me>
Date: Sun Aug 28 21:46:56 2022 +1000
firefox: 102.0 -> 104.0
diff --git a/firefox/.signature b/firefox/.signature
index 09e6f6100..d484ab345 100644
--- a/firefox/.signature
+++ b/firefox/.signature
@@ -1,7 +1,6 @@
untrusted comment: verify with /etc/ports/contrib.pub
-RWSagIOpLGJF37z+SMLYSsJfpoR0MPmQP5w4KGamQMw7yD148Ai20C+8WrBjdalG3n6dtI9326N+DuLPmp6+WTlIEDPmdeSJIwo=
-SHA256 (Pkgfile) = e5863d4ca7a5757b3b3dfcc6f03d5771ad555ffdfa8a23268f940a6f74192216
+RWSagIOpLGJF30xCrWcuIMa3tkXZP1B3Dqb29EHWs/kqMsH7YK0KMXkcES3nBZgVLDB4zmfXHb8Ms6oVNNfc2WrTy4fCXdhzqwc=
+SHA256 (Pkgfile) = 0d67ca9b24d62da678ad9f6e887e6cbe01e5dd4cf89b0971682267f28f7d4619
SHA256 (.footprint) = c8226cc240304363b6289982601426f70c5cd4e82ac62feff3485bee4f48e050
-SHA256 (firefox-102.0.source.tar.xz) = 01797f04bd8d65f4c7f628d7ce832bf52a0874433886e4d0d78ef33c1ca66abf
+SHA256 (firefox-104.0.source.tar.xz) = 1a294a651dc6260f9a72a3ab9f10e7792a4ab41a9cfa8527ad3dd9979cdc98ce
SHA256 (firefox.desktop) = 8ba3439f3dfc5cab883641969c93d8d15f8f20d7188d9568346b2edad52d6f91
-SHA256 (fix-ftbfs-newer-cbindgen.patch) = d3ea2503dff0a602bb058153533ebccd8232e8aac1dc82437a55d724b8d22bc2
diff --git a/firefox/Pkgfile b/firefox/Pkgfile
index 19b6d93f1..dc939afdf 100644
--- a/firefox/Pkgfile
+++ b/firefox/Pkgfile
@@ -1,21 +1,18 @@
# Description: The Mozilla Firefox browser with Alsa support
# URL: https://www.mozilla.com/firefox/
# Maintainer: Danny Rawlins, crux at romster dot me
-# Depends on: alsa-lib autoconf-2.13 brotli cbindgen dbus-glib ffmpeg4 libevent libidl libnotify libvpx libwebp libxkbcommon lld nodejs nss unzip wasi-libc++ xorg-libxcomposite xorg-libxcursor xorg-libxinerama xorg-libxt zip
+# Depends on: alsa-lib autoconf-2.13 brotli cbindgen dbus-glib ffmpeg4 libevent libnotify libvpx libwebp libxkbcommon lld nodejs nss unzip wasi-libc++ xorg-libxcomposite xorg-libxcursor xorg-libxinerama xorg-libxt zip
# Optional: sccache jack
name=firefox
-version=102.0
+version=104.0
release=1
source=(https://archive.mozilla.org/pub/firefox/releases/$version/source/$n…
- firefox.desktop
- fix-ftbfs-newer-cbindgen.patch)
+ firefox.desktop)
build() {
cd $name-$version
- patch -p1 -i $SRC/fix-ftbfs-newer-cbindgen.patch
-
if [ "$(/usr/bin/python3 -c "import sys; print(sys.stdout.encoding)")" != 'utf-8' ]; then
printf "\e[031mError: set an UTF-8 locale to compile this!\033[0m\n"
exit 1
1
0
commit 008ecfebf8ebbd9e75364a3c66ca715e63a6dd0c
Author: Danny Rawlins <contact(a)romster.me>
Date: Sun Aug 28 21:46:24 2022 +1000
cuda: 11.6.2 -> 11.7.0
diff --git a/cuda/.footprint b/cuda/.footprint
index e7b1cd16e..f1c345a7a 100644
--- a/cuda/.footprint
+++ b/cuda/.footprint
@@ -22,6 +22,7 @@ drwxr-xr-x root/root opt/cuda/bin/crt/
-rwxr-xr-x root/root opt/cuda/bin/cuda-gdb
-rwxr-xr-x root/root opt/cuda/bin/cuda-gdbserver
-rwxr-xr-x root/root opt/cuda/bin/cuda-memcheck
+-rwxr-xr-x root/root opt/cuda/bin/cuda-uninstaller
-rwxr-xr-x root/root opt/cuda/bin/cudafe++
-rwxr-xr-x root/root opt/cuda/bin/cuobjdump
-rwxr-xr-x root/root opt/cuda/bin/fatbinary
@@ -112,12 +113,11 @@ drwxr-xr-x root/root opt/cuda/extras/CUPTI/doc/Cupti/
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/index.html
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/modules.html
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/notices-header.html
--rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/r_changelog.html
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/r_library_support.html
--rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/r_limitations.html
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/r_main.html
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/r_overview.html
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/r_special_configurations.html
+-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/release_notes.html
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/structBufferInfo.html
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/structCUPTI_1_1PcSamplingUtil_1_1CUptiUtil__GetBufferInfoParams.html
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/structCUPTI_1_1PcSamplingUtil_1_1CUptiUtil__GetHeaderDataParams.html
@@ -145,6 +145,7 @@ drwxr-xr-x root/root opt/cuda/extras/CUPTI/doc/Cupti/
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/structCUpti__ActivityGlobalAccess.html
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/structCUpti__ActivityGlobalAccess2.html
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/structCUpti__ActivityGlobalAccess3.html
+-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/structCUpti__ActivityGraphTrace.html
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/structCUpti__ActivityInstantaneousEvent.html
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/structCUpti__ActivityInstantaneousEventInstance.html
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/structCUpti__ActivityInstantaneousMetric.html
@@ -157,6 +158,7 @@ drwxr-xr-x root/root opt/cuda/extras/CUPTI/doc/Cupti/
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/structCUpti__ActivityKernel4.html
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/structCUpti__ActivityKernel5.html
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/structCUpti__ActivityKernel6.html
+-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/structCUpti__ActivityKernel7.html
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/structCUpti__ActivityMarker.html
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/structCUpti__ActivityMarker2.html
-rw-r--r-- root/root opt/cuda/extras/CUPTI/doc/Cupti/structCUpti__ActivityMarkerData.html
@@ -397,9 +399,9 @@ drwxr-xr-x root/root opt/cuda/extras/CUPTI/include/Openmp/
-rw-r--r-- root/root opt/cuda/extras/CUPTI/include/nvperf_target.h
drwxr-xr-x root/root opt/cuda/extras/CUPTI/lib64/
-rwxr-xr-x root/root opt/cuda/extras/CUPTI/lib64/libcheckpoint.so
-lrwxrwxrwx root/root opt/cuda/extras/CUPTI/lib64/libcupti.so -> libcupti.so.11.6
-lrwxrwxrwx root/root opt/cuda/extras/CUPTI/lib64/libcupti.so.11.6 -> libcupti.so.2022.1.1
--rwxr-xr-x root/root opt/cuda/extras/CUPTI/lib64/libcupti.so.2022.1.1
+lrwxrwxrwx root/root opt/cuda/extras/CUPTI/lib64/libcupti.so -> libcupti.so.11.7
+lrwxrwxrwx root/root opt/cuda/extras/CUPTI/lib64/libcupti.so.11.7 -> libcupti.so.2022.2.0
+-rwxr-xr-x root/root opt/cuda/extras/CUPTI/lib64/libcupti.so.2022.2.0
-rw-r--r-- root/root opt/cuda/extras/CUPTI/lib64/libcupti_static.a
-rwxr-xr-x root/root opt/cuda/extras/CUPTI/lib64/libnvperf_host.so
-rw-r--r-- root/root opt/cuda/extras/CUPTI/lib64/libnvperf_host_static.a
@@ -439,6 +441,10 @@ drwxr-xr-x root/root opt/cuda/extras/CUPTI/samples/cuda_memory_trace/
-rw-r--r-- root/root opt/cuda/extras/CUPTI/samples/cuda_memory_trace/Makefile
-rw-r--r-- root/root opt/cuda/extras/CUPTI/samples/cuda_memory_trace/cuda_memory_trace.cpp
-rw-r--r-- root/root opt/cuda/extras/CUPTI/samples/cuda_memory_trace/memory_trace.cu
+drwxr-xr-x root/root opt/cuda/extras/CUPTI/samples/cupti_correlation/
+-rw-r--r-- root/root opt/cuda/extras/CUPTI/samples/cupti_correlation/Makefile
+-rw-r--r-- root/root opt/cuda/extras/CUPTI/samples/cupti_correlation/cupti_correlation.cpp
+-rw-r--r-- root/root opt/cuda/extras/CUPTI/samples/cupti_correlation/vec.cu
drwxr-xr-x root/root opt/cuda/extras/CUPTI/samples/cupti_external_correlation/
-rw-r--r-- root/root opt/cuda/extras/CUPTI/samples/cupti_external_correlation/Makefile
-rw-r--r-- root/root opt/cuda/extras/CUPTI/samples/cupti_external_correlation/cupti_external_correlation.cpp
@@ -457,6 +463,9 @@ drwxr-xr-x root/root opt/cuda/extras/CUPTI/samples/cupti_nvtx/
drwxr-xr-x root/root opt/cuda/extras/CUPTI/samples/cupti_query/
-rw-r--r-- root/root opt/cuda/extras/CUPTI/samples/cupti_query/Makefile
-rw-r--r-- root/root opt/cuda/extras/CUPTI/samples/cupti_query/cupti_query.cpp
+drwxr-xr-x root/root opt/cuda/extras/CUPTI/samples/cupti_trace_injection/
+-rw-r--r-- root/root opt/cuda/extras/CUPTI/samples/cupti_trace_injection/Makefile
+-rw-r--r-- root/root opt/cuda/extras/CUPTI/samples/cupti_trace_injection/cupti_trace_injection.cpp
drwxr-xr-x root/root opt/cuda/extras/CUPTI/samples/event_multi_gpu/
-rw-r--r-- root/root opt/cuda/extras/CUPTI/samples/event_multi_gpu/Makefile
-rw-r--r-- root/root opt/cuda/extras/CUPTI/samples/event_multi_gpu/event_multi_gpu.cu
@@ -540,6 +549,8 @@ drwxr-xr-x root/root opt/cuda/extras/compute-sanitizer/docs/ComputeSanitizer/
drwxr-xr-x root/root opt/cuda/extras/compute-sanitizer/docs/ComputeSanitizer/graphics/
-rw-r--r-- root/root opt/cuda/extras/compute-sanitizer/docs/ComputeSanitizer/graphics/no-padding.png
-rw-r--r-- root/root opt/cuda/extras/compute-sanitizer/docs/ComputeSanitizer/graphics/padding.png
+-rw-r--r-- root/root opt/cuda/extras/compute-sanitizer/docs/ComputeSanitizer/graphics/use-after-free.png
+-rw-r--r-- root/root opt/cuda/extras/compute-sanitizer/docs/ComputeSanitizer/graphics/use-before-alloc.png
-rw-r--r-- root/root opt/cuda/extras/compute-sanitizer/docs/ComputeSanitizer/index.html
drwxr-xr-x root/root opt/cuda/extras/compute-sanitizer/docs/CopyrightAndLicenses/
-rw-r--r-- root/root opt/cuda/extras/compute-sanitizer/docs/CopyrightAndLicenses/index.html
@@ -575,6 +586,7 @@ drwxr-xr-x root/root opt/cuda/extras/compute-sanitizer/docs/SanitizerApi/
-rw-r--r-- root/root opt/cuda/extras/compute-sanitizer/docs/SanitizerApi/notices-header.html
-rw-r--r-- root/root opt/cuda/extras/compute-sanitizer/docs/SanitizerApi/structSanitizer__BatchMemopData.html
-rw-r--r-- root/root opt/cuda/extras/compute-sanitizer/docs/SanitizerApi/structSanitizer__CallbackData.html
+-rw-r--r-- root/root opt/cuda/extras/compute-sanitizer/docs/SanitizerApi/structSanitizer__EventData.html
-rw-r--r-- root/root opt/cuda/extras/compute-sanitizer/docs/SanitizerApi/structSanitizer__GraphExecData.html
-rw-r--r-- root/root opt/cuda/extras/compute-sanitizer/docs/SanitizerApi/structSanitizer__GraphNodeLaunchData.html
-rw-r--r-- root/root opt/cuda/extras/compute-sanitizer/docs/SanitizerApi/structSanitizer__LaunchData.html
@@ -582,6 +594,7 @@ drwxr-xr-x root/root opt/cuda/extras/compute-sanitizer/docs/SanitizerApi/
-rw-r--r-- root/root opt/cuda/extras/compute-sanitizer/docs/SanitizerApi/structSanitizer__MemsetData.html
-rw-r--r-- root/root opt/cuda/extras/compute-sanitizer/docs/SanitizerApi/structSanitizer__ResourceArrayData.html
-rw-r--r-- root/root opt/cuda/extras/compute-sanitizer/docs/SanitizerApi/structSanitizer__ResourceContextData.html
+-rw-r--r-- root/root opt/cuda/extras/compute-sanitizer/docs/SanitizerApi/structSanitizer__ResourceFunctionData.html
-rw-r--r-- root/root opt/cuda/extras/compute-sanitizer/docs/SanitizerApi/structSanitizer__ResourceMemoryData.html
-rw-r--r-- root/root opt/cuda/extras/compute-sanitizer/docs/SanitizerApi/structSanitizer__ResourceMempoolData.html
-rw-r--r-- root/root opt/cuda/extras/compute-sanitizer/docs/SanitizerApi/structSanitizer__ResourceModuleData.html
@@ -736,7 +749,7 @@ drwxr-xr-x root/root opt/cuda/extras/compute-sanitizer/x86/
-rwxr-xr-x root/root opt/cuda/extras/compute-sanitizer/x86/libTreeLauncherPlaceholder.so
-rwxr-xr-x root/root opt/cuda/extras/compute-sanitizer/x86/libTreeLauncherTargetInjection.so
-rwxr-xr-x root/root opt/cuda/extras/compute-sanitizer/x86/libTreeLauncherTargetUpdatePreloadInjection.so
--rw-r--r-- root/root opt/cuda/extras/cuda-gdb-11.6.124.src.tar.gz
+-rw-r--r-- root/root opt/cuda/extras/cuda-gdb-11.7.50.src.tar.gz
drwxr-xr-x root/root opt/cuda/extras/demo_suite/
-rwxr-xr-x root/root opt/cuda/extras/demo_suite/bandwidthTest
-rwxr-xr-x root/root opt/cuda/extras/demo_suite/busGrind
@@ -778,35 +791,35 @@ drwxr-xr-x root/root opt/cuda/libnvvp/configuration/org.eclipse.update/
-rw-r--r-- root/root opt/cuda/libnvvp/configuration/org.eclipse.update/platform.xml
-rw-r--r-- root/root opt/cuda/libnvvp/epl-v10.html
drwxr-xr-x root/root opt/cuda/libnvvp/features/
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.6.0.202203090240/
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.6.0.202203090240/META-INF/
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.6.0.202203090240/META-INF/MANIFEST.MF
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.6.0.202203090240/META-INF/maven/
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.6.0.202203090240/META-INF/maven/com.nvidia.cuda.ide/
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.6.0.202203090240/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.editor.feature/
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.6.0.202203090240/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.editor.feature/pom.properties
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.6.0.202203090240/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.editor.feature/pom.xml
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.6.0.202203090240/feature.xml
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.6.0.202203090240/
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.6.0.202203090240/META-INF/
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.6.0.202203090240/META-INF/MANIFEST.MF
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.6.0.202203090240/META-INF/maven/
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.6.0.202203090240/META-INF/maven/com.nvidia.cuda.ide/
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.6.0.202203090240/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.remote.feature/
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.6.0.202203090240/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.remote.feature/pom.properties
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.6.0.202203090240/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.remote.feature/pom.xml
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.6.0.202203090240/feature.properties
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.6.0.202203090240/feature.xml
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.6.0.202203090240/license.html
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.6.0.202203090240/
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.6.0.202203090240/META-INF/
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.6.0.202203090240/META-INF/MANIFEST.MF
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.6.0.202203090240/META-INF/maven/
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.6.0.202203090240/META-INF/maven/com.nvidia.viper/
-drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.6.0.202203090240/META-INF/maven/com.nvidia.viper/com.nvidia.viper.feature/
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.6.0.202203090240/META-INF/maven/com.nvidia.viper/com.nvidia.viper.feature/pom.properties
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.6.0.202203090240/META-INF/maven/com.nvidia.viper/com.nvidia.viper.feature/pom.xml
--rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.6.0.202203090240/feature.xml
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202204060229/
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202204060229/META-INF/
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202204060229/META-INF/MANIFEST.MF
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202204060229/META-INF/maven/
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.cuda.ide/
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.editor.feature/
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.editor.feature/pom.properties
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.editor.feature/pom.xml
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.editor.feature_11.7.0.202204060229/feature.xml
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/META-INF/
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/META-INF/MANIFEST.MF
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/META-INF/maven/
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.cuda.ide/
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.remote.feature/
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.remote.feature/pom.properties
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.cuda.ide/com.nvidia.cuda.ide.remote.feature/pom.xml
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/feature.properties
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/feature.xml
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.cuda.ide.remote.feature_11.7.0.202204060229/license.html
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202204060229/
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202204060229/META-INF/
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202204060229/META-INF/MANIFEST.MF
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202204060229/META-INF/maven/
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.viper/
+drwxr-xr-x root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.viper/com.nvidia.viper.feature/
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.viper/com.nvidia.viper.feature/pom.properties
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202204060229/META-INF/maven/com.nvidia.viper/com.nvidia.viper.feature/pom.xml
+-rw-r--r-- root/root opt/cuda/libnvvp/features/com.nvidia.viper.feature_11.7.0.202204060229/feature.xml
drwxr-xr-x root/root opt/cuda/libnvvp/features/org.eclipse.e4.rcp_1.3.100.v20140909-1633/
drwxr-xr-x root/root opt/cuda/libnvvp/features/org.eclipse.e4.rcp_1.3.100.v20140909-1633/META-INF/
-rw-r--r-- root/root opt/cuda/libnvvp/features/org.eclipse.e4.rcp_1.3.100.v20140909-1633/META-INF/ECLIPSE_.RSA
@@ -1019,7 +1032,7 @@ drwxr-xr-x root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.core/
drwxr-xr-x root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.core/cache/
-rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.core/cache/artifacts.xml
drwxr-xr-x root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.core/cache/binary/
--rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.core/cache/binary/com.nvidia.viper.application.product.executable.gtk.linux.x86_64_11.6.0.202203090240
+-rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.core/cache/binary/com.nvidia.viper.application.product.executable.gtk.linux.x86_64_11.7.0.202204060229
-rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.platform_root_4.4.0.v20140925-0400
-rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.core/cache/binary/org.eclipse.rcp_root_4.4.0.v20140925-0400
drwxr-xr-x root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/
@@ -1030,25 +1043,25 @@ drwxr-xr-x root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRe
drwxr-xr-x root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/
drwxr-xr-x root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/.data/
-rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/.lock (EMPTY)
--rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/1646793670589.profile.gz
--rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/1646793670607.profile.gz
--rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/1646793671887.profile.gz
--rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/1646793672142.profile.gz
+-rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/1649212193563.profile.gz
+-rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/1649212193587.profile.gz
+-rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/1649212195435.profile.gz
+-rw-r--r-- root/root opt/cuda/libnvvp/p2/org.eclipse.equinox.p2.engine/profileRegistry/DefaultProfile.profile/1649212195834.profile.gz
drwxr-xr-x root/root opt/cuda/libnvvp/plugins/
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.ibm.icu_52.1.0.v201404241930.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.jcraft.jsch_0.1.50.v201403120620.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.lowagie.text_2.1.7.v201004222200.jar
--rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.common_11.6.0.202203090240.jar
--rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.cuda.ide.editor_11.6.0.202203090240.jar
--rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.cuda.ide.remote.connection_11.6.0.202203090240.jar
--rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.help.bpg_11.6.0.jar
--rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.help.pug_11.6.0.jar
--rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.pgprof.application_11.6.0.202203090240.jar
--rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.pgprof.help.pug_11.6.0.jar
--rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.viper.application_11.6.0.202203090240.jar
--rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.viper.birt_11.6.0.202203090240.jar
--rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.viper.help_11.6.0.202203090240.jar
--rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.viper_11.6.0.202203090240.jar
+-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.common_11.7.0.202204060229.jar
+-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.cuda.ide.editor_11.7.0.202204060229.jar
+-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.cuda.ide.remote.connection_11.7.0.202204060229.jar
+-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.help.bpg_11.7.0.jar
+-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.help.pug_11.7.0.jar
+-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.pgprof.application_11.7.0.202204060229.jar
+-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.pgprof.help.pug_11.7.0.jar
+-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.viper.application_11.7.0.202204060229.jar
+-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.viper.birt_11.7.0.202204060229.jar
+-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.viper.help_11.7.0.202204060229.jar
+-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.nvidia.viper_11.7.0.202204060229.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/com.sun.el_2.2.0.v201303151357.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/javax.annotation_1.2.0.v201401042248.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/javax.el_2.2.0.v201303151357.jar
@@ -1317,7 +1330,7 @@ drwxr-xr-x root/root opt/cuda/libnvvp/plugins/org.eclipse.equinox.launcher.gtk.l
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/org.eclipse.jsch.ui_1.1.500.v20131112-1442.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/org.eclipse.ltk.core.refactoring_3.6.101.v20140817-1500.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/org.eclipse.ltk.ui.refactoring_3.7.100.v20140324-1358.jar
--rw-r--r-- root/root opt/cuda/libnvvp/plugins/org.eclipse.nebula.widgets.pshelf_1.0.0.202203090240.jar
+-rw-r--r-- root/root opt/cuda/libnvvp/plugins/org.eclipse.nebula.widgets.pshelf_1.0.0.202204060229.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/org.eclipse.osgi.compatibility.state_1.0.1.v20140709-1414.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/org.eclipse.osgi.services_3.4.0.v20140312-2051.jar
-rw-r--r-- root/root opt/cuda/libnvvp/plugins/org.eclipse.osgi.util_3.3.0.v20131023-1243.jar
@@ -2007,6 +2020,12 @@ drwxr-xr-x root/root opt/cuda/nsight_compute/docs/NsightCompute/
drwxr-xr-x root/root opt/cuda/nsight_compute/docs/NsightCompute/graphics/
-rw-r--r-- root/root opt/cuda/nsight_compute/docs/NsightCompute/graphics/add-remote-connection-private-key.png
-rw-r--r-- root/root opt/cuda/nsight_compute/docs/NsightCompute/graphics/add-remote-connection.png
+-rw-r--r-- root/root opt/cuda/nsight_compute/docs/NsightCompute/graphics/as-viewer-cam.png
+-rw-r--r-- root/root opt/cuda/nsight_compute/docs/NsightCompute/graphics/as-viewer-display-filter.png
+-rw-r--r-- root/root opt/cuda/nsight_compute/docs/NsightCompute/graphics/as-viewer-open-button.png
+-rw-r--r-- root/root opt/cuda/nsight_compute/docs/NsightCompute/graphics/as-viewer-property-filter.png
+-rw-r--r-- root/root opt/cuda/nsight_compute/docs/NsightCompute/graphics/as-viewer-rendering-options.png
+-rw-r--r-- root/root opt/cuda/nsight_compute/docs/NsightCompute/graphics/as-viewer.png
-rw-r--r-- root/root opt/cuda/nsight_compute/docs/NsightCompute/graphics/baselines-multiple.png
-rw-r--r-- root/root opt/cuda/nsight_compute/docs/NsightCompute/graphics/baselines.png
-rw-r--r-- root/root opt/cuda/nsight_compute/docs/NsightCompute/graphics/connection-dialog.png
@@ -2103,6 +2122,10 @@ drwxr-xr-x root/root opt/cuda/nsight_compute/docs/NvRulesAPI/
-rw-r--r-- root/root opt/cuda/nsight_compute/docs/NvRulesAPI/tabs.css
drwxr-xr-x root/root opt/cuda/nsight_compute/docs/ProfilingGuide/
drwxr-xr-x root/root opt/cuda/nsight_compute/docs/ProfilingGuide/graphics/
+-rw-r--r-- root/root opt/cuda/nsight_compute/docs/ProfilingGuide/graphics/hw-model-l1tex-ga100-global.png
+-rw-r--r-- root/root opt/cuda/nsight_compute/docs/ProfilingGuide/graphics/hw-model-l1tex.png
+-rw-r--r-- root/root opt/cuda/nsight_compute/docs/ProfilingGuide/graphics/hw-model-lts-ga100.png
+-rw-r--r-- root/root opt/cuda/nsight_compute/docs/ProfilingGuide/graphics/hw-model-lts.png
-rw-r--r-- root/root opt/cuda/nsight_compute/docs/ProfilingGuide/graphics/memory-chart-a100.png
-rw-r--r-- root/root opt/cuda/nsight_compute/docs/ProfilingGuide/graphics/memory-peak-mapping.png
-rw-r--r-- root/root opt/cuda/nsight_compute/docs/ProfilingGuide/graphics/memory-tables-dram.png
@@ -2282,13 +2305,13 @@ drwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64
drwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/SassDebuggerPlugin/
-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/SassDebuggerPlugin/libSassDebuggerPlugin.so
drwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/imageformats/
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/imageformats/libqgif.so
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/imageformats/libqico.so
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/imageformats/libqjpeg.so
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/imageformats/libqsvg.so
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/imageformats/libqtga.so
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/imageformats/libqtiff.so
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/imageformats/libqwbmp.so
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/imageformats/libqgif.so
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/imageformats/libqico.so
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/imageformats/libqjpeg.so
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/imageformats/libqsvg.so
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/imageformats/libqtga.so
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/imageformats/libqtiff.so
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/imageformats/libqwbmp.so
-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/libArmServerPlatformPlugin.so
-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/libExternalIntegrationPlugin.so
-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/libLinuxPPCPlatformPlugin.so
@@ -2297,40 +2320,45 @@ drwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64
-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/libTPSSystemServerPlugin.so
-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/libWindowsPlatformPlugin.so
drwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/platforms/
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/platforms/libqxcb.so
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/platforms/libqxcb.so
+drwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/tls/
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/tls/libqcertonlybackend.so
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/tls/libqopensslbackend.so
drwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/xcbglintegrations/
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/xcbglintegrations/libqxcb-glx-integration.so
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/Plugins/xcbglintegrations/libqxcb-glx-integration.so
-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libAppLib.so
-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libAppLibInterfaces.so
-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libNvQtGui.so
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt5Charts.so.5
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt5Concurrent.so.5
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt5Core.so.5
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt5DBus.so.5
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt5Gui.so.5
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt5Network.so.5
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt5OpenGL.so.5
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt5PrintSupport.so.5
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt5Qml.so.5
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt5Sql.so.5
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt5Svg.so.5
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt5Widgets.so.5
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt5XcbQpa.so.5
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt5Xml.so.5
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt6Charts.so.6
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt6Concurrent.so.6
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt6Core.so.6
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt6DBus.so.6
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt6Gui.so.6
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt6Network.so.6
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt6OpenGL.so.6
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt6OpenGLWidgets.so.6
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt6PrintSupport.so.6
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt6Qml.so.6
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt6Sql.so.6
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt6Svg.so.6
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt6Widgets.so.6
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt6XcbQpa.so.6
+-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQt6Xml.so.6
-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libQtPropertyBrowser.so
lrwxrwxrwx root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libcrypto.so -> libcrypto.so.1.1
-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libcrypto.so.1.1
drwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libexec/
-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libexec/QtWebEngineProcess
--rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libexec/qt.conf
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libicudata.so.56
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libicui18n.so.56
--rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libicuuc.so.56
+-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libicudata.so.70
+-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libicui18n.so.70
+-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libicuuc.so.70
-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libnvlog.so
-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libnvperf_host.so
-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libssh.so
lrwxrwxrwx root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libssl.so -> libssl.so.1.1
-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libssl.so.1.1
+-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libstdc++.so.6
+-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/libzstd.so.1
-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/ncu-ui
-rwxr-xr-x root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/ncu-ui.bin
-rw-r--r-- root/root opt/cuda/nsight_compute/host/linux-desktop-glibc_2_11_3-x64/ncu-ui.png
@@ -2538,6 +2566,9 @@ drwxr-xr-x root/root opt/cuda/nsight_systems/documentation/UserGuide/graphics/
-rw-r--r-- root/root opt/cuda/nsight_systems/documentation/UserGuide/graphics/memory_allocation_graph1.png
-rw-r--r-- root/root opt/cuda/nsight_systems/documentation/UserGuide/graphics/memory_allocation_graph2.png
-rw-r--r-- root/root opt/cuda/nsight_systems/documentation/UserGuide/graphics/memory_utilization.png
+-rw-r--r-- root/root opt/cuda/nsight_systems/documentation/UserGuide/graphics/mpi-comparam1.png
+-rw-r--r-- root/root opt/cuda/nsight_systems/documentation/UserGuide/graphics/mpi-comparam2.png
+-rw-r--r-- root/root opt/cuda/nsight_systems/documentation/UserGuide/graphics/mpi-comparam3.png
-rw-r--r-- root/root opt/cuda/nsight_systems/documentation/UserGuide/graphics/mpi-project.png
-rw-r--r-- root/root opt/cuda/nsight_systems/documentation/UserGuide/graphics/mpi-trace.png
-rw-r--r-- root/root opt/cuda/nsight_systems/documentation/UserGuide/graphics/network-connection.png
@@ -2763,6 +2794,22 @@ drwxr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/Plugins/xcbglintegra
-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/Plugins/xcbglintegrations/libqxcb-glx-integration.so
-rwxr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/QdstrmImporter
-rwxr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/ResolveSymbols
+drwxr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/Scripts/
+drwxr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/Scripts/CentOS/
+-rwxr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/Scripts/CentOS/dependency_resolver
+-rwxr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/Scripts/CentOS/install-dependencies.sh
+-rwxr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/Scripts/CentOS/non-root-dependencies-installer-centos.sh
+-rw-r--r-- root/root opt/cuda/nsight_systems/host-linux-x64/Scripts/CentOS/packages.list
+-rwxr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/Scripts/CentOS/rpm_extract
+drwxr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/Scripts/Ubuntu/
+-rwxr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/Scripts/Ubuntu/install-dependencies.sh
+-rwxr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/Scripts/Ubuntu/non-root-dependencies-installer-ubuntu.sh
+-rw-r--r-- root/root opt/cuda/nsight_systems/host-linux-x64/Scripts/Ubuntu/packages.list
+-rw-r--r-- root/root opt/cuda/nsight_systems/host-linux-x64/Scripts/Ubuntu/packages_18.04.list
+-rw-r--r-- root/root opt/cuda/nsight_systems/host-linux-x64/Scripts/Ubuntu/packages_20.04.list
+-rwxr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/Scripts/install-dependencies-without-root.sh
+-rwxr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/Scripts/install-dependencies.sh
+-rw-r--r-- root/root opt/cuda/nsight_systems/host-linux-x64/Scripts/setup-dependencies-environment.sh
-rwxr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/libAgentAPI.so
-rwxr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/libAnalysis.so
-rwxr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/libAnalysisData.so
@@ -2890,7 +2937,9 @@ drwxr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/reports/
-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/reports/apigpusum.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/reports/cudaapisum.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/reports/cudaapitrace.py
+-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/reports/dx11pixsum.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/reports/dx12gpumarkersum.py
+-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/reports/dx12pixsum.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/reports/gpukernsum.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/reports/gpumemsizesum.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/reports/gpumemtimesum.py
@@ -2910,7 +2959,6 @@ drwxr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/reports/
-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/reports/openaccsum.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/reports/openmpevtsum.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/reports/osrtsum.py
--r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/reports/pixsum.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/reports/umcpupagefaults.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/reports/unifiedmemory.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/reports/unifiedmemorytotals.py
@@ -2928,6 +2976,7 @@ drwxr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/rules/
-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/rules/cuda-sync-api.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/rules/cuda-sync-memcpy.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/rules/cuda-sync-memset.py
+-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/rules/dx12-mem-op.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/rules/gpu-low-util.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/rules/gpu-starv.py
-rwxr-xr-x root/root opt/cuda/nsight_systems/host-linux-x64/sqlite3
@@ -3047,6 +3096,7 @@ drwxr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/NvTraceFormat/
-r--r--r-- root/root opt/cuda/nsight_systems/target-linux-x64/libcupti.so.11.4
-r--r--r-- root/root opt/cuda/nsight_systems/target-linux-x64/libcupti.so.11.5
-r--r--r-- root/root opt/cuda/nsight_systems/target-linux-x64/libcupti.so.11.6
+-r--r--r-- root/root opt/cuda/nsight_systems/target-linux-x64/libcupti.so.11.7
-rwxr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/libnvlog.so
-rwxr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/libnvperf_host.so
-rwxr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/nsys
@@ -3086,7 +3136,9 @@ drwxr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/reports/
-r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/reports/apigpusum.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/reports/cudaapisum.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/reports/cudaapitrace.py
+-r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/reports/dx11pixsum.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/reports/dx12gpumarkersum.py
+-r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/reports/dx12pixsum.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/reports/gpukernsum.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/reports/gpumemsizesum.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/reports/gpumemtimesum.py
@@ -3106,7 +3158,6 @@ drwxr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/reports/
-r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/reports/openaccsum.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/reports/openmpevtsum.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/reports/osrtsum.py
--r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/reports/pixsum.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/reports/umcpupagefaults.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/reports/unifiedmemory.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/reports/unifiedmemorytotals.py
@@ -3118,6 +3169,7 @@ drwxr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/rules/
-r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/rules/cuda-sync-api.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/rules/cuda-sync-memcpy.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/rules/cuda-sync-memset.py
+-r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/rules/dx12-mem-op.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/rules/gpu-low-util.py
-r-xr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/rules/gpu-starv.py
-rwxr-xr-x root/root opt/cuda/nsight_systems/target-linux-x64/sqlite3
@@ -3166,9 +3218,6 @@ drwxr-xr-x root/root opt/cuda/nvvm/libnvvm-samples/simple/
-rw-r--r-- root/root opt/cuda/nvvm/libnvvm-samples/simple/simple-gpu.ll
-rw-r--r-- root/root opt/cuda/nvvm/libnvvm-samples/simple/simple-gpu64.ll
-rw-r--r-- root/root opt/cuda/nvvm/libnvvm-samples/simple/simple.c
-drwxr-xr-x root/root opt/cuda/samples/
--rwxr-xr-x root/root opt/cuda/samples/README_CUDA_Samples.txt
-drwxr-xr-x root/root opt/cuda/samples/bin/
drwxr-xr-x root/root opt/cuda/share/
drwxr-xr-x root/root opt/cuda/share/gdb/
drwxr-xr-x root/root opt/cuda/share/gdb/python/
@@ -3262,6 +3311,7 @@ drwxr-xr-x root/root opt/cuda/targets/x86_64-linux/include/cooperative_groups/de
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cooperative_groups/scan.h
drwxr-xr-x root/root opt/cuda/targets/x86_64-linux/include/crt/
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/crt/common_functions.h
+-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/crt/cudacc_ext.h
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/crt/device_double_functions.h
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/crt/device_double_functions.hpp
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/crt/device_functions.h
@@ -3423,8 +3473,10 @@ drwxr-xr-x root/root opt/cuda/targets/x86_64-linux/include/cuda/
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cuda/pipeline
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cuda/semaphore
drwxr-xr-x root/root opt/cuda/targets/x86_64-linux/include/cuda/std/
+-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cuda/std/array
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cuda/std/atomic
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cuda/std/barrier
+-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cuda/std/bit
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cuda/std/cassert
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cuda/std/ccomplex
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cuda/std/cfloat
@@ -3648,6 +3700,8 @@ drwxr-xr-x root/root opt/cuda/targets/x86_64-linux/include/cuda/std/detail/libcx
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cuda/std/detail/libcxx/include/wchar.h
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cuda/std/detail/libcxx/include/wctype.h
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cuda/std/functional
+-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cuda/std/initializer_list
+-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cuda/std/iterator
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cuda/std/latch
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cuda/std/limits
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/include/cuda/std/ratio
@@ -4679,116 +4733,116 @@ lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libOpenCL.so -> libOpenCL
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libOpenCL.so.1 -> libOpenCL.so.1.0
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libOpenCL.so.1.0 -> libOpenCL.so.1.0.0
-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libOpenCL.so.1.0.0
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libaccinj64.so -> libaccinj64.so.11.6
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libaccinj64.so.11.6 -> libaccinj64.so.11.6.124
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libaccinj64.so.11.6.124
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libaccinj64.so -> libaccinj64.so.11.7
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libaccinj64.so.11.7 -> libaccinj64.so.11.7.50
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libaccinj64.so.11.7.50
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcublas.so -> libcublas.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcublas.so.11 -> ./libcublas.so.11.9.2.110
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcublas.so.11.9.2.110
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcublas.so.11 -> ./libcublas.so.11.10.1.25
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcublas.so.11.10.1.25
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcublasLt.so -> libcublasLt.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcublasLt.so.11 -> ./libcublasLt.so.11.9.2.110
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcublasLt.so.11.9.2.110
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcublasLt.so.11 -> ./libcublasLt.so.11.10.1.25
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcublasLt.so.11.10.1.25
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcublasLt_static.a
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcublas_static.a
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcudadevrt.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcudart.so -> libcudart.so.11.0
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcudart.so.11.0 -> libcudart.so.11.6.55
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcudart.so.11.6.55
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcudart.so.11.0 -> libcudart.so.11.7.60
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcudart.so.11.7.60
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcudart_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcufft.so -> libcufft.so.10
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcufft.so.10 -> libcufft.so.10.7.2.124
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcufft.so.10.7.2.124
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcufft.so.10 -> libcufft.so.10.7.2.50
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcufft.so.10.7.2.50
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcufft_static.a
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcufft_static_nocallback.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcufftw.so -> libcufftw.so.10
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcufftw.so.10 -> libcufftw.so.10.7.2.124
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcufftw.so.10.7.2.124
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcufftw.so.10 -> libcufftw.so.10.7.2.50
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcufftw.so.10.7.2.50
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcufftw_static.a
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcufilt.a
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcuinj64.so -> libcuinj64.so.11.6
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcuinj64.so.11.6 -> libcuinj64.so.11.6.124
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcuinj64.so.11.6.124
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcuinj64.so -> libcuinj64.so.11.7
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcuinj64.so.11.7 -> libcuinj64.so.11.7.50
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcuinj64.so.11.7.50
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libculibos.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcurand.so -> libcurand.so.10
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcurand.so.10 -> libcurand.so.10.2.9.124
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcurand.so.10.2.9.124
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcurand.so.10 -> libcurand.so.10.2.10.50
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcurand.so.10.2.10.50
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcurand_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcusolver.so -> libcusolver.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcusolver.so.11 -> libcusolver.so.11.3.4.124
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcusolver.so.11.3.4.124
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcusolver.so.11 -> libcusolver.so.11.3.5.50
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcusolver.so.11.3.5.50
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcusolverMg.so -> libcusolverMg.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcusolverMg.so.11 -> libcusolverMg.so.11.3.4.124
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcusolverMg.so.11.3.4.124
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcusolverMg.so.11 -> libcusolverMg.so.11.3.5.50
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcusolverMg.so.11.3.5.50
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcusolver_lapack_static.a
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcusolver_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcusparse.so -> libcusparse.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcusparse.so.11 -> libcusparse.so.11.7.2.124
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcusparse.so.11.7.2.124
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libcusparse.so.11 -> libcusparse.so.11.7.3.50
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libcusparse.so.11.7.3.50
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libcusparse_static.a
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/liblapack_static.a
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libmetis_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppc.so -> libnppc.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppc.so.11 -> libnppc.so.11.6.3.9
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppc.so.11.6.3.9
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppc.so.11 -> libnppc.so.11.7.3.21
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppc.so.11.7.3.21
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnppc_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppial.so -> libnppial.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppial.so.11 -> libnppial.so.11.6.3.9
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppial.so.11.6.3.9
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppial.so.11 -> libnppial.so.11.7.3.21
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppial.so.11.7.3.21
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnppial_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppicc.so -> libnppicc.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppicc.so.11 -> libnppicc.so.11.6.3.9
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppicc.so.11.6.3.9
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppicc.so.11 -> libnppicc.so.11.7.3.21
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppicc.so.11.7.3.21
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnppicc_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppidei.so -> libnppidei.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppidei.so.11 -> libnppidei.so.11.6.3.9
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppidei.so.11.6.3.9
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppidei.so.11 -> libnppidei.so.11.7.3.21
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppidei.so.11.7.3.21
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnppidei_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppif.so -> libnppif.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppif.so.11 -> libnppif.so.11.6.3.9
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppif.so.11.6.3.9
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppif.so.11 -> libnppif.so.11.7.3.21
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppif.so.11.7.3.21
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnppif_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppig.so -> libnppig.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppig.so.11 -> libnppig.so.11.6.3.9
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppig.so.11.6.3.9
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppig.so.11 -> libnppig.so.11.7.3.21
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppig.so.11.7.3.21
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnppig_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppim.so -> libnppim.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppim.so.11 -> libnppim.so.11.6.3.9
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppim.so.11.6.3.9
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppim.so.11 -> libnppim.so.11.7.3.21
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppim.so.11.7.3.21
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnppim_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppist.so -> libnppist.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppist.so.11 -> libnppist.so.11.6.3.9
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppist.so.11.6.3.9
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppist.so.11 -> libnppist.so.11.7.3.21
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppist.so.11.7.3.21
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnppist_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppisu.so -> libnppisu.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppisu.so.11 -> libnppisu.so.11.6.3.9
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppisu.so.11.6.3.9
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppisu.so.11 -> libnppisu.so.11.7.3.21
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppisu.so.11.7.3.21
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnppisu_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppitc.so -> libnppitc.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppitc.so.11 -> libnppitc.so.11.6.3.9
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppitc.so.11.6.3.9
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnppitc.so.11 -> libnppitc.so.11.7.3.21
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnppitc.so.11.7.3.21
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnppitc_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnpps.so -> libnpps.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnpps.so.11 -> libnpps.so.11.6.3.9
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnpps.so.11.6.3.9
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnpps.so.11 -> libnpps.so.11.7.3.21
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnpps.so.11.7.3.21
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnpps_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvToolsExt.so -> libnvToolsExt.so.1
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvToolsExt.so.1 -> libnvToolsExt.so.1.0.0
-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnvToolsExt.so.1.0.0
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvblas.so -> libnvblas.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvblas.so.11 -> ./libnvblas.so.11.9.2.110
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnvblas.so.11.9.2.110
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvblas.so.11 -> ./libnvblas.so.11.10.1.25
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnvblas.so.11.10.1.25
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvjpeg.so -> libnvjpeg.so.11
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvjpeg.so.11 -> libnvjpeg.so.11.6.2.8
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnvjpeg.so.11.6.2.8
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvjpeg.so.11 -> libnvjpeg.so.11.7.2.34
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnvjpeg.so.11.7.2.34
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnvjpeg_static.a
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnvptxcompiler_static.a
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc-builtins.so -> libnvrtc-builtins.so.11.6
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc-builtins.so.11.6 -> libnvrtc-builtins.so.11.6.124
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc-builtins.so.11.6.124
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc-builtins.so -> libnvrtc-builtins.so.11.7
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc-builtins.so.11.7 -> libnvrtc-builtins.so.11.7.50
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc-builtins.so.11.7.50
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc-builtins_static.a
lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc.so -> libnvrtc.so.11.2
-lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc.so.11.2 -> libnvrtc.so.11.6.124
--rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc.so.11.6.124
+lrwxrwxrwx root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc.so.11.2 -> libnvrtc.so.11.7.50
+-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc.so.11.7.50
-rw-r--r-- root/root opt/cuda/targets/x86_64-linux/lib/libnvrtc_static.a
drwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/stubs/
-rwxr-xr-x root/root opt/cuda/targets/x86_64-linux/lib/stubs/libcublas.so
diff --git a/cuda/.signature b/cuda/.signature
index fad3b53ea..70370d84b 100644
--- a/cuda/.signature
+++ b/cuda/.signature
@@ -1,8 +1,8 @@
untrusted comment: verify with /etc/ports/contrib.pub
-RWSagIOpLGJF37YczPVu2A4O5vRFMvk7ikHlLj8raHo/FCaUe4dp0vaCfN1rkIW/C4h8vN4mvOEStmXXuYBlfvBvYKnkV8VTMgE=
-SHA256 (Pkgfile) = 7f66f1cc80ff5ab458f9f6c075a402783c82a9895ff3291d6ec2aa5ad04f01e0
-SHA256 (.footprint) = afed4e04f20a787dd20198daf7c97daab4a689d880ac24f150ab093998e98a31
-SHA256 (cuda_11.6.2_510.47.03_linux.run) = 99b7a73dcc52a52cef4c1fceb4a60c3015ac9b6404082c1677d9efdaba1d4593
+RWSagIOpLGJF3yd2qKNTti9gzrtFYPD1VqpqvbhcdMNwp2BFaVK2ErO84gIEklBxGBhoUJ1rL38bk99ynx0mLg8Z++XgTf0xrwA=
+SHA256 (Pkgfile) = f643b045ba93887ced6fd51637b9eaaea695817ba15fd5ed215fc9e34f0db36f
+SHA256 (.footprint) = e1508ba603310f934e45e09b92dc9319dedb83eeaf58aab43aceba2fc33d95b5
+SHA256 (cuda_11.7.0_515.43.04_linux.run) = 087fdfcbba1f79543b1f78e43a8dfdac5f6db242d042dde820e16dc185892f26
SHA256 (cuda.sh) = ab92658d9efa337f12da5b093d9a643c031c6067ffc30abd8e87bd7bedecf0c0
SHA256 (cuda.conf) = a65f7d96e2447eb40b1be9586b90eb0bd776a8938c93d21f9606d2880b548b28
SHA256 (cuda.revdep) = b4beef4ac94f5fb418127b00cca7b011a6804d4e0d0a581986a5a028486aa349
diff --git a/cuda/Pkgfile b/cuda/Pkgfile
index 8acc0a91f..847c50484 100644
--- a/cuda/Pkgfile
+++ b/cuda/Pkgfile
@@ -4,8 +4,8 @@
# Depends on: nvidia lsb-release
name=cuda
-version=11.6.2
-_driverver=510.47.03
+version=11.7.0
+_driverver=515.43.04
release=1
source=(https://developer.download.nvidia.com/compute/cuda/${version}/local…
cuda.sh cuda.conf $name.revdep
@@ -18,7 +18,7 @@ build() {
rm -r NVIDIA*.run bin
mkdir -p "${PKG}/opt/cuda/extras"
- mv cuda_samples "${PKG}/opt/cuda/samples"
+ #mv cuda_samples "${PKG}/opt/cuda/samples"
mv integration nsight_compute nsight_systems EULA.txt "${PKG}/opt/cuda"
mv cuda_sanitizer_api/compute-sanitizer "${PKG}/opt/cuda/extras/compute-sanitizer"
rmdir cuda_sanitizer_api
@@ -30,7 +30,7 @@ build() {
done
# Delete some unnecessary files
- rm -r "${PKG}"/opt/cuda/{bin/cuda-uninstaller,samples/bin/cuda-uninstaller}
+ #rm -r "${PKG}"/opt/cuda/{bin/cuda-uninstaller,samples/bin/cuda-uninstaller}
# remove foreign archs
rm -r "${PKG}"/opt/cuda/nsight_compute/target/linux-desktop-glibc_2_19_0-ppc64le
1
0
commit 082b437f0f5897c8f4803571af1c15765b943f09
Author: Steffen Nurpmeso <steffen(a)sdaoden.eu>
Date: Mon Sep 19 00:50:46 2022 +0200
acpid: v2.0.34
diff --git a/acpid/.signature b/acpid/.signature
index 9702189a5..c66258196 100644
--- a/acpid/.signature
+++ b/acpid/.signature
@@ -1,8 +1,8 @@
untrusted comment: verify with /etc/ports/contrib.pub
-RWSagIOpLGJF3+Q8Y1I5z8gMi2H8BOfrNxvsllzoiQMYN6KUeL+7bgOo8JAD8OnjxTTSmgcHy79/EQoRRhcwbSoCWKVoUHIgng0=
-SHA256 (Pkgfile) = f000ecf10fdbb58ccf9b41abb2fd8b5ad1e5bac0566fca5000b27f081ef530b6
+RWSagIOpLGJF34Blm9cundfs8VXciytWfQpHbo5NePD9Y1wvOCVkb1LBZZQhv2wuOWrfIQwYKo1yUCSjNYzjr15lGrcE+A9UPAw=
+SHA256 (Pkgfile) = 40d3320a47a91ffec3e833f4beaa2bca820a727e5b358b3884d02aa0d7eba080
SHA256 (.footprint) = e4da2ef20c91becc9458692dcb62589feb4e6da8e4a5724133d1e5d0456fa602
-SHA256 (acpid-2.0.33.tar.xz) = 0856f71b3eb34a1b663d0a8e6363dfcbc519e63d847330498898658e2972dbe8
+SHA256 (acpid-2.0.34.tar.xz) = 2d095c8cfcbc847caec746d62cdc8d0bff1ec1bc72ef7c674c721e04da6ab333
SHA256 (acpid.rc) = 70ec38cfc4c48b700218cd946f44c6c10ed541a2e84154284431c429144c74a8
SHA256 (default) = 1263501c5d3abe1c0d4ce43b584d7129a6d454d312f3485d3a7b64d2839605b0
SHA256 (default.sh) = e92b712cd19553c4fcd51b28bf86a13549a920b58427d895a11d4aae6d3d3562
diff --git a/acpid/Pkgfile b/acpid/Pkgfile
index 0508c4172..1339ec3d0 100644
--- a/acpid/Pkgfile
+++ b/acpid/Pkgfile
@@ -3,7 +3,7 @@
# Maintainer: Steffen Nurpmeso, steffen at sdaoden dot eu
name=acpid
-version=2.0.33
+version=2.0.34
release=1
source=(
https://downloads.sourceforge.net/sourceforge/\
1
0
commit a5697a4ed23bbcd17c4ecba81eb584c363c5aefe
Author: Steffen Nurpmeso <steffen(a)sdaoden.eu>
Date: Mon Sep 19 00:49:56 2022 +0200
lighttpd: v1.4.67
diff --git a/lighttpd/.signature b/lighttpd/.signature
index 199a854c7..7ede12efb 100644
--- a/lighttpd/.signature
+++ b/lighttpd/.signature
@@ -1,8 +1,8 @@
untrusted comment: verify with /etc/ports/contrib.pub
-RWSagIOpLGJF32tBrBsYYoh4GxQ5Oo7dG0oL0ljy9ounh0ogoIRJ77jdH7L/MDN5oY9NIl+B+jgYO5tYp6IxXa6LqdVA2Yex1gM=
-SHA256 (Pkgfile) = 261026e84dff39382dd5875a1a8aad551a0f60cef6296c0bff09300f8140ea1b
+RWSagIOpLGJF33TkCCtyq8MGfBe07TAeena+PZ1YUnDl4p1bFqxcUbsoaoP8zvBLrCgX+Nwvq62RZKnumbUfwsq2MuEzxMRJgAI=
+SHA256 (Pkgfile) = 1f3626f982b98088d282022930a3baa6f8e6b53745887670f82c900f67f3d3b5
SHA256 (.footprint) = e7d6f627943ee66508700aa687a9441be5c271038d1ae094cc68f1c9e55df362
-SHA256 (lighttpd-1.4.66.tar.xz) = 47ac6e60271aa0196e65472d02d019556dc7c6d09df3b65df2c1ab6866348e3b
+SHA256 (lighttpd-1.4.67.tar.xz) = 7e04d767f51a8d824b32e2483ef2950982920d427d1272ef4667f49d6f89f358
SHA256 (lighttpd.rc) = b96a244cb1bd3222e76bf4c9954da0c13225109c99e2d406de76a3d231bbb362
SHA256 (lighttpd.conf) = 2403f1c60d6bc801337c50eb44474b1707c93323db5bc224769fb96b635597ae
SHA256 (post-install) = 21c61212d525b0e4e08dd245825957c395c12747f2e29dc7d664067ceac9b3e8
diff --git a/lighttpd/Pkgfile b/lighttpd/Pkgfile
index 864699100..82e12061f 100644
--- a/lighttpd/Pkgfile
+++ b/lighttpd/Pkgfile
@@ -4,7 +4,7 @@
# Depends on: libpcre2 lua bzip2 linux-pam openssl zlib zstd
name=lighttpd
-version=1.4.66
+version=1.4.67
release=1
source=(
https://download.${name}.net/${name}/releases-1.4.x/${name}-${version}.tar.…
1
0