rust

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
rust [2024/04/28 02:12] – [uutils coreutils - Rust での GNU coreutils のクロスプラットフォーム再実装] ともやんrust [2024/05/20 16:15] (現在) – [ORM - Object Relational Mapper] ともやん
行 32: 行 32:
 <WRAP color_term> <WRAP color_term>
 <WRAP color_command><html><pre> <WRAP color_command><html><pre>
-<b class=GRN>$</b> <b class=HIY>curl</b> <b class=HIK>--proto</b'=https<b class=HIK>--tlsv1.2 -sSf</b> https://sh.rustup.rs | <b class=HIY>sh</b>+<font color="#0087FF"><b>$</b></font> <font color="#26A269">curl</font> <font color="#A347BA">--proto</font<font color="#A2734C">&apos;=https&apos;</font> <font color="#A347BA">--tlsv1.2</font> https://sh.rustup.rs <font color="#A347BA">-sSf</font> <font color="#12488B"><b>|</b></font> <font color="#26A269">sh</font>
 </pre></html></WRAP> </pre></html></WRAP>
 <WRAP color_result_long><html><pre> <WRAP color_result_long><html><pre>
行 881: 行 881:
 </pre></html></WRAP> </pre></html></WRAP>
 </WRAP> </WRAP>
 +
 +===== 言語構文 =====
 +[[rust/language_memo|Rust ランゲージ メモ]]\\
  
 ===== Rust の更新 ===== ===== Rust の更新 =====
行 893: 行 896:
 <WRAP color_command><html><pre> <WRAP color_command><html><pre>
 <font color="#FF8700"><b>$</b></font> <font color="#26A269">rustup</font> self update <font color="#FF8700"><b>$</b></font> <font color="#26A269">rustup</font> self update
 +</pre></html></WRAP>
 <WRAP color_result><html><pre> <WRAP color_result><html><pre>
 <b>info: </b>checking for self-update <b>info: </b>checking for self-update
 <b>info: </b>downloading self-update <b>info: </b>downloading self-update
-  <font color="#26A269"><b>rustup updated</b></font> - 1.27.(from 1.26.0) +  <font color="#26A269"><b>rustup updated</b></font> - 1.27.(from 1.27.0) 
-</pre></html></WRAP>+  </pre></html></WRAP>
 <WRAP color_command><html><pre> <WRAP color_command><html><pre>
 <font color="#FF8700"><b>$</b></font> <font color="#26A269">rustup</font> <font color="#A347BA">-V</font> <font color="#FF8700"><b>$</b></font> <font color="#26A269">rustup</font> <font color="#A347BA">-V</font>
 </pre></html></WRAP> </pre></html></WRAP>
 <WRAP color_result><html><pre> <WRAP color_result><html><pre>
-rustup 1.27.(bbb9276d2 2024-03-08)+rustup 1.27.(54dd3d00f 2024-04-24)
 <b>info: </b>This is the version for the rustup toolchain manager, not the rustc compiler. <b>info: </b>This is the version for the rustup toolchain manager, not the rustc compiler.
-<b>info: </b>The currently active `rustc` version is `rustc 1.74.(a28077b28 2023-12-04)+<b>info: </b>The currently active `rustc` version is `rustc 1.77.(25ef9e3d8 2024-04-09)`
 </pre></html></WRAP> </pre></html></WRAP>
 </WRAP> </WRAP>
行 913: 行 917:
 <font color="#FF8700"><b>$</b></font> <font color="#26A269">rustup</font> update <font color="#FF8700"><b>$</b></font> <font color="#26A269">rustup</font> update
 </pre></html></WRAP> </pre></html></WRAP>
-<WRAP color_result_long><html><pre>+<WRAP color_result_hlong><html><pre>
 <b>info: </b>syncing channel updates for &apos;stable-x86_64-unknown-linux-gnu&apos; <b>info: </b>syncing channel updates for &apos;stable-x86_64-unknown-linux-gnu&apos;
-<b>info: </b>latest update on 2024-03-21, rust version 1.77.0 (aedd173a2 2024-03-17) +730.9 KiB 730.9 KiB (100 %) 463.2 KiB/s in  1s ETA:  0s 
-<b>info: </b>downloading component &apos;rust-std&apos; for &apos;thumbv6m-none-eabi&apos; +<b>info: </b>latest update on 2024-05-02, rust version 1.78.0 (9b00956e5 2024-04-29)
-  9.1 MiB /   9.1 MiB (100 %)   3.2 MiB/s in  2s ETA:  0s +
-<b>info: </b>downloading component &apos;rust-std&apos; for &apos;arm-unknown-linux-gnueabihf&apos; +
- 21.0 MiB /  21.0 MiB (100 %  2.3 MiB/s in  8s ETA:  0s+
 <b>info: </b>downloading component &apos;rust-src&apos; <b>info: </b>downloading component &apos;rust-src&apos;
-  2.5 MiB /   2.5 MiB (100 %)   2.2 MiB/s in  1s ETA:  0s+  2.5 MiB /   2.5 MiB (100 %) 732.1 KiB/s in  4s ETA:  0s
 <b>info: </b>downloading component &apos;cargo&apos; <b>info: </b>downloading component &apos;cargo&apos;
-  8.0 MiB /   8.0 MiB (100 %)   1.3 MiB/s in  6s ETA:  0s+  8.0 MiB /   8.0 MiB (100 %) 662.4 KiB/s in 13s ETA:  0s
 <b>info: </b>downloading component &apos;clippy&apos; <b>info: </b>downloading component &apos;clippy&apos;
 +  2.3 MiB /   2.3 MiB (100 %) 627.0 KiB/s in  3s ETA:  0s
 <b>info: </b>downloading component &apos;rust-docs&apos; <b>info: </b>downloading component &apos;rust-docs&apos;
- 14.MiB /  14.MiB (100 %)   1.7 MiB/s in 10s ETA:  0s+ 15.MiB /  15.MiB (100 %) 483.2 KiB/s in 25s ETA:  0s
 <b>info: </b>downloading component &apos;rust-std&apos; <b>info: </b>downloading component &apos;rust-std&apos;
- 26.MiB /  26.MiB (100 %)   2.2 MiB/s in 17s ETA:  0s+ 24.MiB /  24.MiB (100 %) 522.4 KiB/s in 42s ETA:  0s     
 <b>info: </b>downloading component &apos;rustc&apos; <b>info: </b>downloading component &apos;rustc&apos;
- 60.MiB /  60.MiB (100 %)   3.1 MiB/s in 26s ETA:  0s+ 63.MiB /  63.MiB (100 %) 256.0 KiB/s in  2m 37s ETA:  0s    
 <b>info: </b>downloading component &apos;rustfmt&apos; <b>info: </b>downloading component &apos;rustfmt&apos;
-<b>info: </b>removing previous version of component &apos;rust-std&apos; for &apos;thumbv6m-none-eabi&apos; +  2.3 MiB   2.3 MiB (100 %) 411.8 KiB/s in  6s ETA 0s
-<b>info</b>removing previous version of component &apos;rust-std&apos; for &apos;arm-unknown-linux-gnueabihf&apos;+
 <b>info: </b>removing previous version of component &apos;rust-src&apos; <b>info: </b>removing previous version of component &apos;rust-src&apos;
 <b>info: </b>removing previous version of component &apos;cargo&apos; <b>info: </b>removing previous version of component &apos;cargo&apos;
行 941: 行 942:
 <b>info: </b>removing previous version of component &apos;rustc&apos; <b>info: </b>removing previous version of component &apos;rustc&apos;
 <b>info: </b>removing previous version of component &apos;rustfmt&apos; <b>info: </b>removing previous version of component &apos;rustfmt&apos;
-<b>info: </b>installing component &apos;rust-std&apos; for &apos;thumbv6m-none-eabi&apos; 
-  9.1 MiB /   9.1 MiB (100 %)   8.3 MiB/s in  2s ETA:  0s 
-<b>info: </b>installing component &apos;rust-std&apos; for &apos;arm-unknown-linux-gnueabihf&apos; 
- 21.0 MiB /  21.0 MiB (100 %)   8.1 MiB/s in  2s ETA:  0s 
 <b>info: </b>installing component &apos;rust-src&apos; <b>info: </b>installing component &apos;rust-src&apos;
 <b>info: </b>installing component &apos;cargo&apos; <b>info: </b>installing component &apos;cargo&apos;
 <b>info: </b>installing component &apos;clippy&apos; <b>info: </b>installing component &apos;clippy&apos;
 <b>info: </b>installing component &apos;rust-docs&apos; <b>info: </b>installing component &apos;rust-docs&apos;
- 14.MiB /  14.MiB (100 %)   3.MiB/s in  4s ETA:  0s+ 15.MiB /  15.MiB (100 %)   4.MiB/s in  3s ETA:  0s
 <b>info: </b>installing component &apos;rust-std&apos; <b>info: </b>installing component &apos;rust-std&apos;
- 26.MiB /  26.MiB (100 %)   6.MiB/s in  4s ETA:  0s+ 24.MiB /  24.MiB (100 %)   6.MiB/s in  3s ETA:  0s
 <b>info: </b>installing component &apos;rustc&apos; <b>info: </b>installing component &apos;rustc&apos;
- 60.MiB /  60.MiB (100 %)   5.MiB/s in 10s ETA:  0s+ 63.MiB /  63.MiB (100 %)   9.MiB/s in  7s ETA:  0s
 <b>info: </b>installing component &apos;rustfmt&apos; <b>info: </b>installing component &apos;rustfmt&apos;
-<b>info: </b>syncing channel updates for &apos;nightly-x86_64-unknown-linux-gnu&apos; 
-756.5 KiB / 756.5 KiB (100 %) 327.7 KiB/s in  3s ETA:  0s 
-<b>info: </b>latest update on 2024-03-25, rust version 1.79.0-nightly (0824b300e 2024-03-24) 
-<b>info: </b>downloading component &apos;rust-src&apos; 
-  2.5 MiB /   2.5 MiB (100 %) 515.1 KiB/s in  6s ETA:  0s 
-<b>info: </b>downloading component &apos;rust-std&apos; for &apos;riscv32imac-unknown-none-elf&apos; 
-  9.2 MiB /   9.2 MiB (100 %)   2.2 MiB/s in  4s ETA:  0s 
-<b>info: </b>downloading component &apos;rust-std&apos; for &apos;riscv32imc-unknown-none-elf&apos; 
-  9.0 MiB /   9.0 MiB (100 %)   3.9 MiB/s in  9s ETA:  0s 
-<b>info: </b>downloading component &apos;llvm-tools&apos; 
- 31.3 MiB /  31.3 MiB (100 %) 690.1 KiB/s in  2m 43s ETA:  0s     
-<b>info: </b>downloading component &apos;cargo&apos; 
-  8.1 MiB /   8.1 MiB (100 %)   3.6 MiB/s in  2s ETA:  0s 
-<b>info: </b>downloading component &apos;rust-std&apos; 
- 26.3 MiB /  26.3 MiB (100 %)   4.4 MiB/s in  6s ETA:  0s 
-<b>info: </b>downloading component &apos;rustc&apos; 
- 64.8 MiB /  64.8 MiB (100 %)   4.2 MiB/s in 20s ETA:  0s 
-<b>info: </b>removing previous version of component &apos;rust-src&apos; 
-<b>info: </b>removing previous version of component &apos;rust-std&apos; for &apos;riscv32imac-unknown-none-elf&apos; 
-<b>info: </b>removing previous version of component &apos;rust-std&apos; for &apos;riscv32imc-unknown-none-elf&apos; 
-<b>info: </b>removing previous version of component &apos;llvm-tools&apos; 
-<b>info: </b>removing previous version of component &apos;cargo&apos; 
-<b>info: </b>removing previous version of component &apos;rust-std&apos; 
-<b>info: </b>removing previous version of component &apos;rustc&apos; 
-<b>info: </b>installing component &apos;rust-src&apos; 
-<b>info: </b>installing component &apos;rust-std&apos; for &apos;riscv32imac-unknown-none-elf&apos; 
-  9.2 MiB /   9.2 MiB (100 %)   8.5 MiB/s in  1s ETA:  0s 
-<b>info: </b>installing component &apos;rust-std&apos; for &apos;riscv32imc-unknown-none-elf&apos; 
-  9.0 MiB /   9.0 MiB (100 %)   8.5 MiB/s in  1s ETA:  0s 
-<b>info: </b>installing component &apos;llvm-tools&apos; 
- 31.3 MiB /  31.3 MiB (100 %)   9.2 MiB/s in  3s ETA:  0s 
-<b>info: </b>installing component &apos;cargo&apos; 
-<b>info: </b>installing component &apos;rust-std&apos; 
- 26.3 MiB /  26.3 MiB (100 %)   8.5 MiB/s in  3s ETA:  0s 
-<b>info: </b>installing component &apos;rustc&apos; 
- 64.8 MiB /  64.8 MiB (100 %)   7.3 MiB/s in  8s ETA:  0s 
 <b>info: </b>checking for self-update <b>info: </b>checking for self-update
  
-   <font color="#26A269"><b>stable-x86_64-unknown-linux-gnu updated</b></font> - rustc 1.77.0 (aedd173a2 2024-03-17) (from rustc 1.74.1 (a28077b28 2023-12-04)) +  <font color="#26A269"><b>stable-x86_64-unknown-linux-gnu updated</b></font> - rustc 1.78.0 (9b00956e5 2024-04-29) (from rustc 1.65.0 (897e37553 2022-11-02))
-  <font color="#26A269"><b>nightly-x86_64-unknown-linux-gnu updated</b></font> - rustc 1.79.0-nightly (0824b300e 2024-03-24) (from (timeout reading rustc version))+
  
 <b>info: </b>cleaning up downloads &amp; tmp directories <b>info: </b>cleaning up downloads &amp; tmp directories
行 1428: 行 1388:
 x86_64-unknown-netbsd x86_64-unknown-netbsd
 x86_64-unknown-redox x86_64-unknown-redox
 +</pre></html></WRAP>
 +</WRAP>
 +
 +==== cross のインストール ====
 +公式: [[git>cross-rs/cross|cross-rs/cross: “Zero setup” cross compilation and “cross testing” of Rust crates]] [[gtr>https://github.com/cross-rs/cross|翻訳]]\\
 +<WRAP color_term>
 +<WRAP color_command><html><pre>
 +<font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> install cross <font color="#A347BA">--git</font> https://github.com/cross-rs/cross
 +</pre></html></WRAP>
 +<WRAP color_result_hlong><html><pre>
 +<font color="#26A269"><b>    Updating</b></font> git repository `https://github.com/cross-rs/cross`
 +<font color="#26A269"><b>    Updating</b></font> git submodule `https://github.com/cross-rs/cross-toolchains.git`
 +<font color="#26A269"><b>  Installing</b></font> cross v0.2.5 (https://github.com/cross-rs/cross#6d097fb5)
 +<font color="#26A269"><b>    Updating</b></font> crates.io index
 +<font color="#26A269"><b>  Downloaded</b></font> is-terminal v0.4.12
 +<font color="#26A269"><b>  Downloaded</b></font> signal-hook-registry v1.4.2
 +<font color="#26A269"><b>  Downloaded</b></font> winnow v0.5.40
 +<font color="#26A269"><b>  Downloaded</b></font> 3 crates (184.8 KB) in 0.56s
 +<font color="#26A269"><b>   Compiling</b></font> proc-macro2 v1.0.81
 +<font color="#26A269"><b>   Compiling</b></font> unicode-ident v1.0.12
 +<font color="#26A269"><b>   Compiling</b></font> libc v0.2.153
 +<font color="#26A269"><b>   Compiling</b></font> serde v1.0.199
 +<font color="#26A269"><b>   Compiling</b></font> cfg-if v1.0.0
 +<font color="#26A269"><b>   Compiling</b></font> rustix v0.38.34
 +<font color="#26A269"><b>   Compiling</b></font> cc v1.0.95
 +<font color="#26A269"><b>   Compiling</b></font> utf8parse v0.2.1
 +<font color="#26A269"><b>   Compiling</b></font> anstyle-parse v0.2.3
 +<font color="#26A269"><b>   Compiling</b></font> linux-raw-sys v0.4.13
 +<font color="#26A269"><b>   Compiling</b></font> quote v1.0.36
 +<font color="#26A269"><b>   Compiling</b></font> hashbrown v0.14.3
 +<font color="#26A269"><b>   Compiling</b></font> syn v2.0.60
 +<font color="#26A269"><b>   Compiling</b></font> atty v0.2.14
 +<font color="#26A269"><b>   Compiling</b></font> backtrace v0.3.71
 +<font color="#26A269"><b>   Compiling</b></font> eyre v0.6.12
 +<font color="#26A269"><b>   Compiling</b></font> is_ci v1.2.0
 +<font color="#26A269"><b>   Compiling</b></font> semver v1.0.22
 +<font color="#26A269"><b>   Compiling</b></font> bitflags v2.5.0
 +<font color="#26A269"><b>   Compiling</b></font> anstyle v1.0.6
 +<font color="#26A269"><b>   Compiling</b></font> equivalent v1.0.1
 +<font color="#26A269"><b>   Compiling</b></font> anstyle-query v1.0.2
 +<font color="#26A269"><b>   Compiling</b></font> gimli v0.28.1
 +<font color="#26A269"><b>   Compiling</b></font> adler v1.0.2
 +<font color="#26A269"><b>   Compiling</b></font> colorchoice v1.0.0
 +<font color="#26A269"><b>   Compiling</b></font> memchr v2.7.2
 +<font color="#26A269"><b>   Compiling</b></font> miniz_oxide v0.7.2
 +<font color="#26A269"><b>   Compiling</b></font> object v0.32.2
 +<font color="#26A269"><b>   Compiling</b></font> anstream v0.6.13
 +<font color="#26A269"><b>   Compiling</b></font> indexmap v2.2.6
 +<font color="#26A269"><b>   Compiling</b></font> addr2line v0.21.0
 +<font color="#26A269"><b>   Compiling</b></font> supports-color v1.3.1
 +<font color="#26A269"><b>   Compiling</b></font> signal-hook v0.3.17
 +<font color="#26A269"><b>   Compiling</b></font> serde_json v1.0.116
 +<font color="#26A269"><b>   Compiling</b></font> rustc-demangle v0.1.23
 +<font color="#26A269"><b>   Compiling</b></font> serde_derive v1.0.199
 +<font color="#26A269"><b>   Compiling</b></font> heck v0.5.0
 +<font color="#26A269"><b>   Compiling</b></font> indenter v0.3.3
 +<font color="#26A269"><b>   Compiling</b></font> winnow v0.5.40
 +<font color="#26A269"><b>   Compiling</b></font> once_cell v1.19.0
 +<font color="#26A269"><b>   Compiling</b></font> clap_lex v0.7.0
 +<font color="#26A269"><b>   Compiling</b></font> strsim v0.11.1
 +<font color="#26A269"><b>   Compiling</b></font> thiserror v1.0.59
 +<font color="#26A269"><b>   Compiling</b></font> clap_builder v4.5.2
 +<font color="#26A269"><b>   Compiling</b></font> clap_derive v4.5.4
 +<font color="#26A269"><b>   Compiling</b></font> thiserror-impl v1.0.59
 +<font color="#26A269"><b>   Compiling</b></font> owo-colors v3.5.0
 +<font color="#26A269"><b>   Compiling</b></font> signal-hook-registry v1.4.2
 +<font color="#26A269"><b>   Compiling</b></font> dirs-sys v0.3.7
 +<font color="#26A269"><b>   Compiling</b></font> home v0.5.9
 +<font color="#26A269"><b>   Compiling</b></font> bitflags v1.3.2
 +<font color="#26A269"><b>   Compiling</b></font> cross v0.2.5 (/home/tomoyan/.cargo/git/checkouts/cross-dac8861107f29545/6d097fb)
 +<font color="#26A269"><b>   Compiling</b></font> either v1.11.0
 +<font color="#26A269"><b>   Compiling</b></font> ryu v1.0.17
 +<font color="#26A269"><b>   Compiling</b></font> itoa v1.0.11
 +<font color="#26A269"><b>   Compiling</b></font> fastrand v2.1.0
 +<font color="#26A269"><b>   Compiling</b></font> which v4.4.2
 +<font color="#26A269"><b>   Compiling</b></font> toml_datetime v0.6.5
 +<font color="#26A269"><b>   Compiling</b></font> serde_spanned v0.6.5
 +<font color="#26A269"><b>   Compiling</b></font> tempfile v3.10.1
 +<font color="#26A269"><b>   Compiling</b></font> toml_edit v0.19.15
 +<font color="#26A269"><b>   Compiling</b></font> serde_ignored v0.1.10
 +<font color="#26A269"><b>   Compiling</b></font> nix v0.26.4
 +<font color="#26A269"><b>   Compiling</b></font> directories v4.0.1
 +<font color="#26A269"><b>   Compiling</b></font> color-eyre v0.6.3
 +<font color="#26A269"><b>   Compiling</b></font> rustc_version v0.4.0
 +<font color="#26A269"><b>   Compiling</b></font> toml v0.7.8
 +<font color="#26A269"><b>   Compiling</b></font> clap v4.5.4
 +<font color="#26A269"><b>   Compiling</b></font> is-terminal v0.4.12
 +<font color="#26A269"><b>   Compiling</b></font> shell-words v1.1.0
 +<font color="#26A269"><b>   Compiling</b></font> const-sha1 v0.2.0
 +<font color="#26A269"><b>   Compiling</b></font> shell-escape v0.1.5
 +<font color="#26A269"><b>    Finished</b></font> release [optimized] target(s) in 2m 09s
 +<font color="#26A269"><b>   Replacing</b></font> /home/tomoyan/.cargo/bin/cross
 +<font color="#26A269"><b>   Replacing</b></font> /home/tomoyan/.cargo/bin/cross-util
 +<font color="#26A269"><b>    Replaced</b></font> package `cross v0.2.5` with `cross v0.2.5 (https://github.com/cross-rs/cross#6d097fb5)` (executables `cross`, `cross-util`)
 </pre></html></WRAP> </pre></html></WRAP>
 </WRAP> </WRAP>
行 1945: 行 1999:
 [[https://langserver.org/|Langserver.org]]\\ [[https://langserver.org/|Langserver.org]]\\
  
-==== Web Framework ====+==== Application Frameworks ====
 [[https://trends.google.com/trends/explore?cat=31&date=2015-01-01%202023-09-07&q=Actix%20Web,Axum%20Rust,Rocket%20Rust,Gotham%20Rust,Tide%20Rust&hl=ja|Actix Web, Axum Rust, Rocket Rust, Gotham Rust, Tide Rust - 調べる - Google トレンド]]\\ [[https://trends.google.com/trends/explore?cat=31&date=2015-01-01%202023-09-07&q=Actix%20Web,Axum%20Rust,Rocket%20Rust,Gotham%20Rust,Tide%20Rust&hl=ja|Actix Web, Axum Rust, Rocket Rust, Gotham Rust, Tide Rust - 調べる - Google トレンド]]\\
-[[https://www.shuttle.rs/blog/2023/08/23/rust-web-framework-comparison|Best Rust Web Frameworks to Use in 2023]] [[gtr>https://www.shuttle.rs/blog/2023/08/23/rust-web-framework-comparison|翻訳]]\\+参考: [[https://www.shuttle.rs/blog/2023/08/23/rust-web-framework-comparison|Best Rust Web Frameworks to Use in 2023]] [[gtr>https://www.shuttle.rs/blog/2023/08/23/rust-web-framework-comparison|翻訳]]\\ 
 +  [[https://fettblog.eu/slides/microservices-with-rust-and-tokio/|Microservices with Rust and Tokio | Slides + Coverage]]\\ 
 + 
 +以下は 2024/05/16 現在 [[https://www.shuttle.rs/|Shuttle - Build Backends Fast]] のテンプレートで選択できるフレームワークの一覧...🤔\\ 
 +<html><style> 
 +  .wrap_rust-framework table .col0 { 
 +    width: 230px; 
 +  } 
 +</style></html> 
 +<WRAP mintbl rust-framework> 
 +| [[https://actix.rs/|Actix]]  | 強力で高速な Web フレームワーク 
 +| [[https://docs.rs/axum/|axum - Rust]]  | Tokio エコシステムのモジュラー Web フレームワーク 
 +| [[https://bevyengine.org/|Bevy Engine]]  | WASM にコンパイルされるデータ駆動型ゲーム エンジン 
 +| [[https://loco.rs/|Loco | Loco]]  | バッテリー付属の Axum に基づく Web フレームワーク 
 +| [[https://docs.rs/poem/|poem - Rust]]  | フル機能を備えた使いやすい Web フレームワーク 
 +| [[https://docs.rs/poise/|poise - Rust]]  | 優れたスラッシュコマンドサポートを備えた Discord Bot フレームワーク 
 +| [[https://rocket.rs/|Rocket - Simple, Fast, Type-Safe Web Framework for Rust]]  | シンプルで使いやすいWebフレームワーク 
 +| [[https://salvo.rs/|Home | Salvo]]  | フル機能を備えた使いやすい Web フレームワーク 
 +| [[https://docs.rs/serenity/|serenity - Rust]]  | Discordボットフレームワーク 
 +| [[https://docs.rs/thruster/|thruster - Rust]]  | Web フレームワーク 
 +| [[https://docs.rs/tide/|tide - Rust]]  | Web フレームワーク 
 +| [[https://docs.rs/tower/|tower - Rust]]  | モジュラーサービスライブラリ 
 +| [[https://docs.rs/warp/|warp - Rust]]  | Web フレームワーク 
 +</WRAP> 
 + 
 +Rust / Wasm クライアント Web アプリ フレームワーク\\ 
 +[[https://yew.rs/|Yew]]\\ 
 + 
 +非同期ランタイム\\ 
 +[[https://tokio.rs/|Tokio - An asynchronous Rust runtime]]\\ 
 +Rust 用の WebAssembly (WASM) Web アプリケーション バンドラー\\ 
 +[[https://trunkrs.dev/|Trunk | Build, bundle & ship your Rust WASM application to the web]]\\ 
 + 
 +Rust 用のエレガントな GUI ライブラリ\\ 
 +[[https://dioxuslabs.com/|Dioxus | An elegant GUI library for Rust]]\\ 
 + 
 +==== ORM - Object Relational Mapper ==== 
 +参考: [[https://www.shuttle.rs/blog/2024/01/16/best-orm-rust|A Guide to Rust ORMs in 2024]] [[gtr>https://www.shuttle.rs/blog/2024/01/16/best-orm-rust|翻訳]]\\ 
 + 
 +=== SeaORM === 
 +公式: [[https://www.sea-ql.org/SeaORM/|SeaORM 🐚 An async & dynamic ORM for Rust]]\\ 
 +ソースコード: [[git>SeaQL/sea-orm|SeaQL/sea-orm: 🐚 An async & dynamic ORM for Rust]]\\ 
 + 
 +=== Diesel === 
 +公式: [[https://diesel.rs/|Diesel is a Safe, Extensible ORM and Query Builder for Rust]]\\ 
 +ソースコード: [[git>diesel-rs/diesel|diesel-rs/diesel: A safe, extensible ORM and Query Builder for Rust]]\\ 
 + 
 +[[.rust:diesel|Diesel]]\\
  
 ==== Web ベースの Rust シミュレーター ==== ==== Web ベースの Rust シミュレーター ====
行 2666: 行 2767:
 ==== 付録 ==== ==== 付録 ====
 インストーラスクリプトの内容\\ インストーラスクリプトの内容\\
-<WRAP mincode><code+<WRAP color_term> 
-$ curl --proto '=https--tlsv1.2 -sSf https://sh.rustup.rs | cat +<WRAP color_command><html><pre
-</code></WRAP> +<font color="#0087FF"><b>$</b></font> <font color="#26A269">curl</font> <font color="#A347BA">--proto</font> <font color="#A2734C">&apos;=https&apos;</font> <font color="#A347BA">--tlsv1.2</font> <font color="#A347BA">-sSf</font> https://sh.rustup.rs <font color="#12488B"><b>|</b></font> <font color="#26A269">bat</font> <font color="#A347BA">-p</font> <font color="#A347BA">-l</font> sh <font color="#A347BA">--pager</font> never 
-<WRAP mincode_long><code bash+</pre></html></WRAP> 
-#!/bin/sh +<WRAP color_result_long><html><pre class=bat
-# shellcheck shell=dash+<font color="#7C7865">#!/bin/sh</font> 
 +<font color="#7C7865"># shellcheck shell=dash</font> 
 +<font color="#7C7865"># shellcheck disable=SC2039  # local is non-POSIX</font>
  
-# This is just a little script that can be downloaded from the internet to +<font color="#7C7865"># This is just a little script that can be downloaded from the internet to</font> 
-# install rustup. It just does platform detection, downloads the installer +<font color="#7C7865"># install rustup. It just does platform detection, downloads the installer</font> 
-# and runs it.+<font color="#7C7865"># and runs it.</font>
  
-# It runs on Unix shells like {a,ba,da,k,z}sh. It uses the common `local` +<font color="#7C7865"># It runs on Unix shells like {a,ba,da,k,z}sh. It uses the common `local`</font> 
-# extension. Note: Most shells limit `local` to 1 var per line, contra bash.+<font color="#7C7865"># extension. Note: Most shells limit `local` to 1 var per line, contra bash.</font>
  
-if [ "$KSH_VERSION" = 'Version JM 93t+ 2010-03-05' ]; then +<font color="#7C7865"># Some versions of ksh have no `local` keyword. Alias it to `typeset`, but</font> 
-    The version of ksh93 that ships with many illumos systems does not +<font color="#7C7865"># beware this makes variables global with f()-style function syntax in ksh93.</font> 
-    support the "localextension.  Print a message rather than fail in +<font color="#7C7865"># mksh has this alias by default.</font> 
-    # subtle ways later on: +<font color="#A6E22E">has_local</font><font color="#FFFFFF">() {</font> 
-    echo 'rustup does not work with this ksh93 version; please try bash!' >&2 +<font color="#FFFFFF">    </font><font color="#7C7865"># shellcheck disable=SC2034  # deliberately unused</font> 
-    exit 1 +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _has_local</font
-fi+<font color="#FFFFFF">}</font>
  
 +<font color="#FFFFFF">has_local </font><font color="#BE84FF">2</font><font color="#F92672">&gt;</font><font color="#FFFFFF">/dev/null </font><font color="#F92672">||</font><font color="#FFFFFF"> </font><font color="#66D9EF">alias</font><font color="#FFFFFF"> </font><font color="#A6E22E">local</font><font color="#F92672">=</font><font color="#E6DB74">typeset</font>
  
-set -u+<font color="#A6E22E">is_zsh</font><font color="#FFFFFF">() {</font> 
 +<font color="#FFFFFF">    </font><font color="#66D9EF">[</font><font color="#FFFFFF"> </font><font color="#FD971F">-n</font><font color="#FFFFFF"> &quot;$</font><font color="#E6DB74">{</font><font color="#FFFFFF">ZSH_VERSION</font><font color="#F92672">-</font><font color="#E6DB74">}</font><font color="#FFFFFF">&quot; </font><font color="#66D9EF">]</font> 
 +<font color="#FFFFFF">}</font>
  
-If RUSTUP_UPDATE_ROOT is unset or empty, default it. +<font color="#66D9EF">set</font><font color="#FFFFFF"> </font><font color="#FD971F">-u</font>
-RUSTUP_UPDATE_ROOT="${RUSTUP_UPDATE_ROOT:-https://static.rust-lang.org/rustup}"+
  
-#XXX: If you change anything hereplease make the same changes in setup_mode.rs +<font color="#7C7865"># If RUSTUP_UPDATE_ROOT is unset or emptydefault it.</font> 
-usage() { +<font color="#FFFFFF">RUSTUP_UPDATE_ROOT</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$</font><font color="#E6DB74">{</font><font color="#FFFFFF">RUSTUP_UPDATE_ROOT</font><font color="#F92672">:-</font><font color="#E6DB74">https://static.rust-lang.org/rustup}</font><font color="#FFFFFF">&quot;</font>
-    cat 1>&<<EOF +
-rustup-init 1.24.3 (c1c769109 2021-05-31) +
-The installer for rustup+
  
-USAGE+<font color="#7C7865"># NOTICEIf you change anything here, please make the same changes in setup_mode.rs</font> 
-    rustup-init [FLAGS] [OPTIONS]+<font color="#A6E22E">usage</font><font color="#FFFFFF">() {</font> 
 +<font color="#FFFFFF">    cat </font><font color="#F92672">&lt;&lt;EOF</font> 
 +<font color="#E6DB74">rustup-init 1.27.1 (a8e4f5c64 2024-04-24)</font>
  
-FLAGS: +<font color="#E6DB74">The installer for rustup</font>
-    -v, --verbose           Enable verbose output +
-    -q, --quiet             Disable progress output +
-    -y                      Disable confirmation prompt. +
-        --no-modify-path    Don't configure the PATH environment variable +
-    -h, --help              Prints help information +
-    -V, --version           Prints version information+
  
-OPTIONS: +<font color="#E6DB74">Usage: rustup-init[EXE] [OPTIONS]</font>
-        --default-host <default-host             Choose a default host triple +
-        --default-toolchain <default-toolchain>    Choose a default toolchain to install +
-        --default-toolchain none                   Do not install any toolchains +
-        --profile [minimal|default|complete      Choose a profile +
-    -c, --component <components>...                Component name to also install +
-    -t, --target <targets>...                      Target name to also install +
-EOF +
-}+
  
-main() { +<font color="#E6DB74">Options:</font> 
-    downloader --check +<font color="#E6DB74">  -v, --verbose</font> 
-    need_cmd uname +<font color="#E6DB74">          Enable verbose output</font> 
-    need_cmd mktemp +<font color="#E6DB74">  -q, --quiet</font> 
-    need_cmd chmod +<font color="#E6DB74">          Disable progress output</font> 
-    need_cmd mkdir +<font color="#E6DB74">  -y</font> 
-    need_cmd rm +<font color="#E6DB74">          Disable confirmation prompt.</font> 
-    need_cmd rmdir+<font color="#E6DB74">      --default-host &lt;default-host&gt;</font> 
 +<font color="#E6DB74">          Choose a default host triple</font> 
 +<font color="#E6DB74">      --default-toolchain &lt;default-toolchain&gt;</font> 
 +<font color="#E6DB74">          Choose a default toolchain to install. Use &apos;none&apos; to not install any toolchains at all</font> 
 +<font color="#E6DB74">      --profile &lt;profile&gt;</font> 
 +<font color="#E6DB74">          [default: default] [possible values: minimal, default, complete]</font> 
 +<font color="#E6DB74">  -c, --component &lt;components&gt;...</font> 
 +<font color="#E6DB74">          Component name to also install</font> 
 +<font color="#E6DB74">  -t, --target &lt;targets&gt;...</font> 
 +<font color="#E6DB74">          Target name to also install</font> 
 +<font color="#E6DB74">      --no-update-default-toolchain</font> 
 +<font color="#E6DB74">          Don&apos;t update any existing default toolchain after install</font> 
 +<font color="#E6DB74">      --no-modify-path</font> 
 +<font color="#E6DB74">          Don&apos;t configure the PATH environment variable</font> 
 +<font color="#E6DB74">  -h, --help</font> 
 +<font color="#E6DB74">          Print help</font> 
 +<font color="#E6DB74">  -V, --version</font> 
 +<font color="#E6DB74">          Print version</font> 
 +<font color="#F92672">EOF</font> 
 +<font color="#FFFFFF">}</font>
  
-    get_architecture || return 1 +<font color="#A6E22E">main</font><font color="#FFFFFF">() {</font> 
-    local _arch="$RETVAL+<font color="#FFFFFF">    downloader</font><font color="#FD971F"> --check</font> 
-    assert_nz "$_arch" "arch"+<font color="#FFFFFF">    need_cmd uname</font> 
 +<font color="#FFFFFF">    need_cmd mktemp</font> 
 +<font color="#FFFFFF">    need_cmd chmod</font> 
 +<font color="#FFFFFF">    need_cmd mkdir</font> 
 +<font color="#FFFFFF">    need_cmd rm</font> 
 +<font color="#FFFFFF">    need_cmd rmdir</font>
  
-    local _ext="" +<font color="#FFFFFF">    get_architecture </font><font color="#F92672">||</font><font color="#FFFFFF"> </font><font color="#F92672">return</font><font color="#FFFFFF"> 1</font> 
-    case "$_arch" in +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _arch</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$RETVAL&quot;</font> 
-        *windows*) +<font color="#FFFFFF">    assert_nz &quot;$_arch&quot; &quot;</font><font color="#E6DB74">arch</font><font color="#FFFFFF">&quot;</font>
-            _ext=".exe" +
-            ;; +
-    esac+
  
-    local _url="${RUSTUP_UPDATE_ROOT}/dist/${_arch}/rustup-init${_ext}"+<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _ext</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">case</font><font color="#FFFFFF"> &quot;$_arch&quot; </font><font color="#F92672">in</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">*</font><font color="#FFFFFF">windows</font><font color="#F92672">*)</font> 
 +<font color="#FFFFFF">            _ext</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">.exe</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">            ;;</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">esac</font>
  
-    local _dir +<font color="#FFFFFF"   </font><font color="#F92672">local</font><font color="#FFFFFF"> _url</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$</font><font color="#E6DB74">{</font><font color="#FFFFFF">RUSTUP_UPDATE_ROOT</font><font color="#E6DB74">}/dist/</font><font color="#FFFFFF">$</font><font color="#E6DB74">{</font><font color="#FFFFFF">_arch</font><font color="#E6DB74">}/rustup-init</font><font color="#FFFFFF">$</font><font color="#E6DB74">{</font><font color="#FFFFFF">_ext</font><font color="#E6DB74">}</font><font color="#FFFFFF">&quot;</font>
-    _dir="$(ensure mktemp -d)" +
-    local _file="${_dir}/rustup-init${_ext}"+
  
-    local _ansi_escapes_are_valid=false +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _dir</font> 
-    if [ -t 2 ]; then +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#F92672">!</font><font color="#FFFFFF"> _dir</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$</font><font color="#E6DB74">(</font><font color="#FFFFFF">ensure</font><font color="#E6DB74"> mktemp</font><font color="#FD971F"> -d</font><font color="#E6DB74">)</font><font color="#FFFFFF">&quot;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-        if [ "${TERM+set}" = 'set' ]; then +<font color="#FFFFFF">        </font><font color="#7C7865"># Because the previous command ran in a subshell, we must manually</font> 
-            case "$TERM" in +<font color="#FFFFFF">        </font><font color="#7C7865"># propagate exit status.</font> 
-                xterm*|rxvt*|urxvt*|linux*|vt*) +<font color="#FFFFFF">        </font><font color="#66D9EF">exit</font><font color="#FFFFFF"> 1</font> 
-                    _ansi_escapes_are_valid=true +<font color="#FFFFFF">    </font><font color="#F92672">fi</font> 
-                ;; +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _file</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$</font><font color="#E6DB74">{</font><font color="#FFFFFF">_dir</font><font color="#E6DB74">}/rustup-init</font><font color="#FFFFFF">$</font><font color="#E6DB74">{</font><font color="#FFFFFF">_ext</font><font color="#E6DB74">}</font><font color="#FFFFFF">&quot;</font>
-            esac +
-        fi +
-    fi+
  
-    check if we have to use /dev/tty to prompt the user +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _ansi_escapes_are_valid</font><font color="#F92672">=</font><font color="#E6DB74">false</font> 
-    local need_tty=yes +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> </font><font color="#FD971F">-t</font><font color="#FFFFFF"> 2 </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-    for arg in "$@"; do +<font color="#FFFFFF">        </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$</font><font color="#E6DB74">{</font><font color="#FFFFFF">TERM</font><font color="#F92672">+</font><font color="#E6DB74">set}</font><font color="#FFFFFF">&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74">set</font><font color="#FFFFFF">&apos; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-        case "$argin +<font color="#FFFFFF">            </font><font color="#F92672">case</font><font color="#FFFFFF"> &quot;$TERM&quot</font><font color="#F92672">in</font> 
-            -h|--help) +<font color="#FFFFFF">                xterm</font><font color="#F92672">*|</font><font color="#FFFFFF">rxvt</font><font color="#F92672">*|</font><font color="#FFFFFF">urxvt</font><font color="#F92672">*|</font><font color="#FFFFFF">linux</font><font color="#F92672">*|</font><font color="#FFFFFF">vt</font><font color="#F92672">*)</font> 
-                usage +<font color="#FFFFFF">                    _ansi_escapes_are_valid</font><font color="#F92672">=</font><font color="#E6DB74">true</font> 
-                exit 0 +<font color="#FFFFFF">                ;;</font> 
-                ;; +<font color="#FFFFFF">            </font><font color="#F92672">esac</font> 
-            -y) +<font color="#FFFFFF">        </font><font color="#F92672">fi</font> 
-                # user wants to skip the prompt -- we don't need /dev/tty +<font color="#FFFFFF">    </font><font color="#F92672">fi</font>
-                need_tty=no +
-                ;; +
-            *) +
-                ;; +
-        esac +
-    done+
  
-    if $_ansi_escapes_are_validthen +<font color="#FFFFFF">    </font><font color="#7C7865"># check if we have to use /dev/tty to prompt the user</font> 
-        printf "\33[1minfo:\33[0m downloading installer\n1>&2 +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> need_tty</font><font color="#F92672">=</font><font color="#E6DB74">yes</font> 
-    else +<font color="#FFFFFF">    </font><font color="#F92672">for</font><font color="#FFFFFF"> arg </font><font color="#F92672">in</font><font color="#FFFFFF"> &quot;$@&quot;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">do</font> 
-        printf '%s\n' 'infodownloading installer' 1>&2 +<font color="#FFFFFF">        </font><font color="#F92672">case</font><font color="#FFFFFF"> &quot;$arg&quot; </font><font color="#F92672">in</font> 
-    fi+<font color="#FFFFFF">            --help</font><font color="#F92672">)</font> 
 +<font color="#FFFFFF">                usage</font> 
 +<font color="#FFFFFF">                </font><font color="#66D9EF">exit</font><font color="#FFFFFF"> 0</font> 
 +<font color="#FFFFFF">                ;;</font> 
 +<font color="#FFFFFF">            </font><font color="#F92672">*)</font> 
 +<font color="#FFFFFF">                OPTIND</font><font color="#F92672">=</font><font color="#E6DB74">1</font> 
 +<font color="#FFFFFF">                </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$</font><font color="#E6DB74">{</font><font color="#FFFFFF">arg</font><font color="#F92672">%%</font><font color="#E6DB74">--</font><font color="#F92672">*</font><font color="#E6DB74">}</font><font color="#FFFFFF">&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> &quot;&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">                    </font><font color="#7C7865"># Long option (other than --help);</font> 
 +<font color="#FFFFFF">                    </font><font color="#7C7865"># don&apos;t attempt to interpret it.</font> 
 +<font color="#FFFFFF">                    </font><font color="#F92672">continue</font> 
 +<font color="#FFFFFF">                </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">                </font><font color="#F92672">while</font><font color="#FFFFFF"> </font><font color="#66D9EF">getopts</font><font color="#FFFFFF"> :hy sub_arg &quot;$arg&quot;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">do</font> 
 +<font color="#FFFFFF">                    </font><font color="#F92672">case</font><font color="#FFFFFF"> &quot;$sub_arg&quot; </font><font color="#F92672">in</font> 
 +<font color="#FFFFFF">                        h</font><font color="#F92672">)</font> 
 +<font color="#FFFFFF">                            usage</font> 
 +<font color="#FFFFFF">                            </font><font color="#66D9EF">exit</font><font color="#FFFFFF"> 0</font> 
 +<font color="#FFFFFF">                            ;;</font> 
 +<font color="#FFFFFF">                        y</font><font color="#F92672">)</font> 
 +<font color="#FFFFFF">                            </font><font color="#7C7865"># user wants to skip the prompt --</font> 
 +<font color="#FFFFFF">                            </font><font color="#7C7865"># we don&apos;t need /dev/tty</font> 
 +<font color="#FFFFFF">                            need_tty</font><font color="#F92672">=</font><font color="#E6DB74">no</font> 
 +<font color="#FFFFFF">                            ;;</font> 
 +<font color="#FFFFFF">                        </font><font color="#F92672">*)</font> 
 +<font color="#FFFFFF">                            ;;</font> 
 +<font color="#FFFFFF">                        </font><font color="#F92672">esac</font> 
 +<font color="#FFFFFF">                </font><font color="#F92672">done</font> 
 +<font color="#FFFFFF">                ;;</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">esac</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">done</font>
  
-    ensure mkdir -p "$_dir" +<font color="#FFFFFF"   </font><font color="#F92672">if</font><font color="#FFFFFF"$_ansi_escapes_are_valid</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-    ensure downloader "$_url" "$_file" "$_arch" +<font color="#FFFFFF">        </font><font color="#66D9EF">printf</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">\33[1minfo:\33[0m downloading installer\n</font><font color="#FFFFFF">&quot; </font><font color="#BE84FF">1</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
-    ensure chmod u+x "$_file" +<font color="#FFFFFF">    </font><font color="#F92672">else</font> 
-    if [ ! -x "$_file]; then +<font color="#FFFFFF">        </font><font color="#66D9EF">printf</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74">%s\n</font><font color="#FFFFFF">&apos; &apos;</font><font color="#E6DB74">info: downloading installer</font><font color="#FFFFFF">&apos; </font><font color="#BE84FF">1</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
-        printf '%s\n"Cannot execute $_file (likely because of mounting /tmp as noexec)." 1>&+<font color="#FFFFFF">    </font><font color="#F92672">fi</font>
-        printf '%s\n"Please copy the file to a location where you can execute binaries and run ./rustup-init${_ext}." 1>&+
-        exit 1 +
-    fi+
  
-    if [ "$need_tty" = "yes" ]; then +<font color="#FFFFFF">    ensure mkdir</font><font color="#FD971F"> -p</font><font color="#FFFFFF"> &quot;$_dir&quot;</font> 
-        The installer is going to want to ask for confirmation by +<font color="#FFFFFF">    ensure downloader &quot;$_url&quot; &quot;$_file&quot; &quot;$_arch&quot;</font> 
-        # reading stdin.  This script was piped into `sh` though and +<font color="#FFFFFF">    ensure chmod u+x &quot;$_file&quot;</font> 
-        doesn't have stdin to pass to its childrenInstead we're going +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> </font><font color="#F92672">!</font><font color="#FFFFFF"> </font><font color="#FD971F">-x</font><font color="#FFFFFF"> &quot;$_file&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-        # to explicitly connect /dev/tty to the installer'stdin. +<font color="#FFFFFF">        </font><font color="#66D9EF">printf</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74">%s\n</font><font color="#FFFFFF">&apos; &quot;</font><font color="#E6DB74">Cannot execute </font><font color="#FFFFFF">$_file</font><font color="#E6DB74"> (likely because of mounting /tmp as noexec).</font><font color="#FFFFFF">&quot; </font><font color="#BE84FF">1</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
-        if [ ! -t 1 ]then +<font color="#FFFFFF">        </font><font color="#66D9EF">printf</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74">%s\n</font><font color="#FFFFFF">&apos&quot;</font><font color="#E6DB74">Please copy the file to a location where you can execute binaries and run ./rustup-init</font><font color="#FFFFFF">$</font><font color="#E6DB74">{</font><font color="#FFFFFF">_ext</font><font color="#E6DB74">}.</font><font color="#FFFFFF">&quot; </font><font color="#BE84FF">1</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
-            err "Unable to run interactivelyRun with -y to accept defaults, --help for additional options+<font color="#FFFFFF">        </font><font color="#66D9EF">exit</font><font color="#FFFFFF"> 1</font> 
-        fi+<font color="#FFFFFF">    </font><font color="#F92672">fi</font>
  
-        ignore "$_file" "$@" < /dev/tty +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$need_tty&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">yes</font><font color="#FFFFFF">&quot; </font><font color="#66D9EF">]</font><font color="#FFFFFF"> </font><font color="#F92672">&amp;&amp;</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> </font><font color="#F92672">!</font><font color="#FFFFFF"> </font><font color="#FD971F">-t</font><font color="#FFFFFF"> 0 </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-    else +<font color="#FFFFFF">        </font><font color="#7C7865"># The installer is going to want to ask for confirmation by</font> 
-        ignore "$_file" "$@+<font color="#FFFFFF">        </font><font color="#7C7865"># reading stdin.  This script was piped into `sh` though and</font> 
-    fi+<font color="#FFFFFF">        </font><font color="#7C7865"># doesn&apos;t have stdin to pass to its children. Instead we&apos;re going</font> 
 +<font color="#FFFFFF">        </font><font color="#7C7865"># to explicitly connect /dev/tty to the installer&apos;s stdin.</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> </font><font color="#F92672">!</font><font color="#FFFFFF"> </font><font color="#FD971F">-t</font><font color="#FFFFFF"> 1 </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">            err &quot;</font><font color="#E6DB74">Unable to run interactively. Run with -y to accept defaults, --help for additional options</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">fi</font>
  
-    local _retval=$?+<font color="#FFFFFF">        ignore &quot;$_file&quot; &quot;$@&quot; </font><font color="#F92672">&lt;</font><font color="#FFFFFF"> /dev/tty</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">else</font> 
 +<font color="#FFFFFF">        ignore &quot;$_file&quot; &quot;$@&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">fi</font>
  
-    ignore rm "$_file" +<font color="#FFFFFF"   </font><font color="#F92672">local</font><font color="#FFFFFF"> _retval</font><font color="#F92672">=</font><font color="#FFFFFF">$?</font>
-    ignore rmdir "$_dir"+
  
-    return "$_retval+<font color="#FFFFFF">    ignore rm &quot;$_file&quot;</font> 
-}+<font color="#FFFFFF">    ignore rmdir &quot;$_dir&quot;</font>
  
-check_proc() { +<font color="#FFFFFF">    </font><font color="#F92672">return</font><font color="#FFFFFF"> &quot;$_retval&quot;</font> 
-    # Check for /proc by looking for the /proc/self/exe link +<font color="#FFFFFF">}</font>
-    This is only run on Linux +
-    if ! test -L /proc/self/exe ; then +
-        err "fatal: Unable to find /proc/self/exe.  Is /proc mounted?  Installation cannot proceed without /proc." +
-    fi +
-}+
  
-get_bitness() { +<font color="#A6E22E">check_proc</font><font color="#FFFFFF">() {</font> 
-    need_cmd head +<font color="#FFFFFF">    </font><font color="#7C7865">Check for /proc by looking for the /proc/self/exe link</font> 
-    Architecture detection without dependencies beyond coreutils. +<font color="#FFFFFF">    </font><font color="#7C7865"># This is only run on Linux</font> 
-    # ELF files start out "\x7fELF", and the following byte is +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#F92672">!</font><font color="#FFFFFF"> test</font><font color="#FD971F"> -L</font><font color="#FFFFFF"> /proc/self/exe </font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-      0x01 for 32-bit and +<font color="#FFFFFF">        err &quot;</font><font color="#E6DB74">fatal: Unable to find /proc/self/exe.  Is /proc mounted?  Installation cannot proceed without /proc.</font><font color="#FFFFFF">&quot;</font> 
-    #   0x02 for 64-bit. +<font color="#FFFFFF"   </font><font color="#F92672">fi</font> 
-    # The printf builtin on some shells like dash only supports octal +<font color="#FFFFFF">}</font>
-    escape sequences, so we use those. +
-    local _current_exe_head +
-    _current_exe_head=$(head -c 5 /proc/self/exe +
-    if [ "$_current_exe_head" = "$(printf '\177ELF\001')]; then +
-        echo 32 +
-    elif [ "$_current_exe_head" = "$(printf '\177ELF\002')]then +
-        echo 64 +
-    else +
-        err "unknown platform bitness" +
-    fi +
-}+
  
-is_host_amd64_elf() { +<font color="#A6E22E">get_bitness</font><font color="#FFFFFF">() {</font> 
-    need_cmd head +<font color="#FFFFFF">    need_cmd head</font> 
-    need_cmd tail +<font color="#FFFFFF">    </font><font color="#7C7865"># Architecture detection without dependencies beyond coreutils.</font> 
-    ELF e_machine detection without dependencies beyond coreutils. +<font color="#FFFFFF">    </font><font color="#7C7865"># ELF files start out &quot;\x7fELF&quot;and the following byte is</font> 
-    # Two-byte field at offset 0x12 indicates the CPU+<font color="#FFFFFF">    </font><font color="#7C7865">#   0x01 for 32-bit and</font> 
-    # but we're interested in it being 0x3E to indicate amd64or not that+<font color="#FFFFFF">    </font><font color="#7C7865">#   0x02 for 64-bit.</font> 
-    local _current_exe_machine +<font color="#FFFFFF">    </font><font color="#7C7865"># The printf builtin on some shells like dash only supports octal</font> 
-    _current_exe_machine=$(head -c 19 /proc/self/exe | tail -c 1+<font color="#FFFFFF">    </font><font color="#7C7865"># escape sequencesso we use those.</font> 
-    [ "$_current_exe_machine" = "$(printf '\076')" ] +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _current_exe_head</font> 
-}+<font color="#FFFFFF">    _current_exe_head</font><font color="#F92672">=</font><font color="#FFFFFF">$</font><font color="#E6DB74">(</font><font color="#FFFFFF">head</font><font color="#FD971F"> -c</font><font color="#E6DB74">/proc/self/exe )</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_current_exe_head&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> &quot;$</font><font color="#E6DB74">(</font><font color="#66D9EF">printf</font><font color="#E6DB74"> </font><font color="#FFFFFF">&apos;</font><font color="#E6DB74">\177ELF\001</font><font color="#FFFFFF">&apos;</font><font color="#E6DB74">)</font><font color="#FFFFFF">&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">        </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> 32</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">elif</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_current_exe_head&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> &quot;$</font><font color="#E6DB74">(</font><font color="#66D9EF">printf</font><font color="#E6DB74"> </font><font color="#FFFFFF">&apos;</font><font color="#E6DB74">\177ELF\002</font><font color="#FFFFFF">&apos;</font><font color="#E6DB74">)</font><font color="#FFFFFF">&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">        </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> 64</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">else</font> 
 +<font color="#FFFFFF">        err &quot;</font><font color="#E6DB74">unknown platform bitness</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">}</font>
  
-get_endianness() { +<font color="#A6E22E">is_host_amd64_elf</font><font color="#FFFFFF">() {</font> 
-    local cputype=$1 +<font color="#FFFFFF">    need_cmd head</font> 
-    local suffix_eb=$2 +<font color="#FFFFFF">    need_cmd tail</font> 
-    local suffix_el=$3+<font color="#FFFFFF">    </font><font color="#7C7865"># ELF e_machine detection without dependencies beyond coreutils.</font> 
 +<font color="#FFFFFF">    </font><font color="#7C7865"># Two-byte field at offset 0x12 indicates the CPU,</font> 
 +<font color="#FFFFFF">    </font><font color="#7C7865"># but we&apos;re interested in it being 0x3E to indicate amd64, or not that.</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _current_exe_machine</font> 
 +<font color="#FFFFFF">    _current_exe_machine</font><font color="#F92672">=</font><font color="#FFFFFF">$</font><font color="#E6DB74">(</font><font color="#FFFFFF">head</font><font color="#FD971F"> -c</font><font color="#E6DB74"> 19 /proc/self/exe </font><font color="#F92672">|</font><font color="#E6DB74"> </font><font color="#FFFFFF">tail</font><font color="#FD971F"> -c</font><font color="#E6DB74"> 1)</font> 
 +<font color="#FFFFFF">    </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_current_exe_machine&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> &quot;$</font><font color="#E6DB74">(</font><font color="#66D9EF">printf</font><font color="#E6DB74"> </font><font color="#FFFFFF">&apos;</font><font color="#E6DB74">\076</font><font color="#FFFFFF">&apos;</font><font color="#E6DB74">)</font><font color="#FFFFFF">&quot; </font><font color="#66D9EF">]</font> 
 +<font color="#FFFFFF">}</font>
  
-    detect endianness without od/hexdump, like get_bitness() does. +<font color="#A6E22E">get_endianness</font><font color="#FFFFFF">() {</font> 
-    need_cmd head +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> cputype</font><font color="#F92672">=</font><font color="#FFFFFF">$1</font> 
-    need_cmd tail+<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> suffix_eb</font><font color="#F92672">=</font><font color="#FFFFFF">$2</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> suffix_el</font><font color="#F92672">=</font><font color="#FFFFFF">$3</font>
  
-    local _current_exe_endianness +<font color="#FFFFFF"   </font><font color="#7C7865"># detect endianness without od/hexdump, like get_bitness() does.</font> 
-    _current_exe_endianness="$(head -c 6 /proc/self/exe | tail -c 1)" +<font color="#FFFFFF"   need_cmd head</font> 
-    if [ "$_current_exe_endianness= "$(printf '\001')" ]; then +<font color="#FFFFFF"   need_cmd tail</font>
-        echo "${cputype}${suffix_el}" +
-    elif [ "$_current_exe_endianness" = "$(printf '\002')]; then +
-        echo "${cputype}${suffix_eb}" +
-    else +
-        err "unknown platform endianness" +
-    fi +
-}+
  
-get_architecture() { +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _current_exe_endianness</font> 
-    local _ostype _cputype _bitness _arch _clibtype +<font color="#FFFFFF">    _current_exe_endianness</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$</font><font color="#E6DB74">(</font><font color="#FFFFFF">head</font><font color="#FD971F"> -c</font><font color="#E6DB74"> 6 /proc/self/exe </font><font color="#F92672">|</font><font color="#E6DB74"> </font><font color="#FFFFFF">tail</font><font color="#FD971F"> -c</font><font color="#E6DB74"> 1)</font><font color="#FFFFFF">&quot;</font> 
-    _ostype="$(uname -s)" +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_current_exe_endianness&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> &quot;$</font><font color="#E6DB74">(</font><font color="#66D9EF">printf</font><font color="#E6DB74"> </font><font color="#FFFFFF">&apos;</font><font color="#E6DB74">\001</font><font color="#FFFFFF">&apos;</font><font color="#E6DB74">)</font><font color="#FFFFFF">&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-    _cputype="$(uname -m)" +<font color="#FFFFFF">        </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;$</font><font color="#E6DB74">{</font><font color="#FFFFFF">cputype</font><font color="#E6DB74">}</font><font color="#FFFFFF">$</font><font color="#E6DB74">{</font><font color="#FFFFFF">suffix_el</font><font color="#E6DB74">}</font><font color="#FFFFFF">&quot;</font> 
-    _clibtype="gnu"+<font color="#FFFFFF">    </font><font color="#F92672">elif</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_current_exe_endianness&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> &quot;$</font><font color="#E6DB74">(</font><font color="#66D9EF">printf</font><font color="#E6DB74"> </font><font color="#FFFFFF">&apos;</font><font color="#E6DB74">\002</font><font color="#FFFFFF">&apos;</font><font color="#E6DB74">)</font><font color="#FFFFFF">&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">        </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;$</font><font color="#E6DB74">{</font><font color="#FFFFFF">cputype</font><font color="#E6DB74">}</font><font color="#FFFFFF">$</font><font color="#E6DB74">{</font><font color="#FFFFFF">suffix_eb</font><font color="#E6DB74">}</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">else</font> 
 +<font color="#FFFFFF">        err &quot;</font><font color="#E6DB74">unknown platform endianness</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">}</font>
  
-    if [ "$_ostypeLinux ]; then +<font color="#7C7865"># Detect the Linux/LoongArch UAPI flavor, with all errors being non-fatal.</font> 
-        if [ "$(uname -o)= Android ]; then +<font color="#7C7865"># Returns 0 or 234 in case of successful detection, 1 otherwise (/tmp being</font> 
-            _ostype=Android +<font color="#7C7865"># noexec, or other causes).</font
-        fi +<font color="#A6E22E">check_loongarch_uapi</font><font color="#FFFFFF">() {</font> 
-        if ldd --version 2>&1 | grep -q 'musl'; then +<font color="#FFFFFF">    need_cmd base64</font>
-            _clibtype="musl+
-        fi +
-    fi+
  
-    if "$_ostype" = Darwin ] && [ "$_cputype" = i386 ]then +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _tmp</font> 
-        Darwin `uname -m` lies +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#F92672">!</font><font color="#FFFFFF"> _tmp</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$</font><font color="#E6DB74">(</font><font color="#FFFFFF">ensure</font><font color="#E6DB74"> mktemp)</font><font color="#FFFFFF">&quot;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-        if sysctl hw.optional.x86_64 | grep -q ': 1'; then +<font color="#FFFFFF">        </font><font color="#F92672">return</font><font color="#FFFFFF"> 1</font> 
-            _cputype=x86_64 +<font color="#FFFFFF">    </font><font color="#F92672">fi</font>
-        fi +
-    fi+
  
-    if [ "$_ostype" = SunOS ]; then +<font color="#FFFFFF">    </font><font color="#7C7865"># Minimal Linux/LoongArch UAPI detection, exiting with 0 in case of</font> 
-        Both Solaris and illumos presently announce as "SunOSin "uname -s" +<font color="#FFFFFF">    </font><font color="#7C7865"># upstream (&quot;new world&quot;) UAPI, and 234 (-EINVAL truncated) in case of</font> 
-        so use "uname -oto disambiguate We use the full path to the +<font color="#FFFFFF">    </font><font color="#7C7865"># old-world (as deployed on several early commercial Linux distributions</font> 
-        system uname in case the user has coreutils uname first in PATH, +<font color="#FFFFFF">    </font><font color="#7C7865"># for LoongArch).</font> 
-        which has historically sometimes printed the wrong value here+<font color="#FFFFFF">    </font><font color="#7C7865">#</font> 
-        if [ "$(/usr/bin/uname -o)" = illumos ]then +<font color="#FFFFFF">    </font><font color="#7C7865"># See https://gist.github.com/xen0n/5ee04aaa6cecc5c7794b9a0c3b65fc7f for</font> 
-            _ostype=illumos +<font color="#FFFFFF">    </font><font color="#7C7865"># source to this helper binary.</font> 
-        fi+<font color="#FFFFFF">    ignore base64</font><font color="#FD971F"> -d</font><font color="#FFFFFF"> </font><font color="#F92672">&gt;</font><font color="#FFFFFF"> &quot;$_tmp&quot; </font><font color="#F92672">&lt;&lt;EOF</font> 
 +<font color="#E6DB74">f0VMRgIBAQAAAAAAAAAAAAIAAgEBAAAAeAAgAAAAAABAAAAAAAAAAAAAAAAAAAAAQQAAAEAAOAAB</font> 
 +<font color="#E6DB74">AAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAJAAAAAAAAAAkAAAAAAAAAAAA</font> 
 +<font color="#E6DB74">AQAAAAAABCiAAwUAFQAGABUAByCAAwsYggMAACsAC3iBAwAAKwAxen0n</font> 
 +<font color="#F92672">EOF</font>
  
-        illumos systems have multi-arch userlands, and "uname -m" reports the +<font color="#FFFFFF">    ignore chmod u+x &quot;$_tmp&quot;</font> 
-        machine hardware name; e.g., "i86pcon both 32- and 64-bit x86 +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> </font><font color="#F92672">!</font><font color="#FFFFFF"> </font><font color="#FD971F">-x</font><font color="#FFFFFF"> &quot;$_tmp&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-        systems.  Check for the native (widest) instruction set on the +<font color="#FFFFFF">        ignore rm &quot;$_tmp&quot;</font> 
-        # running kernel: +<font color="#FFFFFF">        </font><font color="#F92672">return</font><font color="#FFFFFF"> 1</font> 
-        if [ "$_cputype" = i86pc ]; then +<font color="#FFFFFF">    </font><font color="#F92672">fi</font>
-            _cputype="$(isainfo -n)+
-        fi +
-    fi+
  
-    case "$_ostypein+<font color="#FFFFFF">    &quot;$_tmp&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _retval</font><font color="#F92672">=</font><font color="#FFFFFF">$?</font>
  
-        Android) +<font color="#FFFFFF">    ignore rm &quot;$_tmp&quot;</font> 
-            _ostype=linux-android +<font color="#FFFFFF">    </font><font color="#F92672">return</font><font color="#FFFFFF"> &quot;$_retval&quot;</font> 
-            ;;+<font color="#FFFFFF">}</font>
  
-        Linux+<font color="#A6E22E">ensure_loongarch_uapi</font><font color="#FFFFFF">({</font> 
-            check_proc +<font color="#FFFFFF">    check_loongarch_uapi</font> 
-            _ostype=unknown-linux-$_clibtype +<font color="#FFFFFF">    </font><font color="#F92672">case</font><font color="#FFFFFF"> $? </font><font color="#F92672">in</font> 
-            _bitness=$(get_bitness+<font color="#FFFFFF">        0</font><font color="#F92672">)</font> 
-            ;;+<font color="#FFFFFF">            </font><font color="#F92672">return</font><font color="#FFFFFF"> 0</font> 
 +<font color="#FFFFFF">            ;;</font> 
 +<font color="#FFFFFF">        234</font><font color="#F92672">)</font> 
 +<font color="#FFFFFF">            </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> </font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
 +<font color="#FFFFFF">            </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74">Your Linux kernel does not provide the ABI required by this Rust</font><font color="#FFFFFF">&apos; </font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
 +<font color="#FFFFFF">            </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74">distribution.  Please check with your OS provider for how to obtain a</font><font color="#FFFFFF">&apos; </font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
 +<font color="#FFFFFF">            </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74">compatible Rust package for your system.</font><font color="#FFFFFF">&apos; </font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
 +<font color="#FFFFFF">            </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> </font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
 +<font color="#FFFFFF">            </font><font color="#66D9EF">exit</font><font color="#FFFFFF"> 1</font> 
 +<font color="#FFFFFF">            ;;</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">*)</font> 
 +<font color="#FFFFFF">            </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">Warning: Cannot determine current system&apos;s ABI flavor, continuing anyway.</font><font color="#FFFFFF">&quot; </font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
 +<font color="#FFFFFF">            </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> </font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
 +<font color="#FFFFFF">            </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74">Note that the official Rust distribution only works with the upstream</font><font color="#FFFFFF">&apos; </font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
 +<font color="#FFFFFF">            </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74">kernel ABI.  Installation will fail if your running kernel happens to be</font><font color="#FFFFFF">&apos; </font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
 +<font color="#FFFFFF">            </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74">incompatible.</font><font color="#FFFFFF">&apos; </font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
 +<font color="#FFFFFF">            ;;</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">esac</font> 
 +<font color="#FFFFFF">}</font>
  
-        FreeBSD+<font color="#A6E22E">get_architecture</font><font color="#FFFFFF">({</font> 
-            _ostype=unknown-freebsd +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _ostype _cputype _bitness _arch _clibtype</font> 
-            ;;+<font color="#FFFFFF">    _ostype</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$</font><font color="#E6DB74">(</font><font color="#FFFFFF">uname</font><font color="#FD971F"> -s</font><font color="#E6DB74">)</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">    _cputype</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$</font><font color="#E6DB74">(</font><font color="#FFFFFF">uname</font><font color="#FD971F"> -m</font><font color="#E6DB74">)</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">    _clibtype</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">gnu</font><font color="#FFFFFF">&quot;</font>
  
-        NetBSD+<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_ostype&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> Linux </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-            _ostype=unknown-netbsd +<font color="#FFFFFF">        </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$</font><font color="#E6DB74">(</font><font color="#FFFFFF">uname</font><font color="#FD971F"> -o</font><font color="#E6DB74">)</font><font color="#FFFFFF">&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> Android </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-            ;;+<font color="#FFFFFF">            _ostype</font><font color="#F92672">=</font><font color="#E6DB74">Android</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">if</font><font color="#FFFFFF"> ldd</font><font color="#FD971F"> --version</font><font color="#FFFFFF"> </font><font color="#BE84FF">2</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">1</font><font color="#FFFFFF"> </font><font color="#F92672">|</font><font color="#FFFFFF"> grep</font><font color="#FD971F"> -q</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74">musl</font><font color="#FFFFFF">&apos;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">            _clibtype</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">musl</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">fi</font>
  
-        DragonFly+<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_ostype&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> Darwin </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-            _ostype=unknown-dragonfly +<font color="#FFFFFF">        </font><font color="#7C7865"># Darwin `uname -m` can lie due to Rosetta shenanigans. If you manage to</font> 
-            ;;+<font color="#FFFFFF">        </font><font color="#7C7865"># invoke a native shell binary and then a native uname binary, you can</font> 
 +<font color="#FFFFFF">        </font><font color="#7C7865"># get the real answer, but that&apos;s hard to ensure, so instead we use</font> 
 +<font color="#FFFFFF">        </font><font color="#7C7865"># `sysctl` (which doesn&apos;t lieto check for the actual architecture.</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_cputype&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> i386 </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">            </font><font color="#7C7865"># Handling i386 compatibility mode in older macOS versions (&lt;10.15)</font> 
 +<font color="#FFFFFF">            </font><font color="#7C7865"># running on x86_64-based Macs.</font> 
 +<font color="#FFFFFF">            </font><font color="#7C7865"># Starting from 10.15, macOS explicitly bans all i386 binaries from running.</font> 
 +<font color="#FFFFFF">            </font><font color="#7C7865"># See: &lt;https://support.apple.com/en-us/HT208436&gt;</font>
  
-        Darwin) +<font color="#FFFFFF">            </font><font color="#7C7865"># Avoid `sysctl: unknown oid` stderr output and/or non-zero exit code.</font> 
-            _ostype=apple-darwin +<font color="#FFFFFF">            </font><font color="#F92672">if</font><font color="#FFFFFF"> sysctl hw.optional.x86_64 </font><font color="#BE84FF">2</font><font color="#F92672">&gt;</font><font color="#FFFFFF"> /dev/null </font><font color="#F92672">||</font><font color="#FFFFFF"> true </font><font color="#F92672">|</font><font color="#FFFFFF"> grep</font><font color="#FD971F"> -q</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74">: 1</font><font color="#FFFFFF">&apos;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-            ;;+<font color="#FFFFFF">                _cputype</font><font color="#F92672">=</font><font color="#E6DB74">x86_64</font> 
 +<font color="#FFFFFF">            </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">elif</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_cputype&quot</font><font color="#F92672">=</font><font color="#FFFFFF"> x86_64 </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">            </font><font color="#7C7865"># Handling x86-64 compatibility mode (a.k.a. Rosetta 2)</font> 
 +<font color="#FFFFFF">            </font><font color="#7C7865"># in newer macOS versions (&gt;=11) running on arm64-based Macs.</font> 
 +<font color="#FFFFFF">            </font><font color="#7C7865"># Rosetta 2 is built exclusively for x86-64 and cannot run i386 binaries.</font>
  
-        illumos) +<font color="#FFFFFF">            </font><font color="#7C7865"># Avoid `sysctl: unknown oid` stderr output and/or non-zero exit code.</font> 
-            _ostype=unknown-illumos +<font color="#FFFFFF">            </font><font color="#F92672">if</font><font color="#FFFFFF"> sysctl hw.optional.arm64 </font><font color="#BE84FF">2</font><font color="#F92672">&gt;</font><font color="#FFFFFF"> /dev/null </font><font color="#F92672">||</font><font color="#FFFFFF"> true </font><font color="#F92672">|</font><font color="#FFFFFF"> grep</font><font color="#FD971F"> -q</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74">: 1</font><font color="#FFFFFF">&apos;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-            ;;+<font color="#FFFFFF">                _cputype</font><font color="#F92672">=</font><font color="#E6DB74">arm64</font> 
 +<font color="#FFFFFF">            </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">fi</font>
  
-        MINGW* | MSYS* | CYGWIN*) +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_ostype&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> SunOS </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-            _ostype=pc-windows-gnu +<font color="#FFFFFF">        </font><font color="#7C7865"># Both Solaris and illumos presently announce as &quot;SunOS&quot; in &quot;uname -s&quot;</font> 
-            ;;+<font color="#FFFFFF">        </font><font color="#7C7865"># so use &quot;uname -o&quot; to disambiguate.  We use the full path to the</font> 
 +<font color="#FFFFFF">        </font><font color="#7C7865"># system uname in case the user has coreutils uname first in PATH,</font> 
 +<font color="#FFFFFF">        </font><font color="#7C7865"># which has historically sometimes printed the wrong value here.</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$</font><font color="#E6DB74">(</font><font color="#FFFFFF">/usr/bin/uname</font><font color="#FD971F"> -o</font><font color="#E6DB74">)</font><font color="#FFFFFF">&quot</font><font color="#F92672">=</font><font color="#FFFFFF"> illumos </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">            _ostype</font><font color="#F92672">=</font><font color="#E6DB74">illumos</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">fi</font>
  
-        *+<font color="#FFFFFF">        </font><font color="#7C7865"># illumos systems have multi-arch userlands, and &quot;uname -m&quot; reports the</font> 
-            err "unrecognized OS type: $_ostype+<font color="#FFFFFF">        </font><font color="#7C7865"># machine hardware name; e.g., &quot;i86pc&quot; on both 32- and 64-bit x86</font> 
-            ;;+<font color="#FFFFFF">        </font><font color="#7C7865"># systems.  Check for the native (widestinstruction set on the</font> 
 +<font color="#FFFFFF">        </font><font color="#7C7865"># running kernel:</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_cputype&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> i86pc </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">            _cputype</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$</font><font color="#E6DB74">(</font><font color="#FFFFFF">isainfo</font><font color="#FD971F"> -n</font><font color="#E6DB74">)</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">fi</font>
  
-    esac+<font color="#FFFFFF">    </font><font color="#F92672">case</font><font color="#FFFFFF"> &quot;$_ostype&quot; </font><font color="#F92672">in</font>
  
-    case "$_cputypein+<font color="#FFFFFF">        Android</font><font color="#F92672">)</font> 
 +<font color="#FFFFFF">            _ostype</font><font color="#F92672">=</font><font color="#E6DB74">linux-android</font> 
 +<font color="#FFFFFF">            ;;</font>
  
-        i386 | i486 | i686 | i786 | x86+<font color="#FFFFFF">        Linux</font><font color="#F92672">)</font> 
-            _cputype=i686 +<font color="#FFFFFF">            check_proc</font> 
-            ;;+<font color="#FFFFFF">            _ostype</font><font color="#F92672">=</font><font color="#E6DB74">unknown-linux-</font><font color="#FFFFFF">$_clibtype</font> 
 +<font color="#FFFFFF">            _bitness</font><font color="#F92672">=</font><font color="#FFFFFF">$</font><font color="#E6DB74">(</font><font color="#FFFFFF">get_bitness</font><font color="#E6DB74">)</font> 
 +<font color="#FFFFFF">            ;;</font>
  
-        xscale | arm) +<font color="#FFFFFF">        FreeBSD</font><font color="#F92672">)</font> 
-            _cputype=arm +<font color="#FFFFFF">            _ostype</font><font color="#F92672">=</font><font color="#E6DB74">unknown-freebsd</font> 
-            if [ "$_ostype" = "linux-android]; then +<font color="#FFFFFF">            ;;</font>
-                _ostype=linux-androideabi +
-            fi +
-            ;;+
  
-        armv6l+<font color="#FFFFFF">        NetBSD</font><font color="#F92672">)</font> 
-            _cputype=arm +<font color="#FFFFFF">            _ostype</font><font color="#F92672">=</font><font color="#E6DB74">unknown-netbsd</font> 
-            if [ "$_ostype" = "linux-android]; then +<font color="#FFFFFF"           ;;</font>
-                _ostype=linux-androideabi +
-            else +
-                _ostype="${_ostype}eabihf" +
-            fi +
-            ;;+
  
-        armv7l | armv8l+<font color="#FFFFFF">        DragonFly</font><font color="#F92672">)</font> 
-            _cputype=armv7 +<font color="#FFFFFF">            _ostype</font><font color="#F92672">=</font><font color="#E6DB74">unknown-dragonfly</font> 
-            if [ "$_ostype" = "linux-android]; then +<font color="#FFFFFF"           ;;</font>
-                _ostype=linux-androideabi +
-            else +
-                _ostype="${_ostype}eabihf" +
-            fi +
-            ;;+
  
-        aarch64 | arm64+<font color="#FFFFFF">        Darwin</font><font color="#F92672">)</font> 
-            _cputype=aarch64 +<font color="#FFFFFF">            _ostype</font><font color="#F92672">=</font><font color="#E6DB74">apple-darwin</font> 
-            ;;+<font color="#FFFFFF">            ;;</font>
  
-        x86_64 | x86-64 | x64 | amd64+<font color="#FFFFFF">        illumos</font><font color="#F92672">)</font> 
-            _cputype=x86_64 +<font color="#FFFFFF">            _ostype</font><font color="#F92672">=</font><font color="#E6DB74">unknown-illumos</font> 
-            ;;+<font color="#FFFFFF">            ;;</font>
  
-        mips+<font color="#FFFFFF">        MINGW</font><font color="#F92672">*</font><font color="#FFFFFF"> </font><font color="#F92672">|</font><font color="#FFFFFF"> MSYS</font><font color="#F92672">*</font><font color="#FFFFFF"> </font><font color="#F92672">|</font><font color="#FFFFFF"> CYGWIN</font><font color="#F92672">*</font><font color="#FFFFFF"> </font><font color="#F92672">|</font><font color="#FFFFFF"> Windows_NT</font><font color="#F92672">)</font> 
-            _cputype=$(get_endianness mips '' el) +<font color="#FFFFFF">            _ostype</font><font color="#F92672">=</font><font color="#E6DB74">pc-windows-gnu</font> 
-            ;;+<font color="#FFFFFF">            ;;</font>
  
-        mips64+<font color="#FFFFFF">        </font><font color="#F92672">*)</font> 
-            if [ "$_bitness-eq 64 ]then +<font color="#FFFFFF">            err &quot;</font><font color="#E6DB74">unrecognized OS type: </font><font color="#FFFFFF">$_ostype&quot;</font> 
-                only n64 ABI is supported for now +<font color="#FFFFFF">            ;;</font>
-                _ostype="${_ostype}abi64" +
-                _cputype=$(get_endianness mips64 '' el) +
-            fi +
-            ;;+
  
-        ppc) +<font color="#FFFFFF">    </font><font color="#F92672">esac</font>
-            _cputype=powerpc +
-            ;;+
  
-        ppc64) +<font color="#FFFFFF">    </font><font color="#F92672">case</font><font color="#FFFFFF"> &quot;$_cputype&quot</font><font color="#F92672">in</font>
-            _cputype=powerpc64 +
-            ;;+
  
-        ppc64le+<font color="#FFFFFF">        i386 </font><font color="#F92672">|</font><font color="#FFFFFF"> i486 </font><font color="#F92672">|</font><font color="#FFFFFF"> i686 </font><font color="#F92672">|</font><font color="#FFFFFF"> i786 </font><font color="#F92672">|</font><font color="#FFFFFF"> x86</font><font color="#F92672">)</font> 
-            _cputype=powerpc64le +<font color="#FFFFFF">            _cputype</font><font color="#F92672">=</font><font color="#E6DB74">i686</font> 
-            ;;+<font color="#FFFFFF">            ;;</font>
  
-        s390x+<font color="#FFFFFF">        xscale </font><font color="#F92672">|</font><font color="#FFFFFF"> arm</font><font color="#F92672">)</font> 
-            _cputype=s390x +<font color="#FFFFFF">            _cputype</font><font color="#F92672">=</font><font color="#E6DB74">arm</font> 
-            ;; +<font color="#FFFFFF">            </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_ostype&quot</font><font color="#F92672">=</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">linux-android</font><font color="#FFFFFF">&quot</font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-        riscv64) +<font color="#FFFFFF">                _ostype</font><font color="#F92672">=</font><font color="#E6DB74">linux-androideabi</font> 
-            _cputype=riscv64gc +<font color="#FFFFFF">            </font><font color="#F92672">fi</font> 
-            ;; +<font color="#FFFFFF">            ;;</font>
-        *) +
-            err "unknown CPU type: $_cputype"+
  
-    esac+<font color="#FFFFFF">        armv6l</font><font color="#F92672">)</font> 
 +<font color="#FFFFFF">            _cputype</font><font color="#F92672">=</font><font color="#E6DB74">arm</font> 
 +<font color="#FFFFFF">            </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_ostype&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">linux-android</font><font color="#FFFFFF">&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">                _ostype</font><font color="#F92672">=</font><font color="#E6DB74">linux-androideabi</font> 
 +<font color="#FFFFFF">            </font><font color="#F92672">else</font> 
 +<font color="#FFFFFF">                _ostype</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$</font><font color="#E6DB74">{</font><font color="#FFFFFF">_ostype</font><font color="#E6DB74">}eabihf</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">            </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">            ;;</font>
  
-    Detect 64-bit linux with 32-bit userland +<font color="#FFFFFF">        armv7l </font><font color="#F92672">|</font><font color="#FFFFFF"> armv8l</font><font color="#F92672">)</font> 
-    if [ "${_ostype}" = unknown-linux-gnu ] && [ "${_bitness}-eq 32 ]; then +<font color="#FFFFFF">            _cputype</font><font color="#F92672">=</font><font color="#E6DB74">armv7</font> 
-        case $_cputype in +<font color="#FFFFFF">            </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_ostype&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">linux-android</font><font color="#FFFFFF">&quot</font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-            x86_64+<font color="#FFFFFF">                _ostype</font><font color="#F92672">=</font><font color="#E6DB74">linux-androideabi</font> 
-                if [ -n "${RUSTUP_CPUTYPE:-}]; then +<font color="#FFFFFF">            </font><font color="#F92672">else</font> 
-                    _cputype="$RUSTUP_CPUTYPE" +<font color="#FFFFFF">                _ostype</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$</font><font color="#E6DB74">{</font><font color="#FFFFFF">_ostype</font><font color="#E6DB74">}eabihf</font><font color="#FFFFFF">&quot;</font> 
-                else { +<font color="#FFFFFF">            </font><font color="#F92672">fi</font> 
-                    32-bit executable for amd64 x32 +<font color="#FFFFFF">            ;;</font>
-                    if is_host_amd64_elf; then { +
-                         echo "This host is running an x32 userland; as it stands, x32 support is poor,1>&2 +
-                         echo "and there isn't a native toolchain -- you will have to install1>&2 +
-                         echo "multiarch compatibility with i686 and/or amd64, then select one1>&2 +
-                         echo "by re-running this script with the RUSTUP_CPUTYPE environment variable1>&2 +
-                         echo "set to i686 or x86_64, respectively.1>&+
-                         echo 1>&+
-                         echo "You will be able to add an x32 target after installation by running1>&+
-                         echo  rustup target add x86_64-unknown-linux-gnux321>&+
-                         exit 1 +
-                    }else +
-                        _cputype=i686 +
-                    fi +
-                }; fi +
-                ;; +
-            mips64) +
-                _cputype=$(get_endianness mips '' el) +
-                ;+
-            powerpc64) +
-                _cputype=powerpc +
-                ;; +
-            aarch64) +
-                _cputype=armv7 +
-                if [ "$_ostype" = "linux-android]; then +
-                    _ostype=linux-androideabi +
-                else +
-                    _ostype="${_ostype}eabihf" +
-                fi +
-                ;+
-            riscv64gc) +
-                err "riscv64 with 32-bit userland unsupported+
-                ;; +
-        esac +
-    fi+
  
-    Detect armv7 but without the CPU features Rust needs in that build, +<font color="#FFFFFF">        aarch64 </font><font color="#F92672">|</font><font color="#FFFFFF"> arm64</font><font color="#F92672">)</font> 
-    and fall back to arm. +<font color="#FFFFFF">            _cputype</font><font color="#F92672">=</font><font color="#E6DB74">aarch64</font> 
-    See https://github.com/rust-lang/rustup.rs/issues/587. +<font color="#FFFFFF">            ;;</font>
-    if [ "$_ostype" = "unknown-linux-gnueabihf] && [ "$_cputype= armv7 ]; then +
-        if ensure grep '^Features' /proc/cpuinfo | grep -q -v neon; then +
-            At least one processor does not have NEON. +
-            _cputype=arm +
-        fi +
-    fi+
  
-    _arch="${_cputype}-${_ostype}"+<font color="#FFFFFF">        x86_64 </font><font color="#F92672">|</font><font color="#FFFFFF"> x86-64 </font><font color="#F92672">|</font><font color="#FFFFFF"> x64 </font><font color="#F92672">|</font><font color="#FFFFFF"> amd64</font><font color="#F92672">)</font> 
 +<font color="#FFFFFF">            _cputype</font><font color="#F92672">=</font><font color="#E6DB74">x86_64</font> 
 +<font color="#FFFFFF">            ;;</font>
  
-    RETVAL="$_arch+<font color="#FFFFFF">        mips</font><font color="#F92672">)</font> 
-}+<font color="#FFFFFF">            _cputype</font><font color="#F92672">=</font><font color="#FFFFFF">$</font><font color="#E6DB74">(</font><font color="#FFFFFF">get_endianness</font><font color="#E6DB74"> mips </font><font color="#FFFFFF">&apos;&apos;</font><font color="#E6DB74"> el)</font> 
 +<font color="#FFFFFF">            ;;</font>
  
-say({ +<font color="#FFFFFF">        mips64</font><font color="#F92672">)</font> 
-    printf 'rustup: %s\n' "$1+<font color="#FFFFFF">            </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_bitness&quot; </font><font color="#FD971F">-eq</font><font color="#FFFFFF"> 64 </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-}+<font color="#FFFFFF">                </font><font color="#7C7865"># only n64 ABI is supported for now</font> 
 +<font color="#FFFFFF">                _ostype</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$</font><font color="#E6DB74">{</font><font color="#FFFFFF">_ostype</font><font color="#E6DB74">}abi64</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">                _cputype</font><font color="#F92672">=</font><font color="#FFFFFF">$</font><font color="#E6DB74">(</font><font color="#FFFFFF">get_endianness</font><font color="#E6DB74"> mips64 </font><font color="#FFFFFF">&apos;&apos;</font><font color="#E6DB74"> el)</font> 
 +<font color="#FFFFFF">            </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">            ;;</font>
  
-err({ +<font color="#FFFFFF">        ppc</font><font color="#F92672">)</font> 
-    say "$1" >&2 +<font color="#FFFFFF">            _cputype</font><font color="#F92672">=</font><font color="#E6DB74">powerpc</font> 
-    exit 1 +<font color="#FFFFFF">            ;;</font>
-}+
  
-need_cmd() { +<font color="#FFFFFF"       ppc64</font><font color="#F92672">)</font> 
-    if ! check_cmd "$1"; then +<font color="#FFFFFF">            _cputype</font><font color="#F92672">=</font><font color="#E6DB74">powerpc64</font> 
-        err "need '$1' (command not found)" +<font color="#FFFFFF">            ;;</font>
-    fi +
-}+
  
-check_cmd({ +<font color="#FFFFFF">        ppc64le</font><font color="#F92672">)</font> 
-    command -v "$1" > /dev/null 2>&1 +<font color="#FFFFFF">            _cputype</font><font color="#F92672">=</font><font color="#E6DB74">powerpc64le</font
-}+<font color="#FFFFFF">            ;;</font>
  
-assert_nz({ +<font color="#FFFFFF">        s390x</font><font color="#F92672">)</font> 
-    if [ -z "$1]then err "assert_nz $2"; fi +<font color="#FFFFFF">            _cputype</font><font color="#F92672">=</font><font color="#E6DB74">s390x</font> 
-}+<font color="#FFFFFF">            ;;</font> 
 +<font color="#FFFFFF">        riscv64</font><font color="#F92672">)</font> 
 +<font color="#FFFFFF">            _cputype</font><font color="#F92672">=</font><font color="#E6DB74">riscv64gc</font> 
 +<font color="#FFFFFF">            ;;</font> 
 +<font color="#FFFFFF">        loongarch64</font><font color="#F92672">)</font> 
 +<font color="#FFFFFF">            _cputype</font><font color="#F92672">=</font><font color="#E6DB74">loongarch64</font> 
 +<font color="#FFFFFF">            ensure_loongarch_uapi</font> 
 +<font color="#FFFFFF">            ;;</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">*)</font> 
 +<font color="#FFFFFF">            err &quot;</font><font color="#E6DB74">unknown CPU type: </font><font color="#FFFFFF">$_cputype&quot;</font>
  
-Run a command that should never fail. If the command fails execution +<font color="#FFFFFF">    </font><font color="#F92672">esac</font>
-# will immediately terminate with an error showing the failing +
-# command. +
-ensure() { +
-    if ! "$@"; then err "command failed: $*"; fi +
-}+
  
-# This is just for indicating that commands' results are being +<font color="#FFFFFF">    </font><font color="#7C7865"># Detect 64-bit linux with 32-bit userland</font> 
-intentionally ignored. Usuallybecause it's being executed +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$</font><font color="#E6DB74">{</font><font color="#FFFFFF">_ostype</font><font color="#E6DB74">}</font><font color="#FFFFFF">&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> unknown-linux-gnu </font><font color="#66D9EF">]</font><font color="#FFFFFF"> </font><font color="#F92672">&amp;&amp;</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$</font><font color="#E6DB74">{</font><font color="#FFFFFF">_bitness</font><font color="#E6DB74">}</font><font color="#FFFFFF">&quot; </font><font color="#FD971F">-eq</font><font color="#FFFFFF"> 32 </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-as part of error handling+<font color="#FFFFFF">        </font><font color="#F92672">case</font><font color="#FFFFFF"> $_cputype </font><font color="#F92672">in</font> 
-ignore() { +<font color="#FFFFFF">            x86_64</font><font color="#F92672">)</font> 
-    "$@+<font color="#FFFFFF">                </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> </font><font color="#FD971F">-n</font><font color="#FFFFFF"> &quot;$</font><font color="#E6DB74">{</font><font color="#FFFFFF">RUSTUP_CPUTYPE</font><font color="#F92672">:-</font><font color="#E6DB74">}</font><font color="#FFFFFF">&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-}+<font color="#FFFFFF">                    _cputype</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$RUSTUP_CPUTYPE&quot;</font> 
 +<font color="#FFFFFF">                </font><font color="#F92672">else</font><font color="#FFFFFF"> {</font> 
 +<font color="#FFFFFF">                    </font><font color="#7C7865"># 32-bit executable for amd64 = x32</font> 
 +<font color="#FFFFFF">                    </font><font color="#F92672">if</font><font color="#FFFFFF"> is_host_amd64_elf</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font><font color="#FFFFFF"> {</font> 
 +<font color="#FFFFFF">                         </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">This host is running an x32 userland; as it stands, x32 support is poor,</font><font color="#FFFFFF">&quot; </font><font color="#BE84FF">1</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
 +<font color="#FFFFFF">                         </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">and there isn&apos;t a native toolchain -- you will have to install</font><font color="#FFFFFF">&quot; </font><font color="#BE84FF">1</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
 +<font color="#FFFFFF">                         </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">multiarch compatibility with i686 and/or amd64then select one</font><font color="#FFFFFF">&quot; </font><font color="#BE84FF">1</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
 +<font color="#FFFFFF">                         </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">by re-running this script with the RUSTUP_CPUTYPE environment variable</font><font color="#FFFFFF">&quot; </font><font color="#BE84FF">1</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
 +<font color="#FFFFFF">                         </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">set to i686 or x86_64, respectively.</font><font color="#FFFFFF">&quot; </font><font color="#BE84FF">1</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
 +<font color="#FFFFFF">                         </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> </font><font color="#BE84FF">1</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
 +<font color="#FFFFFF">                         </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">You will be able to add an x32 target after installation by running</font><font color="#FFFFFF">&quot; </font><font color="#BE84FF">1</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
 +<font color="#FFFFFF">                         </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">  rustup target add x86_64-unknown-linux-gnux32</font><font color="#FFFFFF">&quot; </font><font color="#BE84FF">1</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
 +<font color="#FFFFFF">                         </font><font color="#66D9EF">exit</font><font color="#FFFFFF"> 1</font> 
 +<font color="#FFFFFF">                    }</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">else</font> 
 +<font color="#FFFFFF">                        _cputype</font><font color="#F92672">=</font><font color="#E6DB74">i686</font> 
 +<font color="#FFFFFF">                    </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">                }</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">                ;;</font> 
 +<font color="#FFFFFF">            mips64</font><font color="#F92672">)</font> 
 +<font color="#FFFFFF">                _cputype</font><font color="#F92672">=</font><font color="#FFFFFF">$</font><font color="#E6DB74">(</font><font color="#FFFFFF">get_endianness</font><font color="#E6DB74"> mips </font><font color="#FFFFFF">&apos;&apos;</font><font color="#E6DB74"> el)</font> 
 +<font color="#FFFFFF">                ;;</font> 
 +<font color="#FFFFFF">            powerpc64</font><font color="#F92672">)</font> 
 +<font color="#FFFFFF">                _cputype</font><font color="#F92672">=</font><font color="#E6DB74">powerpc</font> 
 +<font color="#FFFFFF">                ;;</font> 
 +<font color="#FFFFFF">            aarch64</font><font color="#F92672">)</font> 
 +<font color="#FFFFFF">                _cputype</font><font color="#F92672">=</font><font color="#E6DB74">armv7</font> 
 +<font color="#FFFFFF">                </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_ostype&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">linux-android</font><font color="#FFFFFF">&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">                    _ostype</font><font color="#F92672">=</font><font color="#E6DB74">linux-androideabi</font> 
 +<font color="#FFFFFF">                </font><font color="#F92672">else</font> 
 +<font color="#FFFFFF">                    _ostype</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$</font><font color="#E6DB74">{</font><font color="#FFFFFF">_ostype</font><font color="#E6DB74">}eabihf</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">                </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">                ;;</font> 
 +<font color="#FFFFFF">            riscv64gc</font><font color="#F92672">)</font> 
 +<font color="#FFFFFF">                err &quot;</font><font color="#E6DB74">riscv64 with 32-bit userland unsupported</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">                ;;</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">esac</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">fi</font>
  
-This wraps curl or wget. Try curl first, if not installed+<font color="#FFFFFF">    </font><font color="#7C7865"># Detect armv7 but without the CPU features Rust needs in that build,</font> 
-use wget instead+<font color="#FFFFFF">    </font><font color="#7C7865"># and fall back to arm.</font> 
-downloader() { +<font color="#FFFFFF">    </font><font color="#7C7865"># See https://github.com/rust-lang/rustup.rs/issues/587.</font> 
-    local _dld +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_ostype&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">unknown-linux-gnueabihf</font><font color="#FFFFFF">&quot; </font><font color="#66D9EF">]</font><font color="#FFFFFF"> </font><font color="#F92672">&amp;&amp;</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_cputype&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> armv7 </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-    local _ciphersuites +<font color="#FFFFFF">        </font><font color="#F92672">if</font><font color="#FFFFFF"> ensure grep &apos;</font><font color="#E6DB74">^Features</font><font color="#FFFFFF">&apos; /proc/cpuinfo </font><font color="#F92672">|</font><font color="#FFFFFF"> grep</font><font color="#FD971F"> -E -q -v</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74">neon|simd</font><font color="#FFFFFF">&apos;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-    local _err +<font color="#FFFFFF">            </font><font color="#7C7865"># At least one processor does not have NEON (which is asimd on armv8+).</font> 
-    local _status +<font color="#FFFFFF">            _cputype</font><font color="#F92672">=</font><font color="#E6DB74">arm</font> 
-    if check_cmd curl; then +<font color="#FFFFFF">        </font><font color="#F92672">fi</font> 
-        _dld=curl +<font color="#FFFFFF">    </font><font color="#F92672">fi</font>
-    elif check_cmd wget; then +
-        _dld=wget +
-    else +
-        _dld='curl or wget' to be used in error message of need_cmd +
-    fi+
  
-    if [ "$1" --check ]; then +<font color="#FFFFFF"   _arch</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$</font><font color="#E6DB74">{</font><font color="#FFFFFF">_cputype</font><font color="#E6DB74">}-</font><font color="#FFFFFF">$</font><font color="#E6DB74">{</font><font color="#FFFFFF">_ostype</font><font color="#E6DB74">}</font><font color="#FFFFFF">&quot;</font>
-        need_cmd "$_dld" +
-    elif [ "$_dld" = curl ]; then +
-        get_ciphersuites_for_curl +
-        _ciphersuites="$RETVAL" +
-        if [ -n "$_ciphersuites" ]; then +
-            _err=$(curl --proto '=https' --tlsv1.2 --ciphers "$_ciphersuites" --silent --show-error --fail --location "$1" --output "$22>&1) +
-            _status=$? +
-        else +
-            echo "Warning: Not enforcing strong cipher suites for TLS, this is potentially less secure" +
-            if ! check_help_for "$3" curl --proto --tlsv1.2then +
-                echo "Warning: Not enforcing TLS v1.2, this is potentially less secure" +
-                _err=$(curl --silent --show-error --fail --location "$1" --output "$2" 2>&1) +
-                _status=$? +
-            else +
-                _err=$(curl --proto '=https' --tlsv1.2 --silent --show-error --fail --location "$1--output "$2" 2>&1) +
-                _status=$? +
-            fi +
-        fi +
-        if [ -n "$_err" ]; then +
-            echo "$_err" >&2 +
-            if echo "$_err" | grep -q 404$; then +
-                err "installer for platform '$3' not found, this may be unsupported" +
-            fi +
-        fi +
-        return $_status +
-    elif [ "$_dld" = wget ]; then +
-        get_ciphersuites_for_wget +
-        _ciphersuites="$RETVAL" +
-        if [ -n "$_ciphersuites" ]; then +
-            _err=$(wget --https-only --secure-protocol=TLSv1_2 --ciphers "$_ciphersuites" "$1" -O "$2" 2>&1) +
-            _status=$? +
-        else +
-            echo "Warning: Not enforcing strong cipher suites for TLS, this is potentially less secure" +
-            if ! check_help_for "$3" wget --https-only --secure-protocol; then +
-                echo "Warning: Not enforcing TLS v1.2, this is potentially less secure" +
-                _err=$(wget "$1-O "$2" 2>&1) +
-                _status=$? +
-            else +
-                _err=$(wget --https-only --secure-protocol=TLSv1_2 "$1-O "$2" 2>&1) +
-                _status=$? +
-            fi +
-        fi +
-        if [ -n "$_err" ]; then +
-            echo "$_err" >&+
-            if echo "$_err" | grep -q ' 404 Not Found$'then +
-                err "installer for platform '$3' not found, this may be unsupported" +
-            fi +
-        fi +
-        return $_status +
-    else +
-        err "Unknown downloader"   # should not reach here +
-    fi +
-}+
  
-check_help_for() { +<font color="#FFFFFF"   RETVAL</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$_arch&quot;</font> 
-    local _arch +<font color="#FFFFFF">}</font>
-    local _cmd +
-    local _arg +
-    _arch="$1" +
-    shift +
-    _cmd="$1" +
-    shift+
  
-    local _category +<font color="#A6E22E">say</font><font color="#FFFFFF">() {</font> 
-    if "$_cmd--help | grep -q 'For all options use the manual or "--help all".'then +<font color="#FFFFFF">    </font><font color="#66D9EF">printf</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74">rustup: %s\n</font><font color="#FFFFFF">&apos; &quot;$1&quot;</font> 
-      _category="all" +<font color="#FFFFFF">}</font>
-    else +
-      _category="" +
-    fi+
  
-    case "$_archin+<font color="#A6E22E">err</font><font color="#FFFFFF">() {</font> 
 +<font color="#FFFFFF">    say &quot;$1&quot; </font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
 +<font color="#FFFFFF">    </font><font color="#66D9EF">exit</font><font color="#FFFFFF"> 1</font> 
 +<font color="#FFFFFF">}</font>
  
-        *darwin*) +<font color="#A6E22E">need_cmd</font><font color="#FFFFFF">() {</font> 
-        if check_cmd sw_vers; then +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#F92672">!</font><font color="#FFFFFF"> check_cmd &quot;$1&quot;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-            case $(sw_vers -productVersionin +<font color="#FFFFFF">        err &quot;</font><font color="#E6DB74">need &apos;</font><font color="#FFFFFF">$1</font><font color="#E6DB74">&apos; (command not found)</font><font color="#FFFFFF">&quot;</font> 
-                10.*) +<font color="#FFFFFF">    </font><font color="#F92672">fi</font> 
-                    If we're running on macOS, older than 10.13, then we always +<font color="#FFFFFF">}</font>
-                    fail to find these options to force fallback +
-                    if "$(sw_vers -productVersion | cut -d. -f2)-lt 13 ]; then +
-                        Older than 10.13 +
-                        echo "Warning: Detected macOS platform older than 10.13" +
-                        return 1 +
-                    fi +
-                    ;; +
-                11.*) +
-                    We assume Big Sur will be OK for now +
-                    ;; +
-                *) +
-                    Unknown product version, warn and continue +
-                    echo "Warning: Detected unknown macOS major version: $(sw_vers -productVersion)" +
-                    echo "Warning TLS capabilities detection may fail" +
-                    ;+
-            esac +
-        fi +
-        ;;+
  
-    esac+<font color="#A6E22E">check_cmd</font><font color="#FFFFFF">() {</font> 
 +<font color="#FFFFFF">    </font><font color="#66D9EF">command</font><font color="#FFFFFF"> </font><font color="#FD971F">-v</font><font color="#FFFFFF"> &quot;$1&quot; </font><font color="#F92672">&gt;</font><font color="#FFFFFF"> /dev/null </font><font color="#BE84FF">2</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">1</font> 
 +<font color="#FFFFFF">}</font>
  
-    for _arg in "$@"; do +<font color="#A6E22E">assert_nz</font><font color="#FFFFFF">() {</font> 
-        if "$_cmd" --help $_category | grep -q -- "$_arg"; then +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> </font><font color="#FD971F">-z</font><font color="#FFFFFF"> &quot;$1&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font><font color="#FFFFFF"> err &quot;</font><font color="#E6DB74">assert_nz </font><font color="#FFFFFF">$2&quot;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">fi</font> 
-            return 1 +<font color="#FFFFFF">}</font>
-        fi +
-    done+
  
-    true not strictly needed +<font color="#7C7865"># Run a command that should never fail. If the command fails execution</font> 
-}+<font color="#7C7865"># will immediately terminate with an error showing the failing</font> 
 +<font color="#7C7865"># command.</font> 
 +<font color="#A6E22E">ensure</font><font color="#FFFFFF">() {</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#F92672">!</font><font color="#FFFFFF"> &quot;$@&quot;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font><font color="#FFFFFF"> err &quot;</font><font color="#E6DB74">command failed: </font><font color="#FFFFFF">$*&quot;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">}</font>
  
-Return cipher suite string specified by user, otherwise return strong TLS 1.2-1.3 cipher suites +<font color="#7C7865">This is just for indicating that commands&apos; results are being</font> 
-if support by local tools is detectedDetection currently supports these curl backends: +<font color="#7C7865"># intentionally ignoredUsually, because it&apos;s being executed</font> 
-GnuTLS and OpenSSL (possibly also LibreSSL and BoringSSL). Return value can be empty+<font color="#7C7865"># as part of error handling.</font> 
-get_ciphersuites_for_curl() { +<font color="#A6E22E">ignore</font><font color="#FFFFFF">() {</font> 
-    if [ -n "${RUSTUP_TLS_CIPHERSUITES-}]then +<font color="#FFFFFF">    &quot;$@&quot;</font> 
-        # user specified custom cipher suites, assume they know what they're doing +<font color="#FFFFFF">}</font>
-        RETVAL="$RUSTUP_TLS_CIPHERSUITES" +
-        return +
-    fi+
  
-    local _openssl_syntax="no+<font color="#7C7865"># This wraps curl or wget. Try curl first, if not installed,</font> 
-    local _gnutls_syntax="no+<font color="#7C7865"># use wget instead.</font> 
-    local _backend_supported="yes" +<font color="#A6E22E">downloader</font><font color="#FFFFFF">() {</font> 
-    if curl -V | grep -q ' OpenSSL/'; then +<font color="#FFFFFF"   </font><font color="#7C7865"># zsh does not split words by default, Required for curl retry arguments below.</font> 
-        _openssl_syntax="yes" +<font color="#FFFFFF"   is_zsh </font><font color="#F92672">&amp;&amp;</font><font color="#FFFFFF"> setopt local_options shwordsplit</font>
-    elif curl -V | grep -iq ' LibreSSL/'; then +
-        _openssl_syntax="yes" +
-    elif curl -V | grep -iq ' BoringSSL/'; then +
-        _openssl_syntax="yes" +
-    elif curl -V | grep -iq ' GnuTLS/'; then +
-        _gnutls_syntax="yes" +
-    else +
-        _backend_supported="no" +
-    fi+
  
-    local _args_supported="no+<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _dld</font> 
-    if "$_backend_supported" = "yes]then +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _ciphersuites</font> 
-        # "unspecifiedis for arch, allows for possibility old OS using macports, homebrew, etc. +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _err</font> 
-        if check_help_for "notspecified" "curl" "--tlsv1.2" "--ciphers" "--proto"; then +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _status</font> 
-            _args_supported="yes+<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _retry</font> 
-        fi +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> check_cmd curl</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-    fi+<font color="#FFFFFF">        _dld</font><font color="#F92672">=</font><font color="#E6DB74">curl</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">elif</font><font color="#FFFFFF"> check_cmd wget</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">        _dld</font><font color="#F92672">=</font><font color="#E6DB74">wget</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">else</font> 
 +<font color="#FFFFFF">        _dld</font><font color="#F92672">=</font><font color="#FFFFFF">&apos;</font><font color="#E6DB74">curl or wget</font><font color="#FFFFFF">&apos; </font><font color="#7C7865"># to be used in error message of need_cmd</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">fi</font>
  
-    local _cs="" +<font color="#FFFFFF"   </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$1&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> --check </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-    if [ "$_args_supported" = "yes" ]; then +<font color="#FFFFFF">        need_cmd &quot;$_dld&quot;</font> 
-        if [ "$_openssl_syntax" = "yes" ]; then +<font color="#FFFFFF">    </font><font color="#F92672">elif</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_dld&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> curl </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-            _cs=$(get_strong_ciphersuites_for "openssl") +<font color="#FFFFFF">        check_curl_for_retry_support</font> 
-        elif [ "$_gnutls_syntax" = "yes" ]; then +<font color="#FFFFFF">        _retry</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$RETVAL&quot;</font> 
-            _cs=$(get_strong_ciphersuites_for "gnutls") +<font color="#FFFFFF">        get_ciphersuites_for_curl</font> 
-        fi +<font color="#FFFFFF">        _ciphersuites</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$RETVAL&quot;</font> 
-    fi+<font color="#FFFFFF">        </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> </font><font color="#FD971F">-n</font><font color="#FFFFFF"> &quot;$_ciphersuites&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">            _err</font><font color="#F92672">=</font><font color="#FFFFFF">$</font><font color="#E6DB74">(</font><font color="#FFFFFF">curl</font><font color="#E6DB74"> </font><font color="#FFFFFF">$_retry</font><font color="#FD971F"> --proto</font><font color="#E6DB74"> </font><font color="#FFFFFF">&apos;</font><font color="#E6DB74">=https</font><font color="#FFFFFF">&apos;</font><font color="#FD971F"> --tlsv1</font><font color="#E6DB74">.2</font><font color="#FD971F"> --ciphers</font><font color="#E6DB74"> </font><font color="#FFFFFF">&quot;$_ciphersuites&quot;</font><font color="#FD971F"> --silent --show-error --fail --location</font><font color="#E6DB74"> </font><font color="#FFFFFF">&quot;$1&quot;</font><font color="#FD971F"> --output</font><font color="#E6DB74"> </font><font color="#FFFFFF">&quot;$2&quot;</font><font color="#E6DB74"> </font><font color="#BE84FF">2</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">1</font><font color="#E6DB74">)</font> 
 +<font color="#FFFFFF">            _status</font><font color="#F92672">=</font><font color="#FFFFFF">$?</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">else</font> 
 +<font color="#FFFFFF">            </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">Warning: Not enforcing strong cipher suites for TLS, this is potentially less secure</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">            </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#F92672">!</font><font color="#FFFFFF"> check_help_for &quot;$3&quot; curl</font><font color="#FD971F"> --proto --tlsv1</font><font color="#FFFFFF">.2</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">                </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">Warning: Not enforcing TLS v1.2, this is potentially less secure</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">                _err</font><font color="#F92672">=</font><font color="#FFFFFF">$</font><font color="#E6DB74">(</font><font color="#FFFFFF">curl</font><font color="#E6DB74"> </font><font color="#FFFFFF">$_retry</font><font color="#FD971F"> --silent --show-error --fail --location</font><font color="#E6DB74"> </font><font color="#FFFFFF">&quot;$1&quot;</font><font color="#FD971F"> --output</font><font color="#E6DB74"> </font><font color="#FFFFFF">&quot;$2&quot;</font><font color="#E6DB74"> </font><font color="#BE84FF">2</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">1</font><font color="#E6DB74">)</font> 
 +<font color="#FFFFFF">                _status</font><font color="#F92672">=</font><font color="#FFFFFF">$?</font> 
 +<font color="#FFFFFF">            </font><font color="#F92672">else</font> 
 +<font color="#FFFFFF">                _err</font><font color="#F92672">=</font><font color="#FFFFFF">$</font><font color="#E6DB74">(</font><font color="#FFFFFF">curl</font><font color="#E6DB74"> </font><font color="#FFFFFF">$_retry</font><font color="#FD971F"> --proto</font><font color="#E6DB74"> </font><font color="#FFFFFF">&apos;</font><font color="#E6DB74">=https</font><font color="#FFFFFF">&apos;</font><font color="#FD971F"> --tlsv1</font><font color="#E6DB74">.2</font><font color="#FD971F"> --silent --show-error --fail --location</font><font color="#E6DB74"> </font><font color="#FFFFFF">&quot;$1&quot;</font><font color="#FD971F"> --output</font><font color="#E6DB74"> </font><font color="#FFFFFF">&quot;$2&quot;</font><font color="#E6DB74"> </font><font color="#BE84FF">2</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">1</font><font color="#E6DB74">)</font> 
 +<font color="#FFFFFF">                _status</font><font color="#F92672">=</font><font color="#FFFFFF">$?</font> 
 +<font color="#FFFFFF">            </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> </font><font color="#FD971F">-n</font><font color="#FFFFFF"> &quot;$_err&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">            </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;$_err&quot; </font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
 +<font color="#FFFFFF">            </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;$_err&quot; </font><font color="#F92672">|</font><font color="#FFFFFF"> grep</font><font color="#FD971F"> -q</font><font color="#FFFFFF"> 404$</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">                err &quot;</font><font color="#E6DB74">installer for platform &apos;</font><font color="#FFFFFF">$3</font><font color="#E6DB74">&apos; not found, this may be unsupported</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">            </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">return</font><font color="#FFFFFF"> $_status</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">elif</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_dld&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> wget </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$</font><font color="#E6DB74">(</font><font color="#FFFFFF">wget</font><font color="#FD971F"> -V</font><font color="#E6DB74"> </font><font color="#BE84FF">2</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">1</font><font color="#F92672">|</font><font color="#FFFFFF">head</font><font color="#FD971F"> -2</font><font color="#F92672">|</font><font color="#FFFFFF">tail</font><font color="#FD971F"> -1</font><font color="#F92672">|</font><font color="#FFFFFF">cut</font><font color="#FD971F"> -f1 -d</font><font color="#FFFFFF">&quot;</font><font color="#E6DB74"> </font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">)</font><font color="#FFFFFF">&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">BusyBox</font><font color="#FFFFFF">&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">            </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">Warning: using the BusyBox version of wget.  Not enforcing strong cipher suites for TLS or TLS v1.2, this is potentially less secure</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">            _err</font><font color="#F92672">=</font><font color="#FFFFFF">$</font><font color="#E6DB74">(</font><font color="#FFFFFF">wget</font><font color="#E6DB74"> </font><font color="#FFFFFF">&quot;$1&quot;</font><font color="#FD971F"> -O</font><font color="#E6DB74"> </font><font color="#FFFFFF">&quot;$2&quot;</font><font color="#E6DB74"> </font><font color="#BE84FF">2</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">1</font><font color="#E6DB74">)</font> 
 +<font color="#FFFFFF">            _status</font><font color="#F92672">=</font><font color="#FFFFFF">$?</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">else</font> 
 +<font color="#FFFFFF">            get_ciphersuites_for_wget</font> 
 +<font color="#FFFFFF">            _ciphersuites</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$RETVAL&quot;</font> 
 +<font color="#FFFFFF">            </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> </font><font color="#FD971F">-n</font><font color="#FFFFFF"> &quot;$_ciphersuites&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">                _err</font><font color="#F92672">=</font><font color="#FFFFFF">$</font><font color="#E6DB74">(</font><font color="#FFFFFF">wget</font><font color="#FD971F"> --https-only --secure-protocol</font><font color="#F92672">=</font><font color="#E6DB74">TLSv1_2</font><font color="#FD971F"> --ciphers</font><font color="#E6DB74"> </font><font color="#FFFFFF">&quot;$_ciphersuites&quot;</font><font color="#E6DB74"> </font><font color="#FFFFFF">&quot;$1&quot;</font><font color="#FD971F"> -O</font><font color="#E6DB74"> </font><font color="#FFFFFF">&quot;$2&quot;</font><font color="#E6DB74"> </font><font color="#BE84FF">2</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">1</font><font color="#E6DB74">)</font> 
 +<font color="#FFFFFF">                _status</font><font color="#F92672">=</font><font color="#FFFFFF">$?</font> 
 +<font color="#FFFFFF">            </font><font color="#F92672">else</font> 
 +<font color="#FFFFFF">                </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">Warning: Not enforcing strong cipher suites for TLS, this is potentially less secure</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">                </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#F92672">!</font><font color="#FFFFFF"> check_help_for &quot;$3&quot; wget</font><font color="#FD971F"> --https-only --secure-protocol</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">                    </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">Warning: Not enforcing TLS v1.2, this is potentially less secure</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">                    _err</font><font color="#F92672">=</font><font color="#FFFFFF">$</font><font color="#E6DB74">(</font><font color="#FFFFFF">wget</font><font color="#E6DB74"> </font><font color="#FFFFFF">&quot;$1&quot;</font><font color="#FD971F"> -O</font><font color="#E6DB74"> </font><font color="#FFFFFF">&quot;$2&quot;</font><font color="#E6DB74"> </font><font color="#BE84FF">2</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">1</font><font color="#E6DB74">)</font> 
 +<font color="#FFFFFF">                    _status</font><font color="#F92672">=</font><font color="#FFFFFF">$?</font> 
 +<font color="#FFFFFF">                </font><font color="#F92672">else</font> 
 +<font color="#FFFFFF">                    _err</font><font color="#F92672">=</font><font color="#FFFFFF">$</font><font color="#E6DB74">(</font><font color="#FFFFFF">wget</font><font color="#FD971F"> --https-only --secure-protocol</font><font color="#F92672">=</font><font color="#E6DB74">TLSv1_2 </font><font color="#FFFFFF">&quot;$1&quot;</font><font color="#FD971F"> -O</font><font color="#E6DB74"> </font><font color="#FFFFFF">&quot;$2&quot;</font><font color="#E6DB74"> </font><font color="#BE84FF">2</font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">1</font><font color="#E6DB74">)</font> 
 +<font color="#FFFFFF">                    _status</font><font color="#F92672">=</font><font color="#FFFFFF">$?</font> 
 +<font color="#FFFFFF">                </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">            </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> </font><font color="#FD971F">-n</font><font color="#FFFFFF"> &quot;$_err&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">            </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;$_err&quot; </font><font color="#F92672">&gt;&amp;</font><font color="#BE84FF">2</font> 
 +<font color="#FFFFFF">            </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;$_err&quot; </font><font color="#F92672">|</font><font color="#FFFFFF"> grep</font><font color="#FD971F"> -q</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74"> 404 Not Found$</font><font color="#FFFFFF">&apos;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">                err &quot;</font><font color="#E6DB74">installer for platform &apos;</font><font color="#FFFFFF">$3</font><font color="#E6DB74">&apos; not found, this may be unsupported</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">            </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">return</font><font color="#FFFFFF"> $_status</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">else</font> 
 +<font color="#FFFFFF">        err &quot;</font><font color="#E6DB74">Unknown downloader</font><font color="#FFFFFF">&quot;   </font><font color="#7C7865"># should not reach here</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">}</font>
  
-    RETVAL="$_cs+<font color="#A6E22E">check_help_for</font><font color="#FFFFFF">() {</font> 
-}+<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _arch</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _cmd</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _arg</font> 
 +<font color="#FFFFFF">    _arch</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$1&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#66D9EF">shift</font> 
 +<font color="#FFFFFF">    _cmd</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$1&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#66D9EF">shift</font>
  
-Return cipher suite string specified by user, otherwise return strong TLS 1.2-1.3 cipher suites +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _category</font> 
-if support by local tools is detected. Detection currently supports these wget backends: +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> &quot;$_cmd&quot;</font><font color="#FD971F"> --help</font><font color="#FFFFFF"> </font><font color="#F92672">|</font><font color="#FFFFFF"> grep</font><font color="#FD971F"> -q</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74">For all options use the manual or &quot;--help all&quot;.</font><font color="#FFFFFF">&apos;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-GnuTLS and OpenSSL (possibly also LibreSSL and BoringSSL). Return value can be empty. +<font color="#FFFFFF">      _category</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">all</font><font color="#FFFFFF">&quot;</font> 
-get_ciphersuites_for_wget() { +<font color="#FFFFFF">    </font><font color="#F92672">else</font> 
-    if [ -n "${RUSTUP_TLS_CIPHERSUITES-}]; then +<font color="#FFFFFF">      _category</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;&quot;</font> 
-        user specified custom cipher suites, assume they know what they're doing +<font color="#FFFFFF">    </font><font color="#F92672">fi</font>
-        RETVAL="$RUSTUP_TLS_CIPHERSUITES+
-        return +
-    fi+
  
-    local _cs="" +<font color="#FFFFFF"   </font><font color="#F92672">case</font><font color="#FFFFFF"> &quot;$_arch&quot</font><font color="#F92672">in</font>
-    if wget -V | grep -q '\-DHAVE_LIBSSL'; then +
-        # "unspecifiedis for arch, allows for possibility old OS using macports, homebrew, etc. +
-        if check_help_for "notspecified" "wget" "TLSv1_2" "--ciphers" "--https-only" "--secure-protocol"; then +
-            _cs=$(get_strong_ciphersuites_for "openssl"+
-        fi +
-    elif wget -V | grep -q '\-DHAVE_LIBGNUTLS'then +
-        # "unspecified" is for arch, allows for possibility old OS using macports, homebrew, etc. +
-        if check_help_for "notspecified" "wget" "TLSv1_2" "--ciphers" "--https-only" "--secure-protocol"; then +
-            _cs=$(get_strong_ciphersuites_for "gnutls"+
-        fi +
-    fi+
  
-    RETVAL="$_cs+<font color="#FFFFFF">        </font><font color="#F92672">*</font><font color="#FFFFFF">darwin</font><font color="#F92672">*)</font> 
-}+<font color="#FFFFFF">        </font><font color="#F92672">if</font><font color="#FFFFFF"> check_cmd sw_vers</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">            </font><font color="#F92672">case</font><font color="#FFFFFF"> $(sw_vers</font><font color="#FD971F"> -productVersion</font><font color="#FFFFFF">) </font><font color="#F92672">in</font> 
 +<font color="#FFFFFF">                10.</font><font color="#F92672">*)</font> 
 +<font color="#FFFFFF">                    </font><font color="#7C7865"># If we&apos;re running on macOS, older than 10.13, then we always</font> 
 +<font color="#FFFFFF">                    </font><font color="#7C7865"># fail to find these options to force fallback</font> 
 +<font color="#FFFFFF">                    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$</font><font color="#E6DB74">(</font><font color="#FFFFFF">sw_vers</font><font color="#FD971F"> -productVersion</font><font color="#E6DB74"> </font><font color="#F92672">|</font><font color="#E6DB74"> </font><font color="#FFFFFF">cut</font><font color="#FD971F"> -d</font><font color="#E6DB74">.</font><font color="#FD971F"> -f2</font><font color="#E6DB74">)</font><font color="#FFFFFF">&quot; </font><font color="#FD971F">-lt</font><font color="#FFFFFF"> 13 </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">                        </font><font color="#7C7865"># Older than 10.13</font> 
 +<font color="#FFFFFF">                        </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">Warning: Detected macOS platform older than 10.13</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">                        </font><font color="#F92672">return</font><font color="#FFFFFF"> 1</font> 
 +<font color="#FFFFFF">                    </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">                    ;;</font> 
 +<font color="#FFFFFF">                11.</font><font color="#F92672">*)</font> 
 +<font color="#FFFFFF">                    </font><font color="#7C7865"># We assume Big Sur will be OK for now</font> 
 +<font color="#FFFFFF">                    ;;</font> 
 +<font color="#FFFFFF">                </font><font color="#F92672">*)</font> 
 +<font color="#FFFFFF">                    </font><font color="#7C7865"># Unknown product version, warn and continue</font> 
 +<font color="#FFFFFF">                    </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">Warning: Detected unknown macOS major version: </font><font color="#FFFFFF">$</font><font color="#E6DB74">(</font><font color="#FFFFFF">sw_vers</font><font color="#FD971F"> -productVersion</font><font color="#E6DB74">)</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">                    </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">Warning TLS capabilities detection may fail</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">                    ;;</font> 
 +<font color="#FFFFFF">            </font><font color="#F92672">esac</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">        ;;</font>
  
-Return strong TLS 1.2-1.3 cipher suites in OpenSSL or GnuTLS syntax. TLS 1.2 +<font color="#FFFFFF">    </font><font color="#F92672">esac</font> 
-excludes non-ECDHE and non-AEAD cipher suites. DHE is excluded due to bad + 
-# DH params often found on servers (see RFC 7919). Sequence matches or is +<font color="#FFFFFF">    </font><font color="#F92672">for</font><font color="#FFFFFF"> _arg </font><font color="#F92672">in</font><font color="#FFFFFF"> &quot;$@&quot;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">do</font> 
-similar to Firefox 68 ESR with weak cipher suites disabled via about:config. +<font color="#FFFFFF">        </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#F92672">!</font><font color="#FFFFFF"> &quot;$_cmd&quot;</font><font color="#FD971F"--help</font><font color="#FFFFFF"> &quot;$_category&quot; </font><font color="#F92672">|</font><font color="#FFFFFF"> grep</font><font color="#FD971F"> -q</font><font color="#F92672"> --</font><font color="#FFFFFF"> &quot;$_arg&quot;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
-# $1 must be openssl or gnutls. +<font color="#FFFFFF">            </font><font color="#F92672">return</font><font color="#FFFFFF"> 1</font> 
-get_strong_ciphersuites_for() { +<font color="#FFFFFF">        </font><font color="#F92672">fi</font> 
-    if "$1" = "openssl]then +<font color="#FFFFFF"   </font><font color="#F92672">done</font>
-        OpenSSL is forgiving of unknown values, no problems with TLS 1.3 values on versions that don't support it yet. +
-        echo "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384" +
-    elif [ "$1" = "gnutls]; then +
-        GnuTLS isn't forgiving of unknown values, so this may require a GnuTLS version that supports TLS 1.3 even if wget doesn't. +
-        # Begin with SECURE128 (and higher) then remove/add to build cipher suites. Produces same 9 cipher suites as OpenSSL but in slightly different order. +
-        echo "SECURE128:-VERS-SSL3.0:-VERS-TLS1.0:-VERS-TLS1.1:-VERS-DTLS-ALL:-CIPHER-ALL:-MAC-ALL:-KX-ALL:+AEAD:+ECDHE-ECDSA:+ECDHE-RSA:+AES-128-GCM:+CHACHA20-POLY1305:+AES-256-GCM" +
-    fi +
-}+
  
-main "$@" || exit 1 +<font color="#FFFFFF">    true </font><font color="#7C7865"># not strictly needed</font> 
-</code></WRAP>+<font color="#FFFFFF">}</font> 
 + 
 +<font color="#7C7865"># Check if curl supports the --retry flag, then pass it to the curl invocation.</font> 
 +<font color="#A6E22E">check_curl_for_retry_support</font><font color="#FFFFFF">() {</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _retry_supported</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#7C7865"># &quot;unspecified&quot; is for arch, allows for possibility old OS using macports, homebrew, etc.</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> check_help_for &quot;</font><font color="#E6DB74">notspecified</font><font color="#FFFFFF">&quot; &quot;</font><font color="#E6DB74">curl</font><font color="#FFFFFF">&quot; &quot;</font><font color="#E6DB74">--retry</font><font color="#FFFFFF">&quot;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">        _retry_supported</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">--retry 3</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">if</font><font color="#FFFFFF"> check_help_for &quot;</font><font color="#E6DB74">notspecified</font><font color="#FFFFFF">&quot; &quot;</font><font color="#E6DB74">curl</font><font color="#FFFFFF">&quot; &quot;</font><font color="#E6DB74">--continue-at</font><font color="#FFFFFF">&quot;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">            </font><font color="#7C7865"># &quot;-C -&quot; tells curl to automatically find where to resume the download when retrying.</font> 
 +<font color="#FFFFFF">            _retry_supported</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">--retry 3 -C -</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">fi</font> 
 + 
 +<font color="#FFFFFF">    RETVAL</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$_retry_supported&quot;</font> 
 +<font color="#FFFFFF">}</font> 
 + 
 +<font color="#7C7865"># Return cipher suite string specified by user, otherwise return strong TLS 1.2-1.3 cipher suites</font> 
 +<font color="#7C7865"># if support by local tools is detected. Detection currently supports these curl backends:</font> 
 +<font color="#7C7865"># GnuTLS and OpenSSL (possibly also LibreSSL and BoringSSL). Return value can be empty.</font> 
 +<font color="#A6E22E">get_ciphersuites_for_curl</font><font color="#FFFFFF">() {</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> </font><font color="#FD971F">-n</font><font color="#FFFFFF"> &quot;$</font><font color="#E6DB74">{</font><font color="#FFFFFF">RUSTUP_TLS_CIPHERSUITES</font><font color="#F92672">-</font><font color="#E6DB74">}</font><font color="#FFFFFF">&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">        </font><font color="#7C7865"># user specified custom cipher suites, assume they know what they&apos;re doing</font> 
 +<font color="#FFFFFF">        RETVAL</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$RUSTUP_TLS_CIPHERSUITES&quot;</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">return</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">fi</font> 
 + 
 +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _openssl_syntax</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">no</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _gnutls_syntax</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">no</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _backend_supported</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">yes</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> curl</font><font color="#FD971F"> -V</font><font color="#FFFFFF"> </font><font color="#F92672">|</font><font color="#FFFFFF"> grep</font><font color="#FD971F"> -q</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74"> OpenSSL/</font><font color="#FFFFFF">&apos;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">        _openssl_syntax</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">yes</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">elif</font><font color="#FFFFFF"> curl</font><font color="#FD971F"> -V</font><font color="#FFFFFF"> </font><font color="#F92672">|</font><font color="#FFFFFF"> grep</font><font color="#FD971F"> -iq</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74"> LibreSSL/</font><font color="#FFFFFF">&apos;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">        _openssl_syntax</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">yes</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">elif</font><font color="#FFFFFF"> curl</font><font color="#FD971F"> -V</font><font color="#FFFFFF"> </font><font color="#F92672">|</font><font color="#FFFFFF"> grep</font><font color="#FD971F"> -iq</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74"> BoringSSL/</font><font color="#FFFFFF">&apos;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">        _openssl_syntax</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">yes</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">elif</font><font color="#FFFFFF"> curl</font><font color="#FD971F"> -V</font><font color="#FFFFFF"> </font><font color="#F92672">|</font><font color="#FFFFFF"> grep</font><font color="#FD971F"> -iq</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74"> GnuTLS/</font><font color="#FFFFFF">&apos;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">        _gnutls_syntax</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">yes</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">else</font> 
 +<font color="#FFFFFF">        _backend_supported</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">no</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">fi</font> 
 + 
 +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _args_supported</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">no</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_backend_supported&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">yes</font><font color="#FFFFFF">&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">        </font><font color="#7C7865"># &quot;unspecified&quot; is for arch, allows for possibility old OS using macports, homebrew, etc.</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">if</font><font color="#FFFFFF"> check_help_for &quot;</font><font color="#E6DB74">notspecified</font><font color="#FFFFFF">&quot; &quot;</font><font color="#E6DB74">curl</font><font color="#FFFFFF">&quot; &quot;</font><font color="#E6DB74">--tlsv1.2</font><font color="#FFFFFF">&quot; &quot;</font><font color="#E6DB74">--ciphers</font><font color="#FFFFFF">&quot; &quot;</font><font color="#E6DB74">--proto</font><font color="#FFFFFF">&quot;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">            _args_supported</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">yes</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">fi</font> 
 + 
 +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _cs</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_args_supported&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">yes</font><font color="#FFFFFF">&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_openssl_syntax&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">yes</font><font color="#FFFFFF">&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">            _cs</font><font color="#F92672">=</font><font color="#FFFFFF">$</font><font color="#E6DB74">(</font><font color="#FFFFFF">get_strong_ciphersuites_for</font><font color="#E6DB74"> </font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">openssl</font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">)</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">elif</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$_gnutls_syntax&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">yes</font><font color="#FFFFFF">&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">            _cs</font><font color="#F92672">=</font><font color="#FFFFFF">$</font><font color="#E6DB74">(</font><font color="#FFFFFF">get_strong_ciphersuites_for</font><font color="#E6DB74"> </font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">gnutls</font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">)</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">fi</font> 
 + 
 +<font color="#FFFFFF">    RETVAL</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$_cs&quot;</font> 
 +<font color="#FFFFFF">}</font> 
 + 
 +<font color="#7C7865"># Return cipher suite string specified by user, otherwise return strong TLS 1.2-1.3 cipher suites</font> 
 +<font color="#7C7865"># if support by local tools is detected. Detection currently supports these wget backends:</font> 
 +<font color="#7C7865"># GnuTLS and OpenSSL (possibly also LibreSSL and BoringSSL). Return value can be empty.</font> 
 +<font color="#A6E22E">get_ciphersuites_for_wget</font><font color="#FFFFFF">() {</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> </font><font color="#FD971F">-n</font><font color="#FFFFFF"> &quot;$</font><font color="#E6DB74">{</font><font color="#FFFFFF">RUSTUP_TLS_CIPHERSUITES</font><font color="#F92672">-</font><font color="#E6DB74">}</font><font color="#FFFFFF">&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">        </font><font color="#7C7865"># user specified custom cipher suites, assume they know what they&apos;re doing</font> 
 +<font color="#FFFFFF">        RETVAL</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$RUSTUP_TLS_CIPHERSUITES&quot;</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">return</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">fi</font> 
 + 
 +<font color="#FFFFFF">    </font><font color="#F92672">local</font><font color="#FFFFFF"> _cs</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> wget</font><font color="#FD971F"> -V</font><font color="#FFFFFF"> </font><font color="#F92672">|</font><font color="#FFFFFF"> grep</font><font color="#FD971F"> -q</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74">\-DHAVE_LIBSSL</font><font color="#FFFFFF">&apos;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">        </font><font color="#7C7865"># &quot;unspecified&quot; is for arch, allows for possibility old OS using macports, homebrew, etc.</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">if</font><font color="#FFFFFF"> check_help_for &quot;</font><font color="#E6DB74">notspecified</font><font color="#FFFFFF">&quot; &quot;</font><font color="#E6DB74">wget</font><font color="#FFFFFF">&quot; &quot;</font><font color="#E6DB74">TLSv1_2</font><font color="#FFFFFF">&quot; &quot;</font><font color="#E6DB74">--ciphers</font><font color="#FFFFFF">&quot; &quot;</font><font color="#E6DB74">--https-only</font><font color="#FFFFFF">&quot; &quot;</font><font color="#E6DB74">--secure-protocol</font><font color="#FFFFFF">&quot;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">            _cs</font><font color="#F92672">=</font><font color="#FFFFFF">$</font><font color="#E6DB74">(</font><font color="#FFFFFF">get_strong_ciphersuites_for</font><font color="#E6DB74"> </font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">openssl</font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">)</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">elif</font><font color="#FFFFFF"> wget</font><font color="#FD971F"> -V</font><font color="#FFFFFF"> </font><font color="#F92672">|</font><font color="#FFFFFF"> grep</font><font color="#FD971F"> -q</font><font color="#FFFFFF"> &apos;</font><font color="#E6DB74">\-DHAVE_LIBGNUTLS</font><font color="#FFFFFF">&apos;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">        </font><font color="#7C7865"># &quot;unspecified&quot; is for arch, allows for possibility old OS using macports, homebrew, etc.</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">if</font><font color="#FFFFFF"> check_help_for &quot;</font><font color="#E6DB74">notspecified</font><font color="#FFFFFF">&quot; &quot;</font><font color="#E6DB74">wget</font><font color="#FFFFFF">&quot; &quot;</font><font color="#E6DB74">TLSv1_2</font><font color="#FFFFFF">&quot; &quot;</font><font color="#E6DB74">--ciphers</font><font color="#FFFFFF">&quot; &quot;</font><font color="#E6DB74">--https-only</font><font color="#FFFFFF">&quot; &quot;</font><font color="#E6DB74">--secure-protocol</font><font color="#FFFFFF">&quot;</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">            _cs</font><font color="#F92672">=</font><font color="#FFFFFF">$</font><font color="#E6DB74">(</font><font color="#FFFFFF">get_strong_ciphersuites_for</font><font color="#E6DB74"> </font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">gnutls</font><font color="#FFFFFF">&quot;</font><font color="#E6DB74">)</font> 
 +<font color="#FFFFFF">        </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">fi</font> 
 + 
 +<font color="#FFFFFF">    RETVAL</font><font color="#F92672">=</font><font color="#FFFFFF">&quot;$_cs&quot;</font> 
 +<font color="#FFFFFF">}</font> 
 + 
 +<font color="#7C7865"># Return strong TLS 1.2-1.3 cipher suites in OpenSSL or GnuTLS syntax. TLS 1.2</font> 
 +<font color="#7C7865"># excludes non-ECDHE and non-AEAD cipher suites. DHE is excluded due to bad</font> 
 +<font color="#7C7865"># DH params often found on servers (see RFC 7919). Sequence matches or is</font> 
 +<font color="#7C7865"># similar to Firefox 68 ESR with weak cipher suites disabled via about:config.</font> 
 +<font color="#7C7865"># $1 must be openssl or gnutls.</font> 
 +<font color="#A6E22E">get_strong_ciphersuites_for</font><font color="#FFFFFF">() {</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$1&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">openssl</font><font color="#FFFFFF">&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">        </font><font color="#7C7865"># OpenSSL is forgiving of unknown values, no problems with TLS 1.3 values on versions that don&apos;t support it yet.</font> 
 +<font color="#FFFFFF">        </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">elif</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> &quot;$1&quot; </font><font color="#F92672">=</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">gnutls</font><font color="#FFFFFF">&quot; </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> 
 +<font color="#FFFFFF">        </font><font color="#7C7865"># GnuTLS isn&apos;t forgiving of unknown values, so this may require a GnuTLS version that supports TLS 1.3 even if wget doesn&apos;t.</font> 
 +<font color="#FFFFFF">        </font><font color="#7C7865"># Begin with SECURE128 (and higher) then remove/add to build cipher suites. Produces same 9 cipher suites as OpenSSL but in slightly different order.</font> 
 +<font color="#FFFFFF">        </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> &quot;</font><font color="#E6DB74">SECURE128:-VERS-SSL3.0:-VERS-TLS1.0:-VERS-TLS1.1:-VERS-DTLS-ALL:-CIPHER-ALL:-MAC-ALL:-KX-ALL:+AEAD:+ECDHE-ECDSA:+ECDHE-RSA:+AES-128-GCM:+CHACHA20-POLY1305:+AES-256-GCM</font><font color="#FFFFFF">&quot;</font> 
 +<font color="#FFFFFF">    </font><font color="#F92672">fi</font> 
 +<font color="#FFFFFF">}</font> 
 + 
 +<font color="#FFFFFF">main &quot;$@&quot; </font><font color="#F92672">||</font><font color="#FFFFFF"> </font><font color="#66D9EF">exit</font><font color="#FFFFFF"> 1</font> 
 +</pre></html></WRAP>
  
  • rust.1714237954.txt.gz
  • 最終更新: 2024/04/28 02:12
  • by ともやん