両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン |
rust [2023/12/01 16:53] – [ツールチェイン (toolchain)] ともやん | rust [2024/09/07 09:32] (現在) – [Rust の更新] ともやん |
---|
<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">'=https'</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> |
<WRAP color_command><html><pre> | <WRAP color_command><html><pre> |
<b class=GRN>$</b> <b class=HIY>mkdir</b> <b class=HIK>-p</b> rs_projects/hello_world | <b class=GRN>$</b> <b class=HIY>mkdir</b> <b class=HIK>-p</b> rs_projects/hello_world |
</pre></html></WRAP> | |
<WRAP color_result><html><pre> | |
</pre></html></WRAP> | </pre></html></WRAP> |
<WRAP color_command><html><pre> | <WRAP color_command><html><pre> |
<b class=GRN>$</b> <b class=HIY>cd</b> rs_projects/hello_world | <b class=GRN>$</b> <b class=HIY>cd</b> rs_projects/hello_world |
</pre></html></WRAP> | |
<WRAP color_result><html><pre> | |
</pre></html></WRAP> | </pre></html></WRAP> |
<WRAP color_command><html><pre> | <WRAP color_command><html><pre> |
<b class=GRN>$</b> <b class=HIY>cat</b> << EOF > main.rs | <b class=GRN>$</b> <b class=HIY>cat</b> << EOF > main.rs |
<b class=GRN>fn</b> <b class=HIB>main</b>() { | <b class=GRN>fn</b> <b class=HIB>main</b>() { |
<b class=HIC>// ようこそ、はるおわ〜るどへ!</b> | <b class=HIC>// ようこそ、はるおわ〜るどへ!</b> |
} | } |
EOF | EOF |
</pre></html></WRAP> | |
<WRAP color_result><html><pre> | |
</pre></html></WRAP> | </pre></html></WRAP> |
<WRAP color_command><html><pre> | <WRAP color_command><html><pre> |
</pre></html></WRAP> | </pre></html></WRAP> |
</WRAP> | </WRAP> |
| |
| ===== 言語構文 ===== |
| [[rust/language_memo|Rust ランゲージ メモ]]\\ |
| |
===== Rust の更新 ===== | ===== Rust の更新 ===== |
<WRAP color_term> | <WRAP color_term> |
<WRAP color_command><html><pre> | <WRAP color_command><html><pre> |
<b class=GRN>$</b> <b class=HIY>rustup</b> self update | <font color="#0087FF"><b>$</b></font> <font color="#26A269">rustup</font> self update |
</pre></html></WRAP> | </pre></html></WRAP> |
<WRAP color_result><html><pre> | <WRAP color_result><html><pre> |
<b class=BOLD>info:</b> checking for self-updates | <b>info: </b>checking for self-update |
<b class=BOLD>info:</b> downloading self-update | <b>info: </b>downloading self-update |
<b class=GRN>rustup updated</b> - 1.25.1 (from 1.24.3) | <font color="#26A269"><b>rustup updated</b></font> - 1.27.1 (from 1.27.0) |
| </pre></html></WRAP> |
| <WRAP color_command><html><pre> |
| <font color="#FF8700"><b>$</b></font> <font color="#26A269">rustup</font> <font color="#A347BA">-V</font> |
| </pre></html></WRAP> |
| <WRAP color_result><html><pre> |
| rustup 1.27.1 (54dd3d00f 2024-04-24) |
| <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.77.2 (25ef9e3d8 2024-04-09)` |
| </pre></html></WRAP> |
| </WRAP> |
| |
| **rust** の更新を行う🤔\\ |
| <WRAP color_term> |
| <WRAP color_command><html><pre> |
| <font color="#0087FF"><b>$</b></font> <font color="#26A269">rustup</font> update |
</pre></html></WRAP> | </pre></html></WRAP> |
| <WRAP color_result_hlong><html><pre> |
| <b>info: </b>syncing channel updates for 'stable-x86_64-unknown-linux-gnu' |
| 730.9 KiB / 730.9 KiB (100 %) 463.2 KiB/s in 1s ETA: 0s |
| <b>info: </b>latest update on 2024-05-02, rust version 1.78.0 (9b00956e5 2024-04-29) |
| <b>info: </b>downloading component 'rust-src' |
| 2.5 MiB / 2.5 MiB (100 %) 732.1 KiB/s in 4s ETA: 0s |
| <b>info: </b>downloading component 'cargo' |
| 8.0 MiB / 8.0 MiB (100 %) 662.4 KiB/s in 13s ETA: 0s |
| <b>info: </b>downloading component 'clippy' |
| 2.3 MiB / 2.3 MiB (100 %) 627.0 KiB/s in 3s ETA: 0s |
| <b>info: </b>downloading component 'rust-docs' |
| 15.1 MiB / 15.1 MiB (100 %) 483.2 KiB/s in 25s ETA: 0s |
| <b>info: </b>downloading component 'rust-std' |
| 24.3 MiB / 24.3 MiB (100 %) 522.4 KiB/s in 42s ETA: 0s |
| <b>info: </b>downloading component 'rustc' |
| 63.7 MiB / 63.7 MiB (100 %) 256.0 KiB/s in 2m 37s ETA: 0s |
| <b>info: </b>downloading component 'rustfmt' |
| 2.3 MiB / 2.3 MiB (100 %) 411.8 KiB/s in 6s ETA: 0s |
| <b>info: </b>removing previous version of component 'rust-src' |
| <b>info: </b>removing previous version of component 'cargo' |
| <b>info: </b>removing previous version of component 'clippy' |
| <b>info: </b>removing previous version of component 'rust-docs' |
| <b>info: </b>removing previous version of component 'rust-std' |
| <b>info: </b>removing previous version of component 'rustc' |
| <b>info: </b>removing previous version of component 'rustfmt' |
| <b>info: </b>installing component 'rust-src' |
| <b>info: </b>installing component 'cargo' |
| <b>info: </b>installing component 'clippy' |
| <b>info: </b>installing component 'rust-docs' |
| 15.1 MiB / 15.1 MiB (100 %) 4.4 MiB/s in 3s ETA: 0s |
| <b>info: </b>installing component 'rust-std' |
| 24.3 MiB / 24.3 MiB (100 %) 6.7 MiB/s in 3s ETA: 0s |
| <b>info: </b>installing component 'rustc' |
| 63.7 MiB / 63.7 MiB (100 %) 9.3 MiB/s in 7s ETA: 0s |
| <b>info: </b>installing component 'rustfmt' |
| <b>info: </b>checking for self-update |
| |
| <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)) |
| |
| <b>info: </b>cleaning up downloads & tmp directories |
| </pre></html></WRAP> |
| </WRAP> |
| |
| ===== Cargo 拡張機能 ===== |
| |
| ==== cargo-cache ==== |
| 公式: [[https://github.com/matthiaskrgr/cargo-cache|matthiaskrgr/cargo-cache: manage cargo cache (${CARGO_HOME}, ~/.cargo/), print sizes of dirs and remove dirs selectively]]\\ |
| <WRAP color_term> |
<WRAP color_command><html><pre> | <WRAP color_command><html><pre> |
<b class=GRN>$</b> <b class=HIY>rustup</b> <b class=HIK>-V</b> | <font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> cache |
</pre></html></WRAP> | </pre></html></WRAP> |
<WRAP color_result><html><pre> | <WRAP color_result><html><pre> |
rustup 1.25.1 (bb60b1e89 2022-07-12) | Cargo cache '/home/tomoyan/.cargo': |
<b class=BOLD>info:</b> This is the version for the rustup toolchain manager, not the rustc compiler. | |
<b class=BOLD>info:</b> The currently active `rustc` version is `rustc 1.61.0 (fe5b13d68 2022-05-18)` | Total: 4.33 GB |
| 55 installed binaries: 598.06 MB |
| Registry: 3.06 GB |
| 2 registry indices: 1.05 GB |
| 2350 crate archives: 327.96 MB |
| 2350 crate source checkouts: 1.68 GB |
| Git db: 674.12 MB |
| 8 bare git repos: 111.93 MB |
| 12 git repo checkouts: 562.19 MB |
</pre></html></WRAP> | </pre></html></WRAP> |
</WRAP> | </WRAP> |
| |
**rust** の更新を行う🤔\\ | === ヘルプ === |
<WRAP color_term> | <WRAP color_term> |
<WRAP color_command><html><pre> | <WRAP color_command><html><pre> |
<b class=GRN>$</b> <b class=HIY>rustup</b> update | <font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> cache <font color="#A347BA">--help</font> |
</pre></html></WRAP> | </pre></html></WRAP> |
<WRAP color_result_long><html><pre> | <WRAP color_result_hlong><html><pre> |
<b class=BOLD>info:</b> syncing channel updates for 'stable-x86_64-unknown-linux-gnu' | <font color="#26A269">cargo-cache</font> 0.8.3 |
<b class=BOLD>info:</b> latest update on 2022-11-03, rust version 1.65.0 (897e37553 2022-11-02) | matthiaskrgr |
<b class=BOLD>info:</b> downloading component 'rust-src' | Manage cargo cache |
<b class=BOLD>info:</b> downloading component 'cargo' | |
6.5 MiB / 6.5 MiB (100 %) 5.0 MiB/s in 1s ETA: 0s | |
<b class=BOLD>info:</b> downloading component 'clippy' | |
2.9 MiB / 2.9 MiB (100 %) 2.7 MiB/s in 1s ETA: 0s | |
<b class=BOLD>info:</b> downloading component 'rust-docs' | |
18.8 MiB / 18.8 MiB (100 %) 3.2 MiB/s in 6s ETA: 0s | |
<b class=BOLD>info:</b> downloading component 'rust-std' | |
30.0 MiB / 30.0 MiB (100 %) 582.4 KiB/s in 16s ETA: 0s | |
<b class=BOLD>info:</b> downloading component 'rustc' | |
56.2 MiB / 56.2 MiB (100 %) 1.2 MiB/s in 53s ETA: 0s | |
<b class=BOLD>info:</b> downloading component 'rustfmt' | |
4.3 MiB / 4.3 MiB (100 %) 1.3 MiB/s in 3s ETA: 0s | |
<b class=BOLD>info:</b> removing previous version of component 'rust-src' | |
<b class=BOLD>info:</b> removing previous version of component 'cargo' | |
<b class=BOLD>info:</b> removing previous version of component 'clippy' | |
<b class=BOLD>info:</b> removing previous version of component 'rust-docs' | |
<b class=BOLD>info:</b> removing previous version of component 'rust-std' | |
<b class=BOLD>info:</b> removing previous version of component 'rustc' | |
<b class=BOLD>info:</b> removing previous version of component 'rustfmt' | |
<b class=BOLD>info:</b> installing component 'rust-src' | |
<b class=BOLD>info:</b> installing component 'cargo' | |
<b class=BOLD>info:</b> installing component 'clippy' | |
<b class=BOLD>info:</b> installing component 'rust-docs' | |
18.8 MiB / 18.8 MiB (100 %) 4.1 MiB/s in 4s ETA: 0s | |
<b class=BOLD>info:</b> installing component 'rust-std' | |
30.0 MiB / 30.0 MiB (100 %) 5.5 MiB/s in 5s ETA: 0s | |
<b class=BOLD>info:</b> installing component 'rustc' | |
56.2 MiB / 56.2 MiB (100 %) 7.8 MiB/s in 11s ETA: 0s | |
<b class=BOLD>info:</b> installing component 'rustfmt' | |
<b class=BOLD>info:</b> checking for self-updates | |
| |
<b class=GRN>stable-x86_64-unknown-linux-gnu updated</b> - rustc 1.65.0 (897e37553 2022-11-02) (from rustc 1.63.0 (4b91a6ea7 2022-08-08)) | <font color="#A2734C">USAGE:</font> |
| cargo cache [OPTIONS] [SUBCOMMAND] |
| |
<b class=BOLD>info:</b> cleaning up downloads & tmp directories | <font color="#A2734C">OPTIONS:</font> |
| <font color="#26A269">-a</font>, <font color="#26A269">--autoclean</font> Removes crate source checkouts and git repo checkouts |
| <font color="#26A269">-e</font>, <font color="#26A269">--autoclean-expensive</font> As --autoclean, but also recompresses git repositories |
| <font color="#26A269">-f</font>, <font color="#26A269">--fsck</font> Fsck git repositories |
| <font color="#26A269">-g</font>, <font color="#26A269">--gc</font> Recompress git repositories (may take some time) |
| <font color="#26A269">-h</font>, <font color="#26A269">--help</font> Print help information |
| <font color="#26A269">-i</font>, <font color="#26A269">--info</font> Print information cache directories, what they are for and what can |
| be safely deleted |
| <font color="#26A269">-k</font>, <font color="#26A269">--keep-duplicate-crates</font> <font color="#26A269"><N></font> Remove all but N versions of crate in the source archives directory |
| <font color="#26A269">-l</font>, <font color="#26A269">--list-dirs</font> List all found directory paths |
| <font color="#26A269">-n</font>, <font color="#26A269">--dry-run</font> Don't remove anything, just pretend |
| <font color="#26A269">-o</font>, <font color="#26A269">--remove-if-older-than</font> <font color="#26A269"><date></font> Removes items older than specified date: YYYY.MM.DD or HH:MM:SS |
| <font color="#26A269">-r</font>, <font color="#26A269">--remove-dir</font> <font color="#26A269"><dir1,dir2,dir3></font> Remove directories, accepted values: all,git-db,git-repos, |
| registry-sources,registry-crate-cache,registry-index,registry |
| <font color="#26A269">-t</font>, <font color="#26A269">--top-cache-items</font> <font color="#26A269"><N></font> List the top N items taking most space in the cache |
| <font color="#26A269">-V</font>, <font color="#26A269">--version</font> Print version information |
| <font color="#26A269">-y</font>, <font color="#26A269">--remove-if-younger-than</font> <font color="#26A269"><date></font> Removes items younger than the specified date: YYYY.MM.DD or |
| HH:MM:SS |
| |
| <font color="#A2734C">SUBCOMMANDS:</font> |
| <font color="#26A269">clean-unref</font> remove crates that are not referenced in a Cargo.toml from the cache |
| <font color="#26A269">help</font> Print this message or the help of the given subcommand(s) |
| <font color="#26A269">l</font> check local build cache (target) of a rust project |
| <font color="#26A269">local</font> check local build cache (target) of a rust project |
| <font color="#26A269">q</font> run a query |
| <font color="#26A269">query</font> run a query |
| <font color="#26A269">r</font> query each package registry separately |
| <font color="#26A269">registry</font> query each package registry separately |
| <font color="#26A269">sc</font> gather stats on a local sccache cache |
| <font color="#26A269">sccache</font> gather stats on a local sccache cache |
| <font color="#26A269">toolchain</font> print stats on installed toolchains |
| <font color="#26A269">trim</font> trim old items from the cache until maximum cache size limit is reached |
| <font color="#26A269">verify</font> verify crate sources |
| </pre></html></WRAP> |
| </WRAP> |
| |
| === インストール === |
| <WRAP color_term> |
| <WRAP color_command><html><pre> |
| <font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> install cargo-cache |
| </pre></html></WRAP> |
| <WRAP color_result_hlong><html><pre> |
| <font color="#26A269"><b> Updating</b></font> crates.io index |
| <font color="#26A269"><b> Downloaded</b></font> cargo-cache v0.8.3 |
| <font color="#26A269"><b> Downloaded</b></font> 1 crate (243.9 KB) in 0.36s |
| <font color="#26A269"><b> Installing</b></font> cargo-cache v0.8.3 |
| <font color="#26A269"><b> Updating</b></font> crates.io index |
| <font color="#26A269"><b> Downloaded</b></font> adler v1.0.2 |
| <font color="#26A269"><b> Downloaded</b></font> bitflags v1.3.2 |
| <font color="#26A269"><b> Downloaded</b></font> autocfg v1.3.0 |
| <font color="#26A269"><b> Downloaded</b></font> camino v1.1.7 |
| <font color="#26A269"><b> Downloaded</b></font> bitflags v2.5.0 |
| <font color="#26A269"><b> Downloaded</b></font> atty v0.2.14 |
| <font color="#26A269"><b> Downloaded</b></font> cfg-if v1.0.0 |
| <font color="#26A269"><b> Downloaded</b></font> cargo-platform v0.1.8 |
| <font color="#26A269"><b> Downloaded</b></font> rustc_tools_util v0.2.1 |
| <font color="#26A269"><b> Downloaded</b></font> tinyvec_macros v0.1.1 |
| <font color="#26A269"><b> Downloaded</b></font> clap_lex v0.2.4 |
| <font color="#26A269"><b> Downloaded</b></font> dirs-next v2.0.0 |
| <font color="#26A269"><b> Downloaded</b></font> cargo_metadata v0.15.4 |
| <font color="#26A269"><b> Downloaded</b></font> filetime v0.2.23 |
| <font color="#26A269"><b> Downloaded</b></font> dirs-sys-next v0.1.2 |
| <font color="#26A269"><b> Downloaded</b></font> itoa v1.0.11 |
| <font color="#26A269"><b> Downloaded</b></font> humansize v1.1.1 |
| <font color="#26A269"><b> Downloaded</b></font> home v0.5.9 |
| <font color="#26A269"><b> Downloaded</b></font> form_urlencoded v1.2.1 |
| <font color="#26A269"><b> Downloaded</b></font> pkg-config v0.3.30 |
| <font color="#26A269"><b> Downloaded</b></font> either v1.12.0 |
| <font color="#26A269"><b> Downloaded</b></font> percent-encoding v2.3.1 |
| <font color="#26A269"><b> Downloaded</b></font> errno v0.3.9 |
| <font color="#26A269"><b> Downloaded</b></font> remove_dir_all v0.7.0 |
| <font color="#26A269"><b> Downloaded</b></font> strsim v0.10.0 |
| <font color="#26A269"><b> Downloaded</b></font> crossbeam-deque v0.8.5 |
| <font color="#26A269"><b> Downloaded</b></font> termcolor v1.4.1 |
| <font color="#26A269"><b> Downloaded</b></font> xattr v1.3.1 |
| <font color="#26A269"><b> Downloaded</b></font> walkdir v2.5.0 |
| <font color="#26A269"><b> Downloaded</b></font> thiserror-impl v1.0.61 |
| <font color="#26A269"><b> Downloaded</b></font> terminal_size v0.2.6 |
| <font color="#26A269"><b> Downloaded</b></font> crc32fast v1.4.2 |
| <font color="#26A269"><b> Downloaded</b></font> io-lifetimes v1.0.11 |
| <font color="#26A269"><b> Downloaded</b></font> same-file v1.0.6 |
| <font color="#26A269"><b> Downloaded</b></font> jobserver v0.1.31 |
| <font color="#26A269"><b> Downloaded</b></font> os_str_bytes v6.6.1 |
| <font color="#26A269"><b> Downloaded</b></font> once_cell v1.19.0 |
| <font color="#26A269"><b> Downloaded</b></font> semver v1.0.23 |
| <font color="#26A269"><b> Downloaded</b></font> crossbeam-epoch v0.9.18 |
| <font color="#26A269"><b> Downloaded</b></font> iana-time-zone v0.1.60 |
| <font color="#26A269"><b> Downloaded</b></font> miniz_oxide v0.7.3 |
| <font color="#26A269"><b> Downloaded</b></font> proc-macro2 v1.0.84 |
| <font color="#26A269"><b> Downloaded</b></font> thiserror v1.0.61 |
| <font color="#26A269"><b> Downloaded</b></font> serde_derive v1.0.203 |
| <font color="#26A269"><b> Downloaded</b></font> ryu v1.0.18 |
| <font color="#26A269"><b> Downloaded</b></font> tinyvec v1.6.0 |
| <font color="#26A269"><b> Downloaded</b></font> unicode-ident v1.0.12 |
| <font color="#26A269"><b> Downloaded</b></font> textwrap v0.16.1 |
| <font color="#26A269"><b> Downloaded</b></font> crossbeam-utils v0.8.20 |
| <font color="#26A269"><b> Downloaded</b></font> tar v0.4.40 |
| <font color="#26A269"><b> Downloaded</b></font> aho-corasick v1.1.3 |
| <font color="#26A269"><b> Downloaded</b></font> quote v1.0.36 |
| <font color="#26A269"><b> Downloaded</b></font> rayon-core v1.12.1 |
| <font color="#26A269"><b> Downloaded</b></font> num-traits v0.2.19 |
| <font color="#26A269"><b> Downloaded</b></font> unicode-bidi v0.3.15 |
| <font color="#26A269"><b> Downloaded</b></font> log v0.4.21 |
| <font color="#26A269"><b> Downloaded</b></font> cc v1.0.98 |
| <font color="#26A269"><b> Downloaded</b></font> flate2 v1.0.30 |
| <font color="#26A269"><b> Downloaded</b></font> indexmap v1.9.3 |
| <font color="#26A269"><b> Downloaded</b></font> serde v1.0.203 |
| <font color="#26A269"><b> Downloaded</b></font> url v2.5.0 |
| <font color="#26A269"><b> Downloaded</b></font> memchr v2.7.2 |
| <font color="#26A269"><b> Downloaded</b></font> hashbrown v0.12.3 |
| <font color="#26A269"><b> Downloaded</b></font> unicode-normalization v0.1.23 |
| <font color="#26A269"><b> Downloaded</b></font> serde_json v1.0.117 |
| <font color="#26A269"><b> Downloaded</b></font> rayon v1.10.0 |
| <font color="#26A269"><b> Downloaded</b></font> git2 v0.14.4 |
| <font color="#26A269"><b> Downloaded</b></font> clap v3.2.25 |
| <font color="#26A269"><b> Downloaded</b></font> vcpkg v0.2.15 |
| <font color="#26A269"><b> Downloaded</b></font> syn v2.0.66 |
| <font color="#26A269"><b> Downloaded</b></font> idna v0.5.0 |
| <font color="#26A269"><b> Downloaded</b></font> rustix v0.38.34 |
| <font color="#26A269"><b> Downloaded</b></font> rustix v0.37.27 |
| <font color="#26A269"><b> Downloaded</b></font> regex-automata v0.4.6 |
| <font color="#26A269"><b> Downloaded</b></font> libz-sys v1.1.18 |
| <font color="#26A269"><b> Downloaded</b></font> linux-raw-sys v0.3.8 |
| <font color="#26A269"><b> Downloaded</b></font> libc v0.2.155 |
| <font color="#26A269"><b> Downloaded</b></font> regex-syntax v0.8.3 |
| <font color="#26A269"><b> Downloaded</b></font> regex v1.10.4 |
| <font color="#26A269"><b> Downloaded</b></font> libgit2-sys v0.13.5+1.4.5 |
| <font color="#26A269"><b> Downloaded</b></font> linux-raw-sys v0.4.14 |
| <font color="#26A269"><b> Downloaded</b></font> chrono v0.4.38 |
| <font color="#26A269"><b> Downloaded</b></font> 82 crates (12.1 MB) in 1.78s (largest was `linux-raw-sys` at 1.8 MB) |
| <font color="#26A269"><b> Compiling</b></font> libc v0.2.155 |
| <font color="#26A269"><b> Compiling</b></font> proc-macro2 v1.0.84 |
| <font color="#26A269"><b> Compiling</b></font> unicode-ident v1.0.12 |
| <font color="#26A269"><b> Compiling</b></font> quote v1.0.36 |
| <font color="#26A269"><b> Compiling</b></font> syn v2.0.66 |
| <font color="#26A269"><b> Compiling</b></font> jobserver v0.1.31 |
| <font color="#26A269"><b> Compiling</b></font> once_cell v1.19.0 |
| <font color="#26A269"><b> Compiling</b></font> autocfg v1.3.0 |
| <font color="#26A269"><b> Compiling</b></font> cc v1.0.98 |
| <font color="#26A269"><b> Compiling</b></font> serde v1.0.203 |
| <font color="#26A269"><b> Compiling</b></font> pkg-config v0.3.30 |
| <font color="#26A269"><b> Compiling</b></font> serde_derive v1.0.203 |
| <font color="#26A269"><b> Compiling</b></font> crossbeam-utils v0.8.20 |
| <font color="#26A269"><b> Compiling</b></font> io-lifetimes v1.0.11 |
| <font color="#26A269"><b> Compiling</b></font> vcpkg v0.2.15 |
| <font color="#26A269"><b> Compiling</b></font> libz-sys v1.1.18 |
| <font color="#26A269"><b> Compiling</b></font> cfg-if v1.0.0 |
| <font color="#26A269"><b> Compiling</b></font> bitflags v1.3.2 |
| <font color="#26A269"><b> Compiling</b></font> tinyvec_macros v0.1.1 |
| <font color="#26A269"><b> Compiling</b></font> rustix v0.37.27 |
| <font color="#26A269"><b> Compiling</b></font> tinyvec v1.6.0 |
| <font color="#26A269"><b> Compiling</b></font> linux-raw-sys v0.3.8 |
| <font color="#26A269"><b> Compiling</b></font> rustix v0.38.34 |
| <font color="#26A269"><b> Compiling</b></font> crossbeam-epoch v0.9.18 |
| <font color="#26A269"><b> Compiling</b></font> unicode-normalization v0.1.23 |
| <font color="#26A269"><b> Compiling</b></font> libgit2-sys v0.13.5+1.4.5 |
| <font color="#26A269"><b> Compiling</b></font> num-traits v0.2.19 |
| <font color="#26A269"><b> Compiling</b></font> indexmap v1.9.3 |
| <font color="#26A269"><b> Compiling</b></font> thiserror v1.0.61 |
| <font color="#26A269"><b> Compiling</b></font> camino v1.1.7 |
| <font color="#26A269"><b> Compiling</b></font> semver v1.0.23 |
| <font color="#26A269"><b> Compiling</b></font> percent-encoding v2.3.1 |
| <font color="#26A269"><b> Compiling</b></font> serde_json v1.0.117 |
| <font color="#26A269"><b> Compiling</b></font> linux-raw-sys v0.4.14 |
| <font color="#26A269"><b> Compiling</b></font> unicode-bidi v0.3.15 |
| <font color="#26A269"><b> Compiling</b></font> memchr v2.7.2 |
| <font color="#26A269"><b> Compiling</b></font> rayon-core v1.12.1 |
| <font color="#26A269"><b> Compiling</b></font> bitflags v2.5.0 |
| <font color="#26A269"><b> Compiling</b></font> aho-corasick v1.1.3 |
| <font color="#26A269"><b> Compiling</b></font> idna v0.5.0 |
| <font color="#26A269"><b> Compiling</b></font> form_urlencoded v1.2.1 |
| <font color="#26A269"><b> Compiling</b></font> terminal_size v0.2.6 |
| <font color="#26A269"><b> Compiling</b></font> crossbeam-deque v0.8.5 |
| <font color="#26A269"><b> Compiling</b></font> thiserror-impl v1.0.61 |
| <font color="#26A269"><b> Compiling</b></font> rustc_tools_util v0.2.1 |
| <font color="#26A269"><b> Compiling</b></font> ryu v1.0.18 |
| <font color="#26A269"><b> Compiling</b></font> hashbrown v0.12.3 |
| <font color="#26A269"><b> Compiling</b></font> itoa v1.0.11 |
| <font color="#26A269"><b> Compiling</b></font> regex-syntax v0.8.3 |
| <font color="#26A269"><b> Compiling</b></font> os_str_bytes v6.6.1 |
| <font color="#26A269"><b> Compiling</b></font> adler v1.0.2 |
| <font color="#26A269"><b> Compiling</b></font> miniz_oxide v0.7.3 |
| <font color="#26A269"><b> Compiling</b></font> clap_lex v0.2.4 |
| <font color="#26A269"><b> Compiling</b></font> regex-automata v0.4.6 |
| <font color="#26A269"><b> Compiling</b></font> cargo-cache v0.8.3 |
| <font color="#26A269"><b> Compiling</b></font> textwrap v0.16.1 |
| <font color="#26A269"><b> Compiling</b></font> url v2.5.0 |
| <font color="#26A269"><b> Compiling</b></font> xattr v1.3.1 |
| <font color="#26A269"><b> Compiling</b></font> cargo-platform v0.1.8 |
| <font color="#26A269"><b> Compiling</b></font> crc32fast v1.4.2 |
| <font color="#26A269"><b> Compiling</b></font> filetime v0.2.23 |
| <font color="#26A269"><b> Compiling</b></font> dirs-sys-next v0.1.2 |
| <font color="#26A269"><b> Compiling</b></font> atty v0.2.14 |
| <font color="#26A269"><b> Compiling</b></font> same-file v1.0.6 |
| <font color="#26A269"><b> Compiling</b></font> termcolor v1.4.1 |
| <font color="#26A269"><b> Compiling</b></font> iana-time-zone v0.1.60 |
| <font color="#26A269"><b> Compiling</b></font> log v0.4.21 |
| <font color="#26A269"><b> Compiling</b></font> either v1.12.0 |
| <font color="#26A269"><b> Compiling</b></font> strsim v0.10.0 |
| <font color="#26A269"><b> Compiling</b></font> clap v3.2.25 |
| <font color="#26A269"><b> Compiling</b></font> rayon v1.10.0 |
| <font color="#26A269"><b> Compiling</b></font> chrono v0.4.38 |
| <font color="#26A269"><b> Compiling</b></font> walkdir v2.5.0 |
| <font color="#26A269"><b> Compiling</b></font> dirs-next v2.0.0 |
| <font color="#26A269"><b> Compiling</b></font> tar v0.4.40 |
| <font color="#26A269"><b> Compiling</b></font> flate2 v1.0.30 |
| <font color="#26A269"><b> Compiling</b></font> cargo_metadata v0.15.4 |
| <font color="#26A269"><b> Compiling</b></font> regex v1.10.4 |
| <font color="#26A269"><b> Compiling</b></font> remove_dir_all v0.7.0 |
| <font color="#26A269"><b> Compiling</b></font> home v0.5.9 |
| <font color="#26A269"><b> Compiling</b></font> humansize v1.1.1 |
| <font color="#26A269"><b> Compiling</b></font> git2 v0.14.4 |
| <font color="#26A269"><b> Finished</b></font> `release` profile [optimized] target(s) in 8m 28s |
| <font color="#26A269"><b> Installing</b></font> /home/tomoyan/.cargo/bin/cargo-cache |
| <font color="#26A269"><b> Installed</b></font> package `cargo-cache v0.8.3` (executable `cargo-cache`) |
</pre></html></WRAP> | </pre></html></WRAP> |
</WRAP> | </WRAP> |
| |
===== ツールチェイン (toolchain) ===== | ===== ツールチェイン (toolchain) ===== |
インストール済みのツールチェーンの確認🤔\\ | 公式: [[https://rust-lang.github.io/rustup/concepts/toolchains.html|Toolchains - The rustup book]] [[gtr>https://rust-lang.github.io/rustup/concepts/toolchains.html|翻訳]]\\ |
| Rust のツールチェーン仕様は <html><pre><code><channel>[-<date>][-<host>] |
| |
| <channel> = stable|beta|nightly|<major.minor>|<major.minor.patch> |
| <date> = YYYY-MM-DD |
| <host> = <target-triple> |
| </code></pre></html> |
| 例: stable-x86_64-unknown-linux-gnu\\ |
| **channel:** //stable//\\ |
| **date:** \\ |
| **host:** //x86_64-unknown-linux-gnu (target-triple)//\\ |
| |
| esp32 マイコン用の <html><code>esp</code></html> ツールチェーンは [[rust:rust_on_esp_install#ツールチェーンのインストール|espup]] で追加する。\\ |
| |
| インストール済みのツールチェーン一覧の確認🤔\\ |
<WRAP color_term> | <WRAP color_term> |
<WRAP color_command><html><pre> | <WRAP color_command><html><pre> |
| |
デフォルトのツールチェインを確認する🤔\\ | デフォルトのツールチェインを確認する🤔\\ |
| |
**Fedora**\\ | **Fedora**\\ |
<WRAP color_term> | <WRAP color_term> |
</WRAP> | </WRAP> |
| |
**バージョンを指定してツールチェーンを追加する場合**\\ | ==== バージョンを指定したツールチェーンの追加 ==== |
| 公式: [[https://rust-lang.github.io/rustup/concepts/channels.html|Channels - The rustup book]] [[gtr>https://rust-lang.github.io/rustup/concepts/channels.html|翻訳]]\\ |
<WRAP color_term> | <WRAP color_term> |
<WRAP color_command><html><pre> | <WRAP color_command><html><pre> |
<span style="color:#FF8700"><b>$</b></span> <span style="color:#26A269">rustup</span> toolchain add 1.65 | <span style="color:#FF8700"><b>$</b></span> <span style="color:#26A269">rustup</span> toolchain install 1.67 |
</pre></html></WRAP> | </pre></html></WRAP> |
<WRAP color_result><html><pre> | <WRAP color_result><html><pre> |
<b>info: </b>syncing channel updates for '1.65-x86_64-unknown-linux-gnu' | <b>info: </b>syncing channel updates for '1.67-x86_64-unknown-linux-gnu' |
714.2 KiB / 714.2 KiB (100 %) 207.4 KiB/s in 3s ETA: 0s | <b>info: </b>latest update on 2023-02-09, rust version 1.67.1 (d5a82bbd2 2023-02-07) |
<b>info: </b>latest update on 2022-11-03, rust version 1.65.0 (897e37553 2022-11-02) | |
<b>info: </b>downloading component 'cargo' | <b>info: </b>downloading component 'cargo' |
6.5 MiB / 6.5 MiB (100 %) 1.0 MiB/s in 6s ETA: 0s | 6.6 MiB / 6.6 MiB (100 %) 2.7 MiB/s in 2s ETA: 0s |
<b>info: </b>downloading component 'clippy' | <b>info: </b>downloading component 'clippy' |
2.9 MiB / 2.9 MiB (100 %) 1.3 MiB/s in 1s ETA: 0s | |
<b>info: </b>downloading component 'rust-docs' | <b>info: </b>downloading component 'rust-docs' |
18.8 MiB / 18.8 MiB (100 %) 683.3 KiB/s in 27s ETA: 0s | 19.3 MiB / 19.3 MiB (100 %) 3.8 MiB/s in 5s ETA: 0s |
<b>info: </b>downloading component 'rust-std' | <b>info: </b>downloading component 'rust-std' |
30.0 MiB / 30.0 MiB (100 %) 561.9 KiB/s in 1m 45s ETA: 0s | 29.3 MiB / 29.3 MiB (100 %) 522.0 KiB/s in 15s ETA: 0s |
<b>info: </b>downloading component 'rustc' | <b>info: </b>downloading component 'rustc' |
56.2 MiB / 56.2 MiB (100 %) 646.9 KiB/s in 3m 32s ETA: 0s | 67.8 MiB / 67.8 MiB (100 %) 4.5 MiB/s in 18s ETA: 0s |
<b>info: </b>downloading component 'rustfmt' | <b>info: </b>downloading component 'rustfmt' |
4.3 MiB / 4.3 MiB (100 %) 643.8 KiB/s in 7s ETA: 0s | 4.5 MiB / 4.5 MiB (100 %) 4.1 MiB/s in 1s ETA: 0s |
<b>info: </b>installing component 'cargo' | <b>info: </b>installing component 'cargo' |
<b>info: </b>installing component 'clippy' | <b>info: </b>installing component 'clippy' |
<b>info: </b>installing component 'rust-docs' | <b>info: </b>installing component 'rust-docs' |
18.8 MiB / 18.8 MiB (100 %) 4.9 MiB/s in 3s ETA: 0s | 19.3 MiB / 19.3 MiB (100 %) 5.0 MiB/s in 3s ETA: 0s |
<b>info: </b>installing component 'rust-std' | <b>info: </b>installing component 'rust-std' |
30.0 MiB / 30.0 MiB (100 %) 7.1 MiB/s in 4s ETA: 0s | 29.3 MiB / 29.3 MiB (100 %) 6.9 MiB/s in 4s ETA: 0s |
<b>info: </b>installing component 'rustc' | <b>info: </b>installing component 'rustc' |
56.2 MiB / 56.2 MiB (100 %) 9.3 MiB/s in 6s ETA: 0s | 67.8 MiB / 67.8 MiB (100 %) 6.3 MiB/s in 16s ETA: 0s |
| 4 IO-ops / 4 IO-ops (100 %) 0 IOPS in 8s ETA: Unknown |
<b>info: </b>installing component 'rustfmt' | <b>info: </b>installing component 'rustfmt' |
| |
<span style="color:#26A269"><b>1.65-x86_64-unknown-linux-gnu installed</b></span> - rustc 1.65.0 (897e37553 2022-11-02) | <span style="color:#26A269"><b>1.67-x86_64-unknown-linux-gnu installed</b></span> - rustc 1.67.1 (d5a82bbd2 2023-02-07) |
| |
<b>info: </b>checking for self-update | <b>info: </b>checking for self-update |
<WRAP color_term> | <WRAP color_term> |
<WRAP color_command><html><pre> | <WRAP color_command><html><pre> |
<pre><span style="color:#FF8700"><b>$</b></span> <span style="color:#26A269">rustup</span> run 1.65 rustc <span style="color:#A347BA">-V</span> | <span style="color:#FF8700"><b>$</b></span> <span style="color:#26A269">rustup</span> run 1.67 rustc <span style="color:#A347BA">-V</span> |
</pre></html></WRAP> | </pre></html></WRAP> |
<WRAP color_result><html><pre> | <WRAP color_result><html><pre> |
rustc 1.65.0 (897e37553 2022-11-02) | rustc 1.67.1 (d5a82bbd2 2023-02-07) |
</pre></html></WRAP> | </pre></html></WRAP> |
</WRAP> | </WRAP> |
<WRAP color_term> | <WRAP color_term> |
<WRAP color_command><html><pre> | <WRAP color_command><html><pre> |
<span style="color:#FF8700"><b>$</b></span> <span style="color:#26A269">rustup</span> default 1.65 | <span style="color:#FF8700"><b>$</b></span> <span style="color:#26A269">rustup</span> default 1.67 |
</pre></html></WRAP> | </pre></html></WRAP> |
<WRAP color_result><html><pre> | <WRAP color_result><html><pre> |
<b>info: </b>using existing install for '1.65-x86_64-unknown-linux-gnu' | <b>info: </b>using existing install for '1.67-x86_64-unknown-linux-gnu' |
<b>info: </b>default toolchain set to '1.65-x86_64-unknown-linux-gnu' | <b>info: </b>default toolchain set to '1.67-x86_64-unknown-linux-gnu' |
| |
<b>1.65-x86_64-unknown-linux-gnu unchanged</b> - rustc 1.65.0 (897e37553 2022-11-02) | <b>1.67-x86_64-unknown-linux-gnu unchanged</b> - rustc 1.67.1 (d5a82bbd2 2023-02-07) |
| </pre></html></WRAP> |
| </WRAP> |
| |
| ツールチェーン一覧でもデフォルトを確認できる🤔\\ |
| <WRAP color_term> |
| <WRAP color_command><html><pre> |
| <span style="color:#FF8700"><b>$</b></span> <span style="color:#26A269">rustup</span> toolchain list |
| </pre></html></WRAP> |
| <WRAP color_result><html><pre> |
| stable-x86_64-unknown-linux-gnu |
| nightly-x86_64-unknown-linux-gnu |
| 1.67-x86_64-unknown-linux-gnu <b class=DiYE>(default)</b> |
| esp |
</pre></html></WRAP> | </pre></html></WRAP> |
</WRAP> | </WRAP> |
</pre></html></WRAP> | </pre></html></WRAP> |
<WRAP color_result><html><pre> | <WRAP color_result><html><pre> |
rustc 1.65.0 (897e37553 2022-11-02) | rustc 1.76.0-nightly (87e1447aa 2023-11-30) |
binary: rustc | binary: rustc |
commit-hash: 897e37553bba8b42751c67658967889d11ecd120 | commit-hash: 87e1447aadaa2899ff6ccabe1fa669eb50fb60a1 |
commit-date: 2022-11-02 | commit-date: 2023-11-30 |
host: x86_64-unknown-linux-gnu | host: x86_64-unknown-linux-gnu |
release: 1.65.0 | release: 1.76.0-nightly |
LLVM version: 15.0.0 | LLVM version: 17.0.5 |
| </pre></html></WRAP> |
| </WRAP> |
| |
| ==== ツールチェーンの削除 ==== |
| <WRAP color_term> |
| <WRAP color_command><html><pre> |
| <span style="color:#FF8700"><b>$</b></span> <span style="color:#26A269">rustup</span> toolchain uninstall 1.67 |
| </pre></html></WRAP> |
| <WRAP color_result><html><pre> |
| <b>info: </b>uninstalling toolchain '1.67-x86_64-unknown-linux-gnu' |
| <b>info: </b>toolchain '1.67-x86_64-unknown-linux-gnu' uninstalled |
| </pre></html></WRAP> |
| </WRAP> |
| |
| <WRAP color_term> |
| <WRAP color_command><html><pre> |
| <span style="color:#FF8700"><b>$</b></span> <span style="color:#26A269">rustup</span> toolchain list |
| </pre></html></WRAP> |
| <WRAP color_result><html><pre> |
| stable-x86_64-unknown-linux-gnu (default) |
| nightly-x86_64-unknown-linux-gnu |
| esp |
| </pre></html></WRAP> |
| </WRAP> |
| |
| ==== ディレクトリ毎のツールチェーンのオーバーライド ==== |
| 公式: [[https://rust-lang.github.io/rustup/overrides.html#directory-overrides|Directory overrides - Overrides - The rustup book]] [[gtr>https://rust-lang.github.io/rustup/overrides.html#directory-overrides|翻訳]]\\ |
| <WRAP color_term> |
| <WRAP color_command><html><pre> |
| <span style="color:#FF8700"><b>$</b></span> <span style="color:#26A269">rustup</span> toolchain list |
| </pre></html></WRAP> |
| <WRAP color_result><html><pre> |
| stable-x86_64-unknown-linux-gnu (default) |
| nightly-x86_64-unknown-linux-gnu |
| esp |
| </pre></html></WRAP> |
| </WRAP> |
| |
| <WRAP color_term> |
| <WRAP color_command><html><pre> |
| <span style="color:#FF8700"><b>$</b></span> <span style="color:#26A269">cd</span> <u style="text-decoration-style:single">e</u><span style="color:#999999"><u style="text-decoration-style:single">sp32-nostd-ssd1306</u></span> |
| <span style="color:#FF8700"><b>$</b></span> <span style="color:#26A269">rustup</span> override set esp |
| </pre></html></WRAP> |
| <WRAP color_result><html><pre> |
| <b>info: </b>override toolchain for '/home/tomoyan/my_projects/esp32-nostd-ssd1306' set to 'esp' |
| </pre></html></WRAP> |
| <WRAP color_command><html><pre> |
| <span style="color:#FF8700"><b>$</b></span> <span style="color:#26A269">rustup</span> toolchain list |
| </pre></html></WRAP> |
| <WRAP color_result><html><pre> |
| stable-x86_64-unknown-linux-gnu (default) |
| nightly-x86_64-unknown-linux-gnu |
| esp (override) |
| </pre></html></WRAP> |
| <WRAP color_command><html><pre> |
| <span style="color:#FF8700"><b>$</b></span> <span style="color:#26A269">cd</span> <u style="text-decoration-style:single">..</u> |
| <span style="color:#FF8700"><b>$</b></span> <span style="color:#26A269">rustup</span> toolchain list |
| </pre></html></WRAP> |
| <WRAP color_result><html><pre> |
| stable-x86_64-unknown-linux-gnu (default) |
| nightly-x86_64-unknown-linux-gnu |
| esp |
| </pre></html></WRAP> |
| <WRAP color_command><html><pre> |
| <span style="color:#FF8700"><b>$</b></span> <span style="color:#26A269">cd</span> <u style="text-decoration-style:single">e</u><span style="color:#999999"><u style="text-decoration-style:single">sp32-nostd-ssd1306</u></span> |
| <span style="color:#FF8700"><b>$</b></span> <span style="color:#26A269">rustup</span> toolchain list |
| </pre></html></WRAP> |
| <WRAP color_result><html><pre> |
| stable-x86_64-unknown-linux-gnu (default) |
| nightly-x86_64-unknown-linux-gnu |
| esp (override) |
| </pre></html></WRAP> |
| </WRAP> |
| |
| オーバーライドの解除\\ |
| <WRAP color_term> |
| <WRAP color_command><html><pre> |
| <span style="color:#FF8700"><b>$</b></span> <span style="color:#26A269">rustup</span><span style="color:#999999"> override unset</span> |
| </pre></html></WRAP> |
| <WRAP color_result><html><pre> |
| <b>info: </b>override toolchain for '/home/tomoyan/my_projects/esp32-nostd-ssd1306' removed |
</pre></html></WRAP> | </pre></html></WRAP> |
</WRAP> | </WRAP> |
| |
クロスビルド可能なターゲットの一覧を表示する🤔\\ | ==== クロスビルド可能なターゲットの一覧表示 ==== |
※ターゲットトリプル: <html><code>{arch}-{vendor}-{sys}-{abi}</code></html>\\ | ※ターゲットトリプル: <html><code>{arch}-{vendor}-{sys}-{abi}</code></html>\\ |
<html><code>{abi}</code></html> を除く <html><code>{arch}-{vendor}-{sys}</code></html> のこと🤔\\ | <html><code>{abi}</code></html> を除く <html><code>{arch}-{vendor}-{sys}</code></html> のこと🤔\\ |
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> |
</WRAP> | </WRAP> |
| |
===== sccache - Shared Compilation Cache ===== | ===== クレート ===== |
| <html><style> |
| .wrap_crates_list div.wrap_color_term { |
| margin: 0; |
| padding: .2em; |
| } |
| .wrap_crates_list .wrap_color_command pre { |
| min-width: unset; |
| } |
| .wrap_crates_list .col0, |
| .wrap_crates_list .col1 /*pre*/ { |
| white-space: nowrap; |
| } |
| .wrap_crates_list .col1 { |
| width: 50%; |
| } |
| </style></html> |
| <WRAP mintbl_11 crates_list> |
| ^ ドキュメント\\ リポジトリ ^ クレート追加\\ サンプル (<wrap em>examples</wrap>) ^ 説明 ^ |
| | [[https://docs.rs/clap|clap - Rust]]\\ [[git>clap-rs/clap|clap]] | <WRAP color_term><WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add clap <font color="#A347BA">-F</font><font color="#999999"> derive</font></pre></html></WRAP> <WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">git</font> clone <font color="#A347BA">--depth</font> 1 https://github.com/clap-rs/clap.git</pre></html></WRAP></WRAP> | Command Line Argument Parser for Rust | |
| | [[https://docs.rs/walkdir|walkdir - Rust]]\\ [[git>BurntSushi/walkdir|walkdir]] | <WRAP color_term><WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add walkdir</pre></html></WRAP> <WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">git</font> clone <font color="#A347BA">--depth</font> 1 https://github.com/BurntSushi/walkdir.git</pre></html></WRAP></WRAP> | Rust library for walking directories recursively. | |
| | [[https://docs.rs/dotenv|dotenv - Rust]]\\ [[git>dotenv-rs/dotenv|rust-dotenv]] | <WRAP color_term><WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add dotenv</pre></html></WRAP> <WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">git</font> clone <font color="#A347BA">--depth</font> 1 https://github.com/dotenv-rs/dotenv.git</pre></html></WRAP></WRAP> | It loads environment variables from a .env file. | |
| | [[https://docs.rs/colored|colored - Rust]]\\ [[git>mackwic/colored|Colored]] | <WRAP color_term><WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add colored</pre></html></WRAP> <WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">git</font> clone <font color="#A347BA">--depth</font> 1 https://github.com/colored-rs/colored.git</pre></html></WRAP></WRAP> | colored: (Rust) Coloring terminal so simple you already know how to do it !. | |
| | [[https://docs.rs/diesel|diesel - Rust]]\\ [[git>diesel-rs/diesel|diesel ORM]] | <WRAP color_term><WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add diesel</pre></html></WRAP> <WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">git</font> clone <font color="#A347BA">--depth</font> 1 https://github.com/diesel-rs/diesel.git</pre></html></WRAP></WRAP> | diesel: A safe, extensible ORM and Query Builder for Rust. | |
| | [[https://docs.rs/env_logger|env_logger - Rust]]\\ [[git>rust-cli/env_logger|env_logger]] | <WRAP color_term><WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add env_logger</pre></html></WRAP> <WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">git</font> clone <font color="#A347BA">--depth</font> 1 https://github.com/rust-cli/env_logger.git</pre></html></WRAP></WRAP> | rust-cli/env_logger: A logging implementation for `log` which is configured via an environment variable. | |
| | [[https://docs.rs/exif|exif - Rust]]\\ [[glb>dcuddeback/exif|exif]] | <WRAP color_term><WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add exif</pre></html></WRAP> <WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">git</font> clone <font color="#A347BA">--depth</font> 1 https://gitlab.com/dcuddeback/exif.git</pre></html></WRAP></WRAP> | Rust wrapper for libexif. | |
| | [[https://docs.rs/numfmt|numfmt - Rust]]\\ [[git>kurtlawrence/numfmt|numfmt]] | <WRAP color_term><WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add numfmt</pre></html></WRAP> <WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">git</font> clone <font color="#A347BA">--depth</font> 1 https://github.com/kurtlawrence/numfmt.git</pre></html></WRAP></WRAP> | kurtlawrence/numfmt: Fast and friendly Rust number formatting | |
| | [[https://docs.rs/pathdiff|pathdiff - Rust]]\\ [[git>Manishearth/pathdiff|pathdiff]] | <WRAP color_term><WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add pathdiff</pre></html></WRAP> <WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">git</font> clone <font color="#A347BA">--depth</font> 1 https://github.com/Manishearth/pathdiff.git</pre></html></WRAP></WRAP> | Manishearth/pathdiff | |
| | [[https://docs.rs/spinners|spinners - Rust]]\\ [[git>fgribreau/spinners|spinners]] | <WRAP color_term><WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add spinners</pre></html></WRAP> <WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">git</font> clone <font color="#A347BA">--depth</font> 1 https://github.com/FGRibreau/spinners.git</pre></html></WRAP></WRAP> | FGRibreau/spinners: 🛎 60+ Elegant terminal spinners for Rust | |
| | [[https://docs.rs/substring|substring - Rust]]\\ [[git>Anders429/substring|substring]] | <WRAP color_term><WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add substring</pre></html></WRAP> <WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">git</font> clone <font color="#A347BA">--depth</font> 1 https://github.com/Anders429/substring.git</pre></html></WRAP></WRAP> | Anders429/substring: A substring method for string types. | |
| | [[https://docs.rs/termion|termion - Rust]]\\ [[glbc>redox-os.org/redox-os/termion|termion]] | <WRAP color_term><WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add termion</pre></html></WRAP> <WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">git</font> clone <font color="#A347BA">--depth</font> 1 https://gitlab.redox-os.org/redox-os/termion.git</pre></html></WRAP></WRAP> | A bindless library for controlling terminals/TTY. | |
| | [[https://docs.rs/axum|axum - Rust]]\\ [[git>tokio-rs/axum|axum]] | <WRAP color_term><WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add axum</pre></html></WRAP> <WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">git</font> clone <font color="#A347BA">--depth</font> 1 https://github.com/tokio-rs/axum.git</pre></html></WRAP></WRAP> | tokio-rs/axum: Ergonomic and modular web framework built with Tokio, Tower, and Hyper | |
| | [[https://docs.rs/tera|tera - Rust]]\\ [[git>Keats/tera|tera]] | <WRAP color_term><WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add tera</pre></html></WRAP> <WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">git</font> clone <font color="#A347BA">--depth</font> 1 https://github.com/Keats/tera.git</pre></html></WRAP></WRAP> | Keats/tera: A template engine for Rust based on Jinja2/Django | |
| | [[https://docs.rs/yew|yew - Rust]]\\ [[git>yewstack/yew|yew]] | <WRAP color_term><WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add yew</pre></html></WRAP> <WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">git</font> clone <font color="#A347BA">--depth</font> 1 https://github.com/yewstack/yew.git</pre></html></WRAP></WRAP> | yewstack/yew: Rust / Wasm framework for creating reliable and efficient web applications. | |
| | [[https://docs.rs/lazy_static|lazy_static - Rust]]\\ [[git>rust-lang-nursery/lazy-static.rs|lazy_static]] | <WRAP color_term><WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add lazy_static</pre></html></WRAP> <WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">git</font> clone <font color="#A347BA">--depth</font> 1 https://github.com/rust-lang-nursery/lazy-static.rs.git</pre></html></WRAP></WRAP> | rust-lang-nursery/lazy-static.rs: A small macro for defining lazy evaluated static variables in Rust. | |
| | [[https://docs.rs/tokio|tokio - Rust]]\\ [[git>tokio-rs/tokio|tokio]] | <WRAP color_term><WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add tokio</pre></html></WRAP> <WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">git</font> clone <font color="#A347BA">--depth</font> 1 https://github.com/ratatui-org/ratatui.git</pre></html></WRAP></WRAP> | tokio-rs/tokio: A runtime for writing reliable asynchronous applications with Rust. Provides I/O, networking, scheduling, timers, ... | |
| | [[https://docs.rs/ratatui|ratatui - Rust]]\\ [[git>ratatui-org/ratatui|ratatui]] | <WRAP color_term><WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add ratatui</pre></html></WRAP> <WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">git</font> clone <font color="#A347BA">--depth</font> 1 https://github.com/ratatui-org/ratatui.git</pre></html></WRAP></WRAP> | ratatui-org/ratatui: Rust library that's all about cooking up terminal user interfaces (TUIs) 👨🍳🐀 | |
| | [[https://docs.rs/crossterm|crossterm - Rust]]\\ [[git>crossterm-rs/crossterm|crossterm]] | <WRAP color_term><WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">cargo</font> add crossterm</pre></html></WRAP> <WRAP color_command><html><pre><font color="#0087FF"><b>$</b></font> <font color="#26A269">git</font> clone <font color="#A347BA">--depth</font> 1 https://github.com/crossterm-rs/crossterm.git</pre></html></WRAP></WRAP> | crossterm-rs/crossterm: Cross platform terminal library rust | |
| </WRAP> |
| |
| ===== OS ===== |
| [[git>Centaurus99/arceos-lwip|Centaurus99/arceos-lwip: An experimental modular OS written in Rust.]]\\ |
| Rust で書かれた実験的なモジュール式オペレーティング システム (またはユニカーネル)。\\ |
| ArceOS は Unikraft から多くの影響を受けています。\\ |
| 🚧 作業中。\\ |
| |
| ==== Filesystem ==== |
| [[git>elliott10/lwext4_rust|lwext4 in Rust - elliott10/lwext4_rust]]\\ |
| [[git>gkostka/lwext4|lwext4]] は、マイクロコントローラー用の C 言語の ext2/ext3/ext4 ファイルシステム ライブラリで lwext4 in Rust は Rust インターフェースを提供するために、lwext4 を Rust 言語で抽象化している。\\ |
| |
| ===== レシピ ===== |
| |
| ==== sccache - Shared Compilation Cache ==== |
ソースコード: [[git>mozilla/sccache|mozilla/sccache: sccache is ccache with cloud storage]]\\ | ソースコード: [[git>mozilla/sccache|mozilla/sccache: sccache is ccache with cloud storage]]\\ |
| |
$ TMPDIR=/var/tmp cargo install sccache | $ TMPDIR=/var/tmp cargo install sccache |
</code></WRAP> | </code></WRAP> |
<WRAP color_result_long><html><pre> | <WRAP color_result_hlong><html><pre> |
<b class=GRN>Updating</b> crates.io index | <b class=GRN>Updating</b> crates.io index |
<b class=GRN>Downloaded</b> sccache v0.3.0 | <b class=GRN>Downloaded</b> sccache v0.3.0 |
$ sccache -h | $ sccache -h |
</code></WRAP> | </code></WRAP> |
<WRAP color_result_long><html><pre> | <WRAP color_result_hlong><html><pre> |
sccache 0.3.0 | sccache 0.3.0 |
| |
</WRAP> | </WRAP> |
| |
===== Evcxr ===== | ==== Evcxr ==== |
[[git>google/evcxr|google/evcxr - Contribute to google/evcxr development by creating an account on GitHub.]]\\ | [[git>google/evcxr|google/evcxr - Contribute to google/evcxr development by creating an account on GitHub.]]\\ |
| |
[[python:jupyterlab:jupyterlab_and_rust#evcxr|Evcxr - JupyterLab + Rust 開発環境の構築]] を参照...🤤\\ | [[python:jupyterlab:jupyterlab_and_rust#evcxr|Evcxr - JupyterLab + Rust 開発環境の構築]] を参照...🤤\\ |
| |
===== Rust Language Server ===== | ==== Rust Language Server ==== |
[[https://rust-analyzer.github.io/|rust-analyzer]]\\ | [[https://rust-analyzer.github.io/|rust-analyzer]]\\ |
[[https://rust-analyzer.github.io/manual.html|User Manual - rust-analyzer]] [[gtr>https://rust-analyzer.github.io/manual.html|翻訳]]\\ | [[https://rust-analyzer.github.io/manual.html|User Manual - rust-analyzer]] [[gtr>https://rust-analyzer.github.io/manual.html|翻訳]]\\ |
[[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]]\\ |
| |
===== Web ベースの Rust シミュレーター ===== | 以下は 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> |
| [[git>tokio-rs/axum/blob/main/ECOSYSTEM.md|axum/ECOSYSTEM.md at main · tokio-rs/axum]]\\ |
| |
| === テンプレートエンジン === |
| [[https://keats.github.io/tera/|Tera - Inspired by Jinja2 and Django templates]]\\ |
| [[https://docs.rs/handlebars/|handlebars-rust]]\\ |
| [[https://docs.rs/minijinja/|MiniJinja]]\\ |
| |
| === Wasm Web アプリケーション フレームワーク === |
| 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]]\\ |
| |
| === TUI ライブラリ === |
| ratatui: ターミナル ユーザー インターフェイス (TUI) を作成するための Rust ライブラリ 👨🍳🐀\\ |
| [[https://ratatui.rs/|Ratatui | Ratatui]]\\ |
| [[git>ratatui-org/ratatui|ratatui-org/ratatui: Rust library that's all about cooking up terminal user interfaces (TUIs) 👨🍳🐀]]\\ |
| |
| === GUI ライブラリ === |
| Rust 用のエレガントな GUI ライブラリ\\ |
| [[https://dioxuslabs.com/|Dioxus | An elegant GUI library for Rust]]\\ |
| |
| [[.rust:axum|Axum]]\\ |
| |
| ==== 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 シミュレーター ==== |
[[rust:wokwi|Wokwi]]\\ | [[rust:wokwi|Wokwi]]\\ |
| |
| ==== uutils - ユビキタスなコマンド ライン ユーティリティの Rust でのクロスプラットフォーム再実装 ==== |
| 公式: [[https://uutils.github.io/|uutils]]\\ |
| [[https://github.com/uutils/coreutils|uutils/coreutils: Cross-platform Rust rewrite of the GNU coreutils]]\\ |
| |
| === インストール === |
| <WRAP color_term> |
| <WRAP color_command><html><pre> |
| <font color="#FF8700"><b>$</b></font> <font color="#26A269">cargo</font> install coreutils |
| </pre></html></WRAP> |
| <WRAP color_result_hlong><html><pre> |
| <font color="#26A269"><b> Updating</b></font> crates.io index |
| <font color="#26A269"><b> Downloaded</b></font> coreutils v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> 1 crate (1.5 MB) in 1.82s |
| <font color="#26A269"><b> Installing</b></font> coreutils v0.0.25 |
| <font color="#26A269"><b> Updating</b></font> crates.io index |
| <font color="#26A269"><b> Downloaded</b></font> anstream v0.6.13 |
| <font color="#26A269"><b> Downloaded</b></font> arrayref v0.3.7 |
| <font color="#26A269"><b> Downloaded</b></font> anstyle v1.0.6 |
| <font color="#26A269"><b> Downloaded</b></font> uu_df v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> bitflags v2.5.0 |
| <font color="#26A269"><b> Downloaded</b></font> uu_echo v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> binary-heap-plus v0.5.0 |
| <font color="#26A269"><b> Downloaded</b></font> uu_env v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> bigdecimal v0.4.3 |
| <font color="#26A269"><b> Downloaded</b></font> console v0.15.8 |
| <font color="#26A269"><b> Downloaded</b></font> anstyle-query v1.0.2 |
| <font color="#26A269"><b> Downloaded</b></font> anstyle-parse v0.2.3 |
| <font color="#26A269"><b> Downloaded</b></font> uu_expand v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> clap_complete v4.5.1 |
| <font color="#26A269"><b> Downloaded</b></font> crossbeam-utils v0.8.19 |
| <font color="#26A269"><b> Downloaded</b></font> uu_expr v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_fmt v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_false v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_factor v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> chrono v0.4.35 |
| <font color="#26A269"><b> Downloaded</b></font> uu_fold v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> cpufeatures v0.2.12 |
| <font color="#26A269"><b> Downloaded</b></font> uu_pr v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_join v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_rm v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_hashsum v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_readlink v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_od v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_shuf v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_head v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_tail v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_printenv v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_seq v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_ptx v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_mv v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_mktemp v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_paste v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_tac v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_mkdir v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_true v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_nl v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_printf v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_rmdir v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_ls v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_test v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_sum v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_ln v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_pwd v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> fastrand v2.0.2 |
| <font color="#26A269"><b> Downloaded</b></font> uu_split v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_tr v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_tee v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_link v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_shred v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_tsort v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_sleep v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_realpath v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_touch v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_yes v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> xattr v1.3.1 |
| <font color="#26A269"><b> Downloaded</b></font> clap_mangen v0.2.20 |
| <font color="#26A269"><b> Downloaded</b></font> uutils_term_grid v0.3.0 |
| <font color="#26A269"><b> Downloaded</b></font> uu_unexpand v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_truncate v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_sort v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_more v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_numfmt v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_dirname v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_uniq v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uucore v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_wc v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> wild v2.2.1 |
| <font color="#26A269"><b> Downloaded</b></font> uu_dircolors v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_unlink v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> walkdir v2.5.0 |
| <font color="#26A269"><b> Downloaded</b></font> uu_du v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> z85 v3.0.5 |
| <font color="#26A269"><b> Downloaded</b></font> uu_vdir v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uuhelp_parser v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uucore_procs v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> const-random v0.1.18 |
| <font color="#26A269"><b> Downloaded</b></font> cfg_aliases v0.1.1 |
| <font color="#26A269"><b> Downloaded</b></font> data-encoding-macro-internal v0.1.12 |
| <font color="#26A269"><b> Downloaded</b></font> data-encoding-macro v0.1.14 |
| <font color="#26A269"><b> Downloaded</b></font> uu_base64 v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_basename v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> match_cfg v0.1.0 |
| <font color="#26A269"><b> Downloaded</b></font> uu_comm v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_dir v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> uu_basenc v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> compare v0.1.0 |
| <font color="#26A269"><b> Downloaded</b></font> constant_time_eq v0.3.0 |
| <font color="#26A269"><b> Downloaded</b></font> clap_lex v0.7.0 |
| <font color="#26A269"><b> Downloaded</b></font> hostname v0.3.1 |
| <font color="#26A269"><b> Downloaded</b></font> uu_base32 v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> ctrlc v3.4.4 |
| <font color="#26A269"><b> Downloaded</b></font> filetime v0.2.23 |
| <font color="#26A269"><b> Downloaded</b></font> keccak v0.1.5 |
| <font color="#26A269"><b> Downloaded</b></font> dlv-list v0.5.2 |
| <font color="#26A269"><b> Downloaded</b></font> data-encoding v2.5.0 |
| <font color="#26A269"><b> Downloaded</b></font> either v1.10.0 |
| <font color="#26A269"><b> Downloaded</b></font> terminal_size v0.2.6 |
| <font color="#26A269"><b> Downloaded</b></font> strsim v0.11.0 |
| <font color="#26A269"><b> Downloaded</b></font> uu_date v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> self_cell v1.0.3 |
| <font color="#26A269"><b> Downloaded</b></font> crossbeam-deque v0.8.5 |
| <font color="#26A269"><b> Downloaded</b></font> uu_cut v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> phf_codegen v0.11.2 |
| <font color="#26A269"><b> Downloaded</b></font> num-integer v0.1.46 |
| <font color="#26A269"><b> Downloaded</b></font> phf_generator v0.11.2 |
| <font color="#26A269"><b> Downloaded</b></font> uu_csplit v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> siphasher v0.3.11 |
| <font color="#26A269"><b> Downloaded</b></font> lscolors v0.16.0 |
| <font color="#26A269"><b> Downloaded</b></font> uu_cat v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> thiserror v1.0.58 |
| <font color="#26A269"><b> Downloaded</b></font> pkg-config v0.3.30 |
| <font color="#26A269"><b> Downloaded</b></font> phf_shared v0.11.2 |
| <font color="#26A269"><b> Downloaded</b></font> md-5 v0.10.6 |
| <font color="#26A269"><b> Downloaded</b></font> uu_cksum v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> phf v0.11.2 |
| <font color="#26A269"><b> Downloaded</b></font> thiserror-impl v1.0.58 |
| <font color="#26A269"><b> Downloaded</b></font> ordered-multimap v0.6.0 |
| <font color="#26A269"><b> Downloaded</b></font> quick-error v2.0.1 |
| <font color="#26A269"><b> Downloaded</b></font> os_display v0.1.3 |
| <font color="#26A269"><b> Downloaded</b></font> getrandom v0.2.12 |
| <font color="#26A269"><b> Downloaded</b></font> fs_extra v1.3.0 |
| <font color="#26A269"><b> Downloaded</b></font> bytecount v0.6.7 |
| <font color="#26A269"><b> Downloaded</b></font> blake2b_simd v1.0.2 |
| <font color="#26A269"><b> Downloaded</b></font> iana-time-zone v0.1.60 |
| <font color="#26A269"><b> Downloaded</b></font> rust-ini v0.19.0 |
| <font color="#26A269"><b> Downloaded</b></font> roff v0.2.1 |
| <font color="#26A269"><b> Downloaded</b></font> onig v6.4.0 |
| <font color="#26A269"><b> Downloaded</b></font> uu_dd v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> nu-ansi-term v0.49.0 |
| <font color="#26A269"><b> Downloaded</b></font> memmap2 v0.9.4 |
| <font color="#26A269"><b> Downloaded</b></font> sm3 v0.4.2 |
| <font color="#26A269"><b> Downloaded</b></font> uu_cp v0.0.25 |
| <font color="#26A269"><b> Downloaded</b></font> clap v4.5.3 |
| <font color="#26A269"><b> Downloaded</b></font> tempfile v3.10.1 |
| <font color="#26A269"><b> Downloaded</b></font> num-traits v0.2.18 |
| <font color="#26A269"><b> Downloaded</b></font> log v0.4.21 |
| <font color="#26A269"><b> Downloaded</b></font> half v2.4.0 |
| <font color="#26A269"><b> Downloaded</b></font> crossbeam-epoch v0.9.18 |
| <font color="#26A269"><b> Downloaded</b></font> parse_datetime v0.5.0 |
| <font color="#26A269"><b> Downloaded</b></font> notify v6.0.1 |
| <font color="#26A269"><b> Downloaded</b></font> fundu-core v0.3.0 |
| <font color="#26A269"><b> Downloaded</b></font> textwrap v0.16.1 |
| <font color="#26A269"><b> Downloaded</b></font> rayon-core v1.12.1 |
| <font color="#26A269"><b> Downloaded</b></font> indicatif v0.17.8 |
| <font color="#26A269"><b> Downloaded</b></font> cc v1.0.90 |
| <font color="#26A269"><b> Downloaded</b></font> fundu v2.0.0 |
| <font color="#26A269"><b> Downloaded</b></font> crossbeam-channel v0.5.12 |
| <font color="#26A269"><b> Downloaded</b></font> num-bigint v0.4.4 |
| <font color="#26A269"><b> Downloaded</b></font> unicode-segmentation v1.11.0 |
| <font color="#26A269"><b> Downloaded</b></font> mio v0.8.11 |
| <font color="#26A269"><b> Downloaded</b></font> hashbrown v0.13.2 |
| <font color="#26A269"><b> Downloaded</b></font> itertools v0.12.1 |
| <font color="#26A269"><b> Downloaded</b></font> clap_builder v4.5.2 |
| <font color="#26A269"><b> Downloaded</b></font> linux-raw-sys v0.4.13 |
| <font color="#26A269"><b> Downloaded</b></font> rayon v1.10.0 |
| <font color="#26A269"><b> Downloaded</b></font> blake3 v1.5.1 |
| <font color="#26A269"><b> Downloaded</b></font> nix v0.28.0 |
| <font color="#26A269"><b> Downloaded</b></font> rustix v0.37.27 |
| <font color="#26A269"><b> Downloaded</b></font> rustix v0.38.32 |
| <font color="#26A269"><b> Downloaded</b></font> onig_sys v69.8.1 |
| <font color="#26A269"><b> Downloaded</b></font> sha3 v0.10.8 |
| <font color="#26A269"><b> Downloaded</b></font> 166 crates (8.3 MB) in 5.35s (largest was `linux-raw-sys` at 1.5 MB) |
| <font color="#26A269"><b> Compiling</b></font> libc v0.2.153 |
| <font color="#26A269"><b> Compiling</b></font> cfg-if v1.0.0 |
| <font color="#26A269"><b> Compiling</b></font> bitflags v2.5.0 |
| <font color="#26A269"><b> Compiling</b></font> version_check v0.9.4 |
| <font color="#26A269"><b> Compiling</b></font> typenum v1.17.0 |
| <font color="#26A269"><b> Compiling</b></font> proc-macro2 v1.0.79 |
| <font color="#26A269"><b> Compiling</b></font> generic-array v0.14.7 |
| <font color="#26A269"><b> Compiling</b></font> rustix v0.38.32 |
| <font color="#26A269"><b> Compiling</b></font> unicode-ident v1.0.12 |
| <font color="#26A269"><b> Compiling</b></font> linux-raw-sys v0.4.13 |
| <font color="#26A269"><b> Compiling</b></font> quote v1.0.35 |
| <font color="#26A269"><b> Compiling</b></font> cc v1.0.90 |
| <font color="#26A269"><b> Compiling</b></font> utf8parse v0.2.1 |
| <font color="#26A269"><b> Compiling</b></font> memchr v2.7.1 |
| <font color="#26A269"><b> Compiling</b></font> block-buffer v0.10.4 |
| <font color="#26A269"><b> Compiling</b></font> crypto-common v0.1.6 |
| <font color="#26A269"><b> Compiling</b></font> digest v0.10.7 |
| <font color="#26A269"><b> Compiling</b></font> anstyle-parse v0.2.3 |
| <font color="#26A269"><b> Compiling</b></font> anstyle v1.0.6 |
| <font color="#26A269"><b> Compiling</b></font> colorchoice v1.0.0 |
| <font color="#26A269"><b> Compiling</b></font> anstyle-query v1.0.2 |
| <font color="#26A269"><b> Compiling</b></font> unicode-width v0.1.11 |
| <font color="#26A269"><b> Compiling</b></font> anstream v0.6.13 |
| <font color="#26A269"><b> Compiling</b></font> clap_lex v0.7.0 |
| <font color="#26A269"><b> Compiling</b></font> cfg_aliases v0.1.1 |
| <font color="#26A269"><b> Compiling</b></font> syn v1.0.109 |
| <font color="#26A269"><b> Compiling</b></font> strsim v0.11.0 |
| <font color="#26A269"><b> Compiling</b></font> nix v0.28.0 |
| <font color="#26A269"><b> Compiling</b></font> terminal_size v0.3.0 |
| <font color="#26A269"><b> Compiling</b></font> clap_builder v4.5.2 |
| <font color="#26A269"><b> Compiling</b></font> blake3 v1.5.1 |
| <font color="#26A269"><b> Compiling</b></font> syn v2.0.55 |
| <font color="#26A269"><b> Compiling</b></font> constant_time_eq v0.3.0 |
| <font color="#26A269"><b> Compiling</b></font> arrayref v0.3.7 |
| <font color="#26A269"><b> Compiling</b></font> same-file v1.0.6 |
| <font color="#26A269"><b> Compiling</b></font> thiserror v1.0.58 |
| <font color="#26A269"><b> Compiling</b></font> cpufeatures v0.2.12 |
| <font color="#26A269"><b> Compiling</b></font> either v1.10.0 |
| <font color="#26A269"><b> Compiling</b></font> data-encoding v2.5.0 |
| <font color="#26A269"><b> Compiling</b></font> arrayvec v0.7.4 |
| <font color="#26A269"><b> Compiling</b></font> walkdir v2.5.0 |
| <font color="#26A269"><b> Compiling</b></font> data-encoding-macro-internal v0.1.12 |
| <font color="#26A269"><b> Compiling</b></font> clap v4.5.3 |
| <font color="#26A269"><b> Compiling</b></font> uuhelp_parser v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> thiserror-impl v1.0.58 |
| <font color="#26A269"><b> Compiling</b></font> keccak v0.1.5 |
| <font color="#26A269"><b> Compiling</b></font> once_cell v1.19.0 |
| <font color="#26A269"><b> Compiling</b></font> sha3 v0.10.8 |
| <font color="#26A269"><b> Compiling</b></font> data-encoding-macro v0.1.14 |
| <font color="#26A269"><b> Compiling</b></font> uucore_procs v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> blake2b_simd v1.0.2 |
| <font color="#26A269"><b> Compiling</b></font> itertools v0.12.1 |
| <font color="#26A269"><b> Compiling</b></font> sha1 v0.10.6 |
| <font color="#26A269"><b> Compiling</b></font> sha2 v0.10.8 |
| <font color="#26A269"><b> Compiling</b></font> xattr v1.3.1 |
| <font color="#26A269"><b> Compiling</b></font> os_display v0.1.3 |
| <font color="#26A269"><b> Compiling</b></font> md-5 v0.10.6 |
| <font color="#26A269"><b> Compiling</b></font> sm3 v0.4.2 |
| <font color="#26A269"><b> Compiling</b></font> z85 v3.0.5 |
| <font color="#26A269"><b> Compiling</b></font> dunce v1.0.4 |
| <font color="#26A269"><b> Compiling</b></font> hex v0.4.3 |
| <font color="#26A269"><b> Compiling</b></font> glob v0.3.1 |
| <font color="#26A269"><b> Compiling</b></font> wild v2.2.1 |
| <font color="#26A269"><b> Compiling</b></font> autocfg v1.1.0 |
| <font color="#26A269"><b> Compiling</b></font> uucore v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> aho-corasick v1.1.3 |
| <font color="#26A269"><b> Compiling</b></font> num-traits v0.2.18 |
| <font color="#26A269"><b> Compiling</b></font> regex-syntax v0.8.2 |
| <font color="#26A269"><b> Compiling</b></font> crossbeam-utils v0.8.19 |
| <font color="#26A269"><b> Compiling</b></font> crunchy v0.2.2 |
| <font color="#26A269"><b> Compiling</b></font> iana-time-zone v0.1.60 |
| <font color="#26A269"><b> Compiling</b></font> chrono v0.4.35 |
| <font color="#26A269"><b> Compiling</b></font> regex-automata v0.4.6 |
| <font color="#26A269"><b> Compiling</b></font> getrandom v0.2.12 |
| <font color="#26A269"><b> Compiling</b></font> bitflags v1.3.2 |
| <font color="#26A269"><b> Compiling</b></font> tiny-keccak v2.0.2 |
| <font color="#26A269"><b> Compiling</b></font> rand_core v0.6.4 |
| <font color="#26A269"><b> Compiling</b></font> ppv-lite86 v0.2.17 |
| <font color="#26A269"><b> Compiling</b></font> rand_chacha v0.3.1 |
| <font color="#26A269"><b> Compiling</b></font> log v0.4.21 |
| <font color="#26A269"><b> Compiling</b></font> signal-hook v0.3.17 |
| <font color="#26A269"><b> Compiling</b></font> number_prefix v0.4.0 |
| <font color="#26A269"><b> Compiling</b></font> const-random-macro v0.1.16 |
| <font color="#26A269"><b> Compiling</b></font> rand v0.8.5 |
| <font color="#26A269"><b> Compiling</b></font> mio v0.8.11 |
| <font color="#26A269"><b> Compiling</b></font> lock_api v0.4.11 |
| <font color="#26A269"><b> Compiling</b></font> num-bigint v0.4.4 |
| <font color="#26A269"><b> Compiling</b></font> signal-hook-registry v1.4.1 |
| <font color="#26A269"><b> Compiling</b></font> siphasher v0.3.11 |
| <font color="#26A269"><b> Compiling</b></font> parking_lot_core v0.9.9 |
| <font color="#26A269"><b> Compiling</b></font> pkg-config v0.3.30 |
| <font color="#26A269"><b> Compiling</b></font> portable-atomic v1.6.0 |
| <font color="#26A269"><b> Compiling</b></font> regex v1.10.4 |
| <font color="#26A269"><b> Compiling</b></font> io-lifetimes v1.0.11 |
| <font color="#26A269"><b> Compiling</b></font> smallvec v1.13.2 |
| <font color="#26A269"><b> Compiling</b></font> onig_sys v69.8.1 |
| <font color="#26A269"><b> Compiling</b></font> phf_shared v0.11.2 |
| <font color="#26A269"><b> Compiling</b></font> const-random v0.1.18 |
| <font color="#26A269"><b> Compiling</b></font> crossbeam-epoch v0.9.18 |
| <font color="#26A269"><b> Compiling</b></font> num-integer v0.1.46 |
| <font color="#26A269"><b> Compiling</b></font> filetime v0.2.23 |
| <font color="#26A269"><b> Compiling</b></font> rayon-core v1.12.1 |
| <font color="#26A269"><b> Compiling</b></font> libm v0.2.8 |
| <font color="#26A269"><b> Compiling</b></font> rustix v0.37.27 |
| <font color="#26A269"><b> Compiling</b></font> match_cfg v0.1.0 |
| <font color="#26A269"><b> Compiling</b></font> scopeguard v1.2.0 |
| <font color="#26A269"><b> Compiling</b></font> nu-ansi-term v0.49.0 |
| <font color="#26A269"><b> Compiling</b></font> lazy_static v1.4.0 |
| <font color="#26A269"><b> Compiling</b></font> console v0.15.8 |
| <font color="#26A269"><b> Compiling</b></font> lscolors v0.16.0 |
| <font color="#26A269"><b> Compiling</b></font> hostname v0.3.1 |
| <font color="#26A269"><b> Compiling</b></font> crossbeam-deque v0.8.5 |
| <font color="#26A269"><b> Compiling</b></font> dlv-list v0.5.2 |
| <font color="#26A269"><b> Compiling</b></font> phf_generator v0.11.2 |
| <font color="#26A269"><b> Compiling</b></font> bigdecimal v0.4.3 |
| <font color="#26A269"><b> Compiling</b></font> uutils_term_grid v0.3.0 |
| <font color="#26A269"><b> Compiling</b></font> inotify-sys v0.1.5 |
| <font color="#26A269"><b> Compiling</b></font> fundu-core v0.3.0 |
| <font color="#26A269"><b> Compiling</b></font> fastrand v2.0.2 |
| <font color="#26A269"><b> Compiling</b></font> linux-raw-sys v0.3.8 |
| <font color="#26A269"><b> Compiling</b></font> hashbrown v0.13.2 |
| <font color="#26A269"><b> Compiling</b></font> ordered-multimap v0.6.0 |
| <font color="#26A269"><b> Compiling</b></font> fundu v2.0.0 |
| <font color="#26A269"><b> Compiling</b></font> tempfile v3.10.1 |
| <font color="#26A269"><b> Compiling</b></font> inotify v0.9.6 |
| <font color="#26A269"><b> Compiling</b></font> uu_ls v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> indicatif v0.17.8 |
| <font color="#26A269"><b> Compiling</b></font> uu_factor v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> parking_lot v0.12.1 |
| <font color="#26A269"><b> Compiling</b></font> phf_codegen v0.11.2 |
| <font color="#26A269"><b> Compiling</b></font> signal-hook-mio v0.2.3 |
| <font color="#26A269"><b> Compiling</b></font> parse_datetime v0.5.0 |
| <font color="#26A269"><b> Compiling</b></font> crossbeam-channel v0.5.12 |
| <font color="#26A269"><b> Compiling</b></font> uu_base32 v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> quick-error v2.0.1 |
| <font color="#26A269"><b> Compiling</b></font> compare v0.1.0 |
| <font color="#26A269"><b> Compiling</b></font> minimal-lexical v0.2.1 |
| <font color="#26A269"><b> Compiling</b></font> binary-heap-plus v0.5.0 |
| <font color="#26A269"><b> Compiling</b></font> notify v6.0.1 |
| <font color="#26A269"><b> Compiling</b></font> crossterm v0.27.0 |
| <font color="#26A269"><b> Compiling</b></font> nom v7.1.3 |
| <font color="#26A269"><b> Compiling</b></font> rayon v1.10.0 |
| <font color="#26A269"><b> Compiling</b></font> coreutils v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> terminal_size v0.2.6 |
| <font color="#26A269"><b> Compiling</b></font> rust-ini v0.19.0 |
| <font color="#26A269"><b> Compiling</b></font> onig v6.4.0 |
| <font color="#26A269"><b> Compiling</b></font> bstr v1.9.1 |
| <font color="#26A269"><b> Compiling</b></font> ctrlc v3.4.4 |
| <font color="#26A269"><b> Compiling</b></font> memmap2 v0.9.4 |
| <font color="#26A269"><b> Compiling</b></font> half v2.4.0 |
| <font color="#26A269"><b> Compiling</b></font> roff v0.2.1 |
| <font color="#26A269"><b> Compiling</b></font> smawk v0.3.2 |
| <font color="#26A269"><b> Compiling</b></font> fs_extra v1.3.0 |
| <font color="#26A269"><b> Compiling</b></font> unicode-linebreak v0.1.5 |
| <font color="#26A269"><b> Compiling</b></font> fnv v1.0.7 |
| <font color="#26A269"><b> Compiling</b></font> self_cell v1.0.3 |
| <font color="#26A269"><b> Compiling</b></font> gcd v2.3.0 |
| <font color="#26A269"><b> Compiling</b></font> unicode-segmentation v1.11.0 |
| <font color="#26A269"><b> Compiling</b></font> bytecount v0.6.7 |
| <font color="#26A269"><b> Compiling</b></font> byteorder v1.5.0 |
| <font color="#26A269"><b> Compiling</b></font> uu_dd v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_wc v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_od v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_more v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_sort v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_mv v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> textwrap v0.16.1 |
| <font color="#26A269"><b> Compiling</b></font> uu_cut v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> clap_mangen v0.2.20 |
| <font color="#26A269"><b> Compiling</b></font> uu_tac v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_expr v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_env v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_seq v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_tr v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_tail v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> phf v0.11.2 |
| <font color="#26A269"><b> Compiling</b></font> uu_cp v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_pr v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_basenc v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_base64 v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_touch v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_date v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_dir v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_vdir v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_mktemp v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_sleep v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_ptx v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_csplit v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_hashsum v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_nl v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_shuf v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_shred v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_du v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_readlink v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_link v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_split v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_rmdir v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_printf v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_rm v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_yes v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_uniq v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_dirname v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_realpath v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_df v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_join v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_dircolors v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_sum v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_paste v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_tsort v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_numfmt v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_true v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_expand v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_unexpand v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_mkdir v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_false v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_cat v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_pwd v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_unlink v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_basename v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_printenv v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_tee v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_cksum v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_test v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_fold v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_ln v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_head v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_comm v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_echo v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_fmt v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> uu_truncate v0.0.25 |
| <font color="#26A269"><b> Compiling</b></font> clap_complete v4.5.1 |
| <font color="#26A269"><b> Finished</b></font> release [optimized] target(s) in 5m 36s |
| <font color="#26A269"><b> Installing</b></font> /home/tomoyan/.cargo/bin/coreutils |
| <font color="#26A269"><b> Installed</b></font> package `coreutils v0.0.25` (executable `coreutils`) |
| </pre></html></WRAP> |
| </WRAP> |
| |
| === 使い方 === |
| <WRAP color_term> |
| <WRAP color_command><html><pre> |
| <font color="#FF8700"><b>$</b></font> <font color="#26A269">coreutils</font> du <font color="#A347BA">--help</font> |
| </pre></html></WRAP> |
| <WRAP color_result_hlong><html><pre> |
| Estimate file space usage |
| |
| <u style="text-decoration-style:single"><b>Usage:</b></u> coreutils du [OPTION]... [FILE]... |
| coreutils du [OPTION]... --files0-from=F |
| |
| <u style="text-decoration-style:single"><b>Options:</b></u> |
| <b>--help</b> Print help information. |
| <b>-a</b>, <b>--all</b> write counts for all files, not just directories |
| <b>--apparent-size</b> print apparent sizes, rather than disk usage although the apparent size is |
| usually smaller, it may be larger due to holes in ('sparse') files, internal |
| fragmentation, indirect blocks, and the like |
| <b>-B</b>, <b>--block-size</b> <SIZE> scale sizes by SIZE before printing them. E.g., '-BM' prints sizes in units of |
| 1,048,576 bytes. See SIZE format below. |
| <b>-b</b>, <b>--bytes</b> equivalent to '--apparent-size --block-size=1' |
| <b>-c</b>, <b>--total</b> produce a grand total |
| <b>-d</b>, <b>--max-depth</b> <N> print the total for a directory (or file, with --all) only if it is N or fewer |
| levels below the command line argument; --max-depth=0 is the same as --summarize |
| <b>-h</b>, <b>--human-readable</b> print sizes in human readable format (e.g., 1K 234M 2G) |
| <b>--inodes</b> list inode usage information instead of block usage like --block-size=1K |
| <b>-k</b> like --block-size=1K |
| <b>-l</b>, <b>--count-links</b> count sizes many times if hard linked |
| <b>-L</b>, <b>--dereference</b> follow all symbolic links |
| <b>-D</b>, <b>--dereference-args</b> follow only symlinks that are listed on the command line [short aliases: H] |
| <b>-P</b>, <b>--no-dereference</b> don't follow any symbolic links (this is the default) |
| <b>-m</b> like --block-size=1M |
| <b>-0</b>, <b>--null</b> end each output line with 0 byte rather than newline |
| <b>-S</b>, <b>--separate-dirs</b> do not include size of subdirectories |
| <b>-s</b>, <b>--summarize</b> display only a total for each argument |
| <b>--si</b> like -h, but use powers of 1000 not 1024 |
| <b>-x</b>, <b>--one-file-system</b> skip directories on different file systems |
| <b>-t</b>, <b>--threshold</b> <SIZE> exclude entries smaller than SIZE if positive, or entries greater than SIZE if |
| negative |
| <b>-v</b>, <b>--verbose</b> verbose mode (option not present in GNU/Coreutils) |
| <b>--exclude</b> <PATTERN> exclude files that match PATTERN |
| <b>-X</b>, <b>--exclude-from</b> <FILE> exclude files that match any pattern in FILE |
| <b>--files0-from</b> <FILE> summarize device usage of the NUL-terminated file names specified in file F; if F |
| is -, then read names from standard input |
| <b>--time</b>[=<WORD>...] show time of the last modification of any file in the directory, or any of its |
| subdirectories. If WORD is given, show time as WORD instead of modification time: |
| atime, access, use, ctime, status, birth or creation [possible values: atime, |
| access, use, ctime, status, birth, creation] |
| <b>--time-style</b> <STYLE> show times using style STYLE: full-iso, long-iso, iso, +FORMAT FORMAT is |
| interpreted like 'date' |
| <b>-V</b>, <b>--version</b> Print version |
| |
| Display values are in units of the first available SIZE from --block-size, |
| and the DU_BLOCK_SIZE, BLOCK_SIZE and BLOCKSIZE environment variables. |
| Otherwise, units default to 1024 bytes (or 512 if POSIXLY_CORRECT is set). |
| |
| SIZE is an integer and optional unit (example: 10M is 10*1024*1024). |
| Units are K, M, G, T, P, E, Z, Y (powers of 1024) or KB, MB,... (powers |
| of 1000). |
| |
| PATTERN allows some advanced exclusions. For example, the following syntaxes |
| are supported: |
| ? will match only one character |
| * will match zero or more characters |
| {a,b} will match a or b |
| </pre></html></WRAP> |
| </WRAP> |
| |
| ===== 実装方法に迷ったら... ===== |
| [[https://www.oreilly.com/library/view/command-line-rust/9781098109424/|Command-Line Rust [Book]]]\\ |
| [[git>kyclark/command-line-rust|kyclark/command-line-rust: Code for Command-Line Rust (O'Reilly, 2022, ISBN 9781098109417)]]\\ |
| |
| [[https://www.oreilly.com/library/view/programming-rust/9781491927274/|Programming Rust [Book]]]\\ |
| [[git>ProgrammingRust|Programming Rust]]\\ |
| |
| [[https://www.manning.com/books/rust-in-action|Rust in Action]]\\ |
| [[git>rust-in-action/code|rust-in-action/code: Source code for the book Rust in Action]]\\ |
| |
===== トラブルシューティング ===== | ===== トラブルシューティング ===== |
| |
===== 参考文献 ===== | ===== 参考文献 ===== |
[[qita>dozo/items/378452a0c3585f0756dc|scoopで作るRustのWindows開発環境 - Qiita]]\\ | |
[[https://blog.mtb-production.info/entry/2020/11/19/021415|Rustをインストールして、Hello Worldしただけの話 - matobaの備忘録]]\\ | [[https://blog.mtb-production.info/entry/2020/11/19/021415|Rustをインストールして、Hello Worldしただけの話 - matobaの備忘録]]\\ |
[[https://zenn.dev/suauiya/books/ef2d2c67c546361e4518/viewer/4bc94a19cf74da37bf8f|インストール後にrustupを使ってすること|WindowsでRustの開発環境を構築する(not on WSL)/おまけのみ有料]]\\ | [[https://zenn.dev/suauiya/books/ef2d2c67c546361e4518/viewer/4bc94a19cf74da37bf8f|インストール後にrustupを使ってすること|WindowsでRustの開発環境を構築する(not on WSL)/おまけのみ有料]]\\ |
[[https://zenn.dev/esaka/scraps/e9baa5851f6109|Rustでreplやjupyter-notebook使う]]\\ | [[https://zenn.dev/esaka/scraps/e9baa5851f6109|Rustでreplやjupyter-notebook使う]]\\ |
[[qita>tatsuya6502/items/76b28a6786a1ddc9d479|コンパイルキャッシュでRustのビルド時間を短縮しよう - Qiita]]\\ | |
[[https://zenn.dev/kt3k/articles/d557cc874961ab|Rust プロジェクトの GitHub Actions で incremental build をするためのテクニック]]\\ | [[https://zenn.dev/kt3k/articles/d557cc874961ab|Rust プロジェクトの GitHub Actions で incremental build をするためのテクニック]]\\ |
[[qita>legokichi/items/b78de0df844e63e77a12|Rust でクロスコンパイルして Raspberry Pi Zero W で動かす - Qiita]]\\ | |
[[https://qiita.com/manontroppo1974/items/a6bcef67285c10edff77|Ubuntu上でRaspberry Pi Zero向けクロスコンパイル事始め - Qiita]]\\ | [[https://qiita.com/manontroppo1974/items/a6bcef67285c10edff77|Ubuntu上でRaspberry Pi Zero向けクロスコンパイル事始め - Qiita]]\\ |
[[https://wiki.archlinux.jp/index.php/Rust|Rust - ArchWiki]]\\ | [[https://wiki.archlinux.jp/index.php/Rust|Rust - ArchWiki]]\\ |
[[md>@adwilson0286/my-thoughts-on-programming-a-raspberry-pi-pico-with-rust-29d642898544|My Thoughts on Programming a Raspberry Pi Pico with Rust | by Alex Wilson | Medium]]\\ | [[md>@adwilson0286/my-thoughts-on-programming-a-raspberry-pi-pico-with-rust-29d642898544|My Thoughts on Programming a Raspberry Pi Pico with Rust | by Alex Wilson | Medium]]\\ |
[[dt>kgrech/6-things-you-can-do-with-the-cow-in-rust-4l55|6 things you can do with the Cow 🐄 in Rust 🦀 - DEV Community]] [[gtr>https://dev.to/kgrech/6-things-you-can-do-with-the-cow-in-rust-4l55|翻訳]]\\ | [[dt>kgrech/6-things-you-can-do-with-the-cow-in-rust-4l55|6 things you can do with the Cow 🐄 in Rust 🦀 - DEV Community]] [[gtr>https://dev.to/kgrech/6-things-you-can-do-with-the-cow-in-rust-4l55|翻訳]]\\ |
| [[https://gihyo.jp/article/2023/07/monthly-python-2307|PythonとRustの融合:PyO3/maturinを使ったPythonバインディングの作成入門 | gihyo.jp]]\\ |
| [[https://users.rust-lang.org/t/rust-official-ide/103656|Rust official IDE - community - The Rust Programming Language Forum]]\\ |
| [[https://rapidrehita.health.nz/blog/extending-django-with-rust/|Rapid Rēhita | Extending Django with Rust]]\\ |
| |
==== 付録 ==== | ==== 付録 ==== |
インストーラスクリプトの内容\\ | インストーラスクリプトの内容\\ |
<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">'=https'</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 "local" extension. 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">></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"> "$</font><font color="#E6DB74">{</font><font color="#FFFFFF">ZSH_VERSION</font><font color="#F92672">-</font><font color="#E6DB74">}</font><font color="#FFFFFF">" </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 here, please make the same changes in setup_mode.rs | <font color="#7C7865"># If RUSTUP_UPDATE_ROOT is unset or empty, default it.</font> |
usage() { | <font color="#FFFFFF">RUSTUP_UPDATE_ROOT</font><font color="#F92672">=</font><font color="#FFFFFF">"$</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">"</font> |
cat 1>&2 <<EOF | |
rustup-init 1.24.3 (c1c769109 2021-05-31) | |
The installer for rustup | |
| |
USAGE: | <font color="#7C7865"># NOTICE: If 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"><<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 <default-host></font> |
| <font color="#E6DB74"> Choose a default host triple</font> |
| <font color="#E6DB74"> --default-toolchain <default-toolchain></font> |
| <font color="#E6DB74"> Choose a default toolchain to install. Use 'none' to not install any toolchains at all</font> |
| <font color="#E6DB74"> --profile <profile></font> |
| <font color="#E6DB74"> [default: default] [possible values: minimal, default, complete]</font> |
| <font color="#E6DB74"> -c, --component <components>...</font> |
| <font color="#E6DB74"> Component name to also install</font> |
| <font color="#E6DB74"> -t, --target <targets>...</font> |
| <font color="#E6DB74"> Target name to also install</font> |
| <font color="#E6DB74"> --no-update-default-toolchain</font> |
| <font color="#E6DB74"> Don't update any existing default toolchain after install</font> |
| <font color="#E6DB74"> --no-modify-path</font> |
| <font color="#E6DB74"> Don'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">"$RETVAL"</font> |
*windows*) | <font color="#FFFFFF"> assert_nz "$_arch" "</font><font color="#E6DB74">arch</font><font color="#FFFFFF">"</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">""</font> |
| <font color="#FFFFFF"> </font><font color="#F92672">case</font><font color="#FFFFFF"> "$_arch" </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">"</font><font color="#E6DB74">.exe</font><font color="#FFFFFF">"</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">"$</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">"</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">"$</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">"</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">"$</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">"</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"> "$</font><font color="#E6DB74">{</font><font color="#FFFFFF">TERM</font><font color="#F92672">+</font><font color="#E6DB74">set}</font><font color="#FFFFFF">" </font><font color="#F92672">=</font><font color="#FFFFFF"> '</font><font color="#E6DB74">set</font><font color="#FFFFFF">' </font><font color="#66D9EF">]</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> |
case "$arg" in | <font color="#FFFFFF"> </font><font color="#F92672">case</font><font color="#FFFFFF"> "$TERM" </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_valid; then | <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\n" 1>&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"> "$@"</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">do</font> |
printf '%s\n' 'info: downloading installer' 1>&2 | <font color="#FFFFFF"> </font><font color="#F92672">case</font><font color="#FFFFFF"> "$arg" </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"> "$</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">" </font><font color="#F92672">=</font><font color="#FFFFFF"> "" </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'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 "$arg"</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"> "$sub_arg" </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'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"> "</font><font color="#E6DB74">\33[1minfo:\33[0m downloading installer\n</font><font color="#FFFFFF">" </font><font color="#BE84FF">1</font><font color="#F92672">>&</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"> '</font><font color="#E6DB74">%s\n</font><font color="#FFFFFF">' '</font><font color="#E6DB74">info: downloading installer</font><font color="#FFFFFF">' </font><font color="#BE84FF">1</font><font color="#F92672">>&</font><font color="#BE84FF">2</font> |
printf '%s\n' "Cannot execute $_file (likely because of mounting /tmp as noexec)." 1>&2 | <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>&2 | |
exit 1 | |
fi | |
| |
if [ "$need_tty" = "yes" ]; then | <font color="#FFFFFF"> ensure mkdir</font><font color="#FD971F"> -p</font><font color="#FFFFFF"> "$_dir"</font> |
# The installer is going to want to ask for confirmation by | <font color="#FFFFFF"> ensure downloader "$_url" "$_file" "$_arch"</font> |
# reading stdin. This script was piped into `sh` though and | <font color="#FFFFFF"> ensure chmod u+x "$_file"</font> |
# doesn't have stdin to pass to its children. Instead 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"> "$_file" </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's stdin. | <font color="#FFFFFF"> </font><font color="#66D9EF">printf</font><font color="#FFFFFF"> '</font><font color="#E6DB74">%s\n</font><font color="#FFFFFF">' "</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">" </font><font color="#BE84FF">1</font><font color="#F92672">>&</font><font color="#BE84FF">2</font> |
if [ ! -t 1 ]; then | <font color="#FFFFFF"> </font><font color="#66D9EF">printf</font><font color="#FFFFFF"> '</font><font color="#E6DB74">%s\n</font><font color="#FFFFFF">' "</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">" </font><font color="#BE84FF">1</font><font color="#F92672">>&</font><font color="#BE84FF">2</font> |
err "Unable to run interactively. Run 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"> "$need_tty" </font><font color="#F92672">=</font><font color="#FFFFFF"> "</font><font color="#E6DB74">yes</font><font color="#FFFFFF">" </font><font color="#66D9EF">]</font><font color="#FFFFFF"> </font><font color="#F92672">&&</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't have stdin to pass to its children. Instead we're going</font> |
| <font color="#FFFFFF"> </font><font color="#7C7865"># to explicitly connect /dev/tty to the installer'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 "</font><font color="#E6DB74">Unable to run interactively. Run with -y to accept defaults, --help for additional options</font><font color="#FFFFFF">"</font> |
| <font color="#FFFFFF"> </font><font color="#F92672">fi</font> |
| |
local _retval=$? | <font color="#FFFFFF"> ignore "$_file" "$@" </font><font color="#F92672"><</font><font color="#FFFFFF"> /dev/tty</font> |
| <font color="#FFFFFF"> </font><font color="#F92672">else</font> |
| <font color="#FFFFFF"> ignore "$_file" "$@"</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 "$_file"</font> |
} | <font color="#FFFFFF"> ignore rmdir "$_dir"</font> |
| |
check_proc() { | <font color="#FFFFFF"> </font><font color="#F92672">return</font><font color="#FFFFFF"> "$_retval"</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 "</font><font color="#E6DB74">fatal: Unable to find /proc/self/exe. Is /proc mounted? Installation cannot proceed without /proc.</font><font color="#FFFFFF">"</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 "\x7fELF", 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 amd64, or 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 sequences, so 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"> 5 /proc/self/exe )</font> |
| <font color="#FFFFFF"> </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> "$_current_exe_head" </font><font color="#F92672">=</font><font color="#FFFFFF"> "$</font><font color="#E6DB74">(</font><font color="#66D9EF">printf</font><font color="#E6DB74"> </font><font color="#FFFFFF">'</font><font color="#E6DB74">\177ELF\001</font><font color="#FFFFFF">'</font><font color="#E6DB74">)</font><font color="#FFFFFF">" </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"> "$_current_exe_head" </font><font color="#F92672">=</font><font color="#FFFFFF"> "$</font><font color="#E6DB74">(</font><font color="#66D9EF">printf</font><font color="#E6DB74"> </font><font color="#FFFFFF">'</font><font color="#E6DB74">\177ELF\002</font><font color="#FFFFFF">'</font><font color="#E6DB74">)</font><font color="#FFFFFF">" </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 "</font><font color="#E6DB74">unknown platform bitness</font><font color="#FFFFFF">"</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'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"> "$_current_exe_machine" </font><font color="#F92672">=</font><font color="#FFFFFF"> "$</font><font color="#E6DB74">(</font><font color="#66D9EF">printf</font><font color="#E6DB74"> </font><font color="#FFFFFF">'</font><font color="#E6DB74">\076</font><font color="#FFFFFF">'</font><font color="#E6DB74">)</font><font color="#FFFFFF">" </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">"$</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">"</font> |
_ostype="$(uname -s)" | <font color="#FFFFFF"> </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> "$_current_exe_endianness" </font><font color="#F92672">=</font><font color="#FFFFFF"> "$</font><font color="#E6DB74">(</font><font color="#66D9EF">printf</font><font color="#E6DB74"> </font><font color="#FFFFFF">'</font><font color="#E6DB74">\001</font><font color="#FFFFFF">'</font><font color="#E6DB74">)</font><font color="#FFFFFF">" </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"> "$</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">"</font> |
_clibtype="gnu" | <font color="#FFFFFF"> </font><font color="#F92672">elif</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> "$_current_exe_endianness" </font><font color="#F92672">=</font><font color="#FFFFFF"> "$</font><font color="#E6DB74">(</font><font color="#66D9EF">printf</font><font color="#E6DB74"> </font><font color="#FFFFFF">'</font><font color="#E6DB74">\002</font><font color="#FFFFFF">'</font><font color="#E6DB74">)</font><font color="#FFFFFF">" </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"> "$</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">"</font> |
| <font color="#FFFFFF"> </font><font color="#F92672">else</font> |
| <font color="#FFFFFF"> err "</font><font color="#E6DB74">unknown platform endianness</font><font color="#FFFFFF">"</font> |
| <font color="#FFFFFF"> </font><font color="#F92672">fi</font> |
| <font color="#FFFFFF">}</font> |
| |
if [ "$_ostype" = Linux ]; 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">"$</font><font color="#E6DB74">(</font><font color="#FFFFFF">ensure</font><font color="#E6DB74"> mktemp)</font><font color="#FFFFFF">"</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 "SunOS" in "uname -s" | <font color="#FFFFFF"> </font><font color="#7C7865"># upstream ("new world") UAPI, and 234 (-EINVAL truncated) in case of</font> |
# so use "uname -o" to 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">></font><font color="#FFFFFF"> "$_tmp" </font><font color="#F92672"><<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 "$_tmp"</font> |
# machine hardware name; e.g., "i86pc" on 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"> "$_tmp" </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 "$_tmp"</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 "$_ostype" in | <font color="#FFFFFF"> "$_tmp"</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 "$_tmp"</font> |
_ostype=linux-android | <font color="#FFFFFF"> </font><font color="#F92672">return</font><font color="#FFFFFF"> "$_retval"</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">>&</font><font color="#BE84FF">2</font> |
| <font color="#FFFFFF"> </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> '</font><font color="#E6DB74">Your Linux kernel does not provide the ABI required by this Rust</font><font color="#FFFFFF">' </font><font color="#F92672">>&</font><font color="#BE84FF">2</font> |
| <font color="#FFFFFF"> </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> '</font><font color="#E6DB74">distribution. Please check with your OS provider for how to obtain a</font><font color="#FFFFFF">' </font><font color="#F92672">>&</font><font color="#BE84FF">2</font> |
| <font color="#FFFFFF"> </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> '</font><font color="#E6DB74">compatible Rust package for your system.</font><font color="#FFFFFF">' </font><font color="#F92672">>&</font><font color="#BE84FF">2</font> |
| <font color="#FFFFFF"> </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> </font><font color="#F92672">>&</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"> "</font><font color="#E6DB74">Warning: Cannot determine current system's ABI flavor, continuing anyway.</font><font color="#FFFFFF">" </font><font color="#F92672">>&</font><font color="#BE84FF">2</font> |
| <font color="#FFFFFF"> </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> </font><font color="#F92672">>&</font><font color="#BE84FF">2</font> |
| <font color="#FFFFFF"> </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> '</font><font color="#E6DB74">Note that the official Rust distribution only works with the upstream</font><font color="#FFFFFF">' </font><font color="#F92672">>&</font><font color="#BE84FF">2</font> |
| <font color="#FFFFFF"> </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> '</font><font color="#E6DB74">kernel ABI. Installation will fail if your running kernel happens to be</font><font color="#FFFFFF">' </font><font color="#F92672">>&</font><font color="#BE84FF">2</font> |
| <font color="#FFFFFF"> </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> '</font><font color="#E6DB74">incompatible.</font><font color="#FFFFFF">' </font><font color="#F92672">>&</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">"$</font><font color="#E6DB74">(</font><font color="#FFFFFF">uname</font><font color="#FD971F"> -s</font><font color="#E6DB74">)</font><font color="#FFFFFF">"</font> |
| <font color="#FFFFFF"> _cputype</font><font color="#F92672">=</font><font color="#FFFFFF">"$</font><font color="#E6DB74">(</font><font color="#FFFFFF">uname</font><font color="#FD971F"> -m</font><font color="#E6DB74">)</font><font color="#FFFFFF">"</font> |
| <font color="#FFFFFF"> _clibtype</font><font color="#F92672">=</font><font color="#FFFFFF">"</font><font color="#E6DB74">gnu</font><font color="#FFFFFF">"</font> |
| |
NetBSD) | <font color="#FFFFFF"> </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> "$_ostype" </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"> "$</font><font color="#E6DB74">(</font><font color="#FFFFFF">uname</font><font color="#FD971F"> -o</font><font color="#E6DB74">)</font><font color="#FFFFFF">" </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">>&</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"> '</font><font color="#E6DB74">musl</font><font color="#FFFFFF">'</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">"</font><font color="#E6DB74">musl</font><font color="#FFFFFF">"</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"> "$_ostype" </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's hard to ensure, so instead we use</font> |
| <font color="#FFFFFF"> </font><font color="#7C7865"># `sysctl` (which doesn't lie) to 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"> "$_cputype" </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 (<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: <https://support.apple.com/en-us/HT208436></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">></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"> '</font><font color="#E6DB74">: 1</font><font color="#FFFFFF">'</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"> "$_cputype" </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 (>=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">></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"> '</font><font color="#E6DB74">: 1</font><font color="#FFFFFF">'</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"> "$_ostype" </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 "SunOS" in "uname -s"</font> |
;; | <font color="#FFFFFF"> </font><font color="#7C7865"># so use "uname -o" 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"> "$</font><font color="#E6DB74">(</font><font color="#FFFFFF">/usr/bin/uname</font><font color="#FD971F"> -o</font><font color="#E6DB74">)</font><font color="#FFFFFF">" </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 "uname -m" reports the</font> |
err "unrecognized OS type: $_ostype" | <font color="#FFFFFF"> </font><font color="#7C7865"># machine hardware name; e.g., "i86pc" on both 32- and 64-bit x86</font> |
;; | <font color="#FFFFFF"> </font><font color="#7C7865"># systems. Check for the native (widest) instruction 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"> "$_cputype" </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">"$</font><font color="#E6DB74">(</font><font color="#FFFFFF">isainfo</font><font color="#FD971F"> -n</font><font color="#E6DB74">)</font><font color="#FFFFFF">"</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"> "$_ostype" </font><font color="#F92672">in</font> |
| |
case "$_cputype" in | <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 "</font><font color="#E6DB74">unrecognized OS type: </font><font color="#FFFFFF">$_ostype"</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"> "$_cputype" </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"> "$_ostype" </font><font color="#F92672">=</font><font color="#FFFFFF"> "</font><font color="#E6DB74">linux-android</font><font color="#FFFFFF">" </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"> "$_ostype" </font><font color="#F92672">=</font><font color="#FFFFFF"> "</font><font color="#E6DB74">linux-android</font><font color="#FFFFFF">" </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">"$</font><font color="#E6DB74">{</font><font color="#FFFFFF">_ostype</font><font color="#E6DB74">}eabihf</font><font color="#FFFFFF">"</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"> "$_ostype" </font><font color="#F92672">=</font><font color="#FFFFFF"> "</font><font color="#E6DB74">linux-android</font><font color="#FFFFFF">" </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">"$</font><font color="#E6DB74">{</font><font color="#FFFFFF">_ostype</font><font color="#E6DB74">}eabihf</font><font color="#FFFFFF">"</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 install" 1>&2 | |
echo "multiarch compatibility with i686 and/or amd64, then select one" 1>&2 | |
echo "by re-running this script with the RUSTUP_CPUTYPE environment variable" 1>&2 | |
echo "set to i686 or x86_64, respectively." 1>&2 | |
echo 1>&2 | |
echo "You will be able to add an x32 target after installation by running" 1>&2 | |
echo " rustup target add x86_64-unknown-linux-gnux32" 1>&2 | |
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">''</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"> "$_bitness" </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">"$</font><font color="#E6DB74">{</font><font color="#FFFFFF">_ostype</font><font color="#E6DB74">}abi64</font><font color="#FFFFFF">"</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">''</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 "</font><font color="#E6DB74">unknown CPU type: </font><font color="#FFFFFF">$_cputype"</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. Usually, because it's being executed | <font color="#FFFFFF"> </font><font color="#F92672">if</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> "$</font><font color="#E6DB74">{</font><font color="#FFFFFF">_ostype</font><font color="#E6DB74">}</font><font color="#FFFFFF">" </font><font color="#F92672">=</font><font color="#FFFFFF"> unknown-linux-gnu </font><font color="#66D9EF">]</font><font color="#FFFFFF"> </font><font color="#F92672">&&</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> "$</font><font color="#E6DB74">{</font><font color="#FFFFFF">_bitness</font><font color="#E6DB74">}</font><font color="#FFFFFF">" </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"> "$</font><font color="#E6DB74">{</font><font color="#FFFFFF">RUSTUP_CPUTYPE</font><font color="#F92672">:-</font><font color="#E6DB74">}</font><font color="#FFFFFF">" </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">"$RUSTUP_CPUTYPE"</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"> "</font><font color="#E6DB74">This host is running an x32 userland; as it stands, x32 support is poor,</font><font color="#FFFFFF">" </font><font color="#BE84FF">1</font><font color="#F92672">>&</font><font color="#BE84FF">2</font> |
| <font color="#FFFFFF"> </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> "</font><font color="#E6DB74">and there isn't a native toolchain -- you will have to install</font><font color="#FFFFFF">" </font><font color="#BE84FF">1</font><font color="#F92672">>&</font><font color="#BE84FF">2</font> |
| <font color="#FFFFFF"> </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> "</font><font color="#E6DB74">multiarch compatibility with i686 and/or amd64, then select one</font><font color="#FFFFFF">" </font><font color="#BE84FF">1</font><font color="#F92672">>&</font><font color="#BE84FF">2</font> |
| <font color="#FFFFFF"> </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> "</font><font color="#E6DB74">by re-running this script with the RUSTUP_CPUTYPE environment variable</font><font color="#FFFFFF">" </font><font color="#BE84FF">1</font><font color="#F92672">>&</font><font color="#BE84FF">2</font> |
| <font color="#FFFFFF"> </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> "</font><font color="#E6DB74">set to i686 or x86_64, respectively.</font><font color="#FFFFFF">" </font><font color="#BE84FF">1</font><font color="#F92672">>&</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">>&</font><font color="#BE84FF">2</font> |
| <font color="#FFFFFF"> </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> "</font><font color="#E6DB74">You will be able to add an x32 target after installation by running</font><font color="#FFFFFF">" </font><font color="#BE84FF">1</font><font color="#F92672">>&</font><font color="#BE84FF">2</font> |
| <font color="#FFFFFF"> </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> "</font><font color="#E6DB74"> rustup target add x86_64-unknown-linux-gnux32</font><font color="#FFFFFF">" </font><font color="#BE84FF">1</font><font color="#F92672">>&</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">''</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"> "$_ostype" </font><font color="#F92672">=</font><font color="#FFFFFF"> "</font><font color="#E6DB74">linux-android</font><font color="#FFFFFF">" </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">"$</font><font color="#E6DB74">{</font><font color="#FFFFFF">_ostype</font><font color="#E6DB74">}eabihf</font><font color="#FFFFFF">"</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 "</font><font color="#E6DB74">riscv64 with 32-bit userland unsupported</font><font color="#FFFFFF">"</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"> "$_ostype" </font><font color="#F92672">=</font><font color="#FFFFFF"> "</font><font color="#E6DB74">unknown-linux-gnueabihf</font><font color="#FFFFFF">" </font><font color="#66D9EF">]</font><font color="#FFFFFF"> </font><font color="#F92672">&&</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> "$_cputype" </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 '</font><font color="#E6DB74">^Features</font><font color="#FFFFFF">' /proc/cpuinfo </font><font color="#F92672">|</font><font color="#FFFFFF"> grep</font><font color="#FD971F"> -E -q -v</font><font color="#FFFFFF"> '</font><font color="#E6DB74">neon|simd</font><font color="#FFFFFF">'</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">"$</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">"</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 "$2" 2>&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.2; then | |
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" >&2 | |
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">"$_arch"</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"> '</font><font color="#E6DB74">rustup: %s\n</font><font color="#FFFFFF">' "$1"</font> |
_category="all" | <font color="#FFFFFF">}</font> |
else | |
_category="" | |
fi | |
| |
case "$_arch" in | <font color="#A6E22E">err</font><font color="#FFFFFF">() {</font> |
| <font color="#FFFFFF"> say "$1" </font><font color="#F92672">>&</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 "$1"</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> |
case $(sw_vers -productVersion) in | <font color="#FFFFFF"> err "</font><font color="#E6DB74">need '</font><font color="#FFFFFF">$1</font><font color="#E6DB74">' (command not found)</font><font color="#FFFFFF">"</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"> "$1" </font><font color="#F92672">></font><font color="#FFFFFF"> /dev/null </font><font color="#BE84FF">2</font><font color="#F92672">>&</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"> "$1" </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="#E6DB74">assert_nz </font><font color="#FFFFFF">$2"</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"> "$@"</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font><font color="#FFFFFF"> err "</font><font color="#E6DB74">command failed: </font><font color="#FFFFFF">$*"</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' results are being</font> |
# if support by local tools is detected. Detection currently supports these curl backends: | <font color="#7C7865"># intentionally ignored. Usually, because it'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"> "$@"</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">&&</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> |
# "unspecified" is 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">'</font><font color="#E6DB74">curl or wget</font><font color="#FFFFFF">' </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"> "$1" </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 "$_dld"</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"> "$_dld" </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">"$RETVAL"</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">"$RETVAL"</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"> "$_ciphersuites" </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">'</font><font color="#E6DB74">=https</font><font color="#FFFFFF">'</font><font color="#FD971F"> --tlsv1</font><font color="#E6DB74">.2</font><font color="#FD971F"> --ciphers</font><font color="#E6DB74"> </font><font color="#FFFFFF">"$_ciphersuites"</font><font color="#FD971F"> --silent --show-error --fail --location</font><font color="#E6DB74"> </font><font color="#FFFFFF">"$1"</font><font color="#FD971F"> --output</font><font color="#E6DB74"> </font><font color="#FFFFFF">"$2"</font><font color="#E6DB74"> </font><font color="#BE84FF">2</font><font color="#F92672">>&</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"> "</font><font color="#E6DB74">Warning: Not enforcing strong cipher suites for TLS, this is potentially less secure</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"> check_help_for "$3" 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"> "</font><font color="#E6DB74">Warning: Not enforcing TLS v1.2, this is potentially less secure</font><font color="#FFFFFF">"</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">"$1"</font><font color="#FD971F"> --output</font><font color="#E6DB74"> </font><font color="#FFFFFF">"$2"</font><font color="#E6DB74"> </font><font color="#BE84FF">2</font><font color="#F92672">>&</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">'</font><font color="#E6DB74">=https</font><font color="#FFFFFF">'</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">"$1"</font><font color="#FD971F"> --output</font><font color="#E6DB74"> </font><font color="#FFFFFF">"$2"</font><font color="#E6DB74"> </font><font color="#BE84FF">2</font><font color="#F92672">>&</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"> "$_err" </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"> "$_err" </font><font color="#F92672">>&</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"> "$_err" </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 "</font><font color="#E6DB74">installer for platform '</font><font color="#FFFFFF">$3</font><font color="#E6DB74">' not found, this may be unsupported</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">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"> "$_dld" </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"> "$</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">>&</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">"</font><font color="#E6DB74"> </font><font color="#FFFFFF">"</font><font color="#E6DB74">)</font><font color="#FFFFFF">" </font><font color="#F92672">=</font><font color="#FFFFFF"> "</font><font color="#E6DB74">BusyBox</font><font color="#FFFFFF">" </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"> "</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">"</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">"$1"</font><font color="#FD971F"> -O</font><font color="#E6DB74"> </font><font color="#FFFFFF">"$2"</font><font color="#E6DB74"> </font><font color="#BE84FF">2</font><font color="#F92672">>&</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">"$RETVAL"</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"> "$_ciphersuites" </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">"$_ciphersuites"</font><font color="#E6DB74"> </font><font color="#FFFFFF">"$1"</font><font color="#FD971F"> -O</font><font color="#E6DB74"> </font><font color="#FFFFFF">"$2"</font><font color="#E6DB74"> </font><font color="#BE84FF">2</font><font color="#F92672">>&</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"> "</font><font color="#E6DB74">Warning: Not enforcing strong cipher suites for TLS, this is potentially less secure</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"> check_help_for "$3" 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"> "</font><font color="#E6DB74">Warning: Not enforcing TLS v1.2, this is potentially less secure</font><font color="#FFFFFF">"</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">"$1"</font><font color="#FD971F"> -O</font><font color="#E6DB74"> </font><font color="#FFFFFF">"$2"</font><font color="#E6DB74"> </font><font color="#BE84FF">2</font><font color="#F92672">>&</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">"$1"</font><font color="#FD971F"> -O</font><font color="#E6DB74"> </font><font color="#FFFFFF">"$2"</font><font color="#E6DB74"> </font><font color="#BE84FF">2</font><font color="#F92672">>&</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"> "$_err" </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"> "$_err" </font><font color="#F92672">>&</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"> "$_err" </font><font color="#F92672">|</font><font color="#FFFFFF"> grep</font><font color="#FD971F"> -q</font><font color="#FFFFFF"> '</font><font color="#E6DB74"> 404 Not Found$</font><font color="#FFFFFF">'</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> |
| <font color="#FFFFFF"> err "</font><font color="#E6DB74">installer for platform '</font><font color="#FFFFFF">$3</font><font color="#E6DB74">' not found, this may be unsupported</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">return</font><font color="#FFFFFF"> $_status</font> |
| <font color="#FFFFFF"> </font><font color="#F92672">else</font> |
| <font color="#FFFFFF"> err "</font><font color="#E6DB74">Unknown downloader</font><font color="#FFFFFF">" </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">"$1"</font> |
| <font color="#FFFFFF"> </font><font color="#66D9EF">shift</font> |
| <font color="#FFFFFF"> _cmd</font><font color="#F92672">=</font><font color="#FFFFFF">"$1"</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"> "$_cmd"</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"> '</font><font color="#E6DB74">For all options use the manual or "--help all".</font><font color="#FFFFFF">'</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">"</font><font color="#E6DB74">all</font><font color="#FFFFFF">"</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">""</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"> "$_arch" </font><font color="#F92672">in</font> |
if wget -V | grep -q '\-DHAVE_LIBSSL'; 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 "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'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"> "$</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">" </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"> "</font><font color="#E6DB74">Warning: Detected macOS platform older than 10.13</font><font color="#FFFFFF">"</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"> "</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">"</font> |
| <font color="#FFFFFF"> </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> "</font><font color="#E6DB74">Warning TLS capabilities detection may fail</font><font color="#FFFFFF">"</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"> "$@"</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"> "$_cmd"</font><font color="#FD971F"> --help</font><font color="#FFFFFF"> "$_category" </font><font color="#F92672">|</font><font color="#FFFFFF"> grep</font><font color="#FD971F"> -q</font><font color="#F92672"> --</font><font color="#FFFFFF"> "$_arg"</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">""</font> |
| <font color="#FFFFFF"> </font><font color="#7C7865"># "unspecified" 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 "</font><font color="#E6DB74">notspecified</font><font color="#FFFFFF">" "</font><font color="#E6DB74">curl</font><font color="#FFFFFF">" "</font><font color="#E6DB74">--retry</font><font color="#FFFFFF">"</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">"</font><font color="#E6DB74">--retry 3</font><font color="#FFFFFF">"</font> |
| <font color="#FFFFFF"> </font><font color="#F92672">if</font><font color="#FFFFFF"> check_help_for "</font><font color="#E6DB74">notspecified</font><font color="#FFFFFF">" "</font><font color="#E6DB74">curl</font><font color="#FFFFFF">" "</font><font color="#E6DB74">--continue-at</font><font color="#FFFFFF">"</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> |
| <font color="#FFFFFF"> </font><font color="#7C7865"># "-C -" 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">"</font><font color="#E6DB74">--retry 3 -C -</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"> RETVAL</font><font color="#F92672">=</font><font color="#FFFFFF">"$_retry_supported"</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"> "$</font><font color="#E6DB74">{</font><font color="#FFFFFF">RUSTUP_TLS_CIPHERSUITES</font><font color="#F92672">-</font><font color="#E6DB74">}</font><font color="#FFFFFF">" </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're doing</font> |
| <font color="#FFFFFF"> RETVAL</font><font color="#F92672">=</font><font color="#FFFFFF">"$RUSTUP_TLS_CIPHERSUITES"</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">"</font><font color="#E6DB74">no</font><font color="#FFFFFF">"</font> |
| <font color="#FFFFFF"> </font><font color="#F92672">local</font><font color="#FFFFFF"> _gnutls_syntax</font><font color="#F92672">=</font><font color="#FFFFFF">"</font><font color="#E6DB74">no</font><font color="#FFFFFF">"</font> |
| <font color="#FFFFFF"> </font><font color="#F92672">local</font><font color="#FFFFFF"> _backend_supported</font><font color="#F92672">=</font><font color="#FFFFFF">"</font><font color="#E6DB74">yes</font><font color="#FFFFFF">"</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"> '</font><font color="#E6DB74"> OpenSSL/</font><font color="#FFFFFF">'</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">"</font><font color="#E6DB74">yes</font><font color="#FFFFFF">"</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"> '</font><font color="#E6DB74"> LibreSSL/</font><font color="#FFFFFF">'</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">"</font><font color="#E6DB74">yes</font><font color="#FFFFFF">"</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"> '</font><font color="#E6DB74"> BoringSSL/</font><font color="#FFFFFF">'</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">"</font><font color="#E6DB74">yes</font><font color="#FFFFFF">"</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"> '</font><font color="#E6DB74"> GnuTLS/</font><font color="#FFFFFF">'</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">"</font><font color="#E6DB74">yes</font><font color="#FFFFFF">"</font> |
| <font color="#FFFFFF"> </font><font color="#F92672">else</font> |
| <font color="#FFFFFF"> _backend_supported</font><font color="#F92672">=</font><font color="#FFFFFF">"</font><font color="#E6DB74">no</font><font color="#FFFFFF">"</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">"</font><font color="#E6DB74">no</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"> "$_backend_supported" </font><font color="#F92672">=</font><font color="#FFFFFF"> "</font><font color="#E6DB74">yes</font><font color="#FFFFFF">" </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"># "unspecified" 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 "</font><font color="#E6DB74">notspecified</font><font color="#FFFFFF">" "</font><font color="#E6DB74">curl</font><font color="#FFFFFF">" "</font><font color="#E6DB74">--tlsv1.2</font><font color="#FFFFFF">" "</font><font color="#E6DB74">--ciphers</font><font color="#FFFFFF">" "</font><font color="#E6DB74">--proto</font><font color="#FFFFFF">"</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">"</font><font color="#E6DB74">yes</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">local</font><font color="#FFFFFF"> _cs</font><font color="#F92672">=</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"> "$_args_supported" </font><font color="#F92672">=</font><font color="#FFFFFF"> "</font><font color="#E6DB74">yes</font><font color="#FFFFFF">" </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"> "$_openssl_syntax" </font><font color="#F92672">=</font><font color="#FFFFFF"> "</font><font color="#E6DB74">yes</font><font color="#FFFFFF">" </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">"</font><font color="#E6DB74">openssl</font><font color="#FFFFFF">"</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"> "$_gnutls_syntax" </font><font color="#F92672">=</font><font color="#FFFFFF"> "</font><font color="#E6DB74">yes</font><font color="#FFFFFF">" </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">"</font><font color="#E6DB74">gnutls</font><font color="#FFFFFF">"</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">"$_cs"</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"> "$</font><font color="#E6DB74">{</font><font color="#FFFFFF">RUSTUP_TLS_CIPHERSUITES</font><font color="#F92672">-</font><font color="#E6DB74">}</font><font color="#FFFFFF">" </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're doing</font> |
| <font color="#FFFFFF"> RETVAL</font><font color="#F92672">=</font><font color="#FFFFFF">"$RUSTUP_TLS_CIPHERSUITES"</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">""</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"> '</font><font color="#E6DB74">\-DHAVE_LIBSSL</font><font color="#FFFFFF">'</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> |
| <font color="#FFFFFF"> </font><font color="#7C7865"># "unspecified" 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 "</font><font color="#E6DB74">notspecified</font><font color="#FFFFFF">" "</font><font color="#E6DB74">wget</font><font color="#FFFFFF">" "</font><font color="#E6DB74">TLSv1_2</font><font color="#FFFFFF">" "</font><font color="#E6DB74">--ciphers</font><font color="#FFFFFF">" "</font><font color="#E6DB74">--https-only</font><font color="#FFFFFF">" "</font><font color="#E6DB74">--secure-protocol</font><font color="#FFFFFF">"</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">"</font><font color="#E6DB74">openssl</font><font color="#FFFFFF">"</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"> '</font><font color="#E6DB74">\-DHAVE_LIBGNUTLS</font><font color="#FFFFFF">'</font><font color="#F92672">;</font><font color="#FFFFFF"> </font><font color="#F92672">then</font> |
| <font color="#FFFFFF"> </font><font color="#7C7865"># "unspecified" 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 "</font><font color="#E6DB74">notspecified</font><font color="#FFFFFF">" "</font><font color="#E6DB74">wget</font><font color="#FFFFFF">" "</font><font color="#E6DB74">TLSv1_2</font><font color="#FFFFFF">" "</font><font color="#E6DB74">--ciphers</font><font color="#FFFFFF">" "</font><font color="#E6DB74">--https-only</font><font color="#FFFFFF">" "</font><font color="#E6DB74">--secure-protocol</font><font color="#FFFFFF">"</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">"</font><font color="#E6DB74">gnutls</font><font color="#FFFFFF">"</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">"$_cs"</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"> "$1" </font><font color="#F92672">=</font><font color="#FFFFFF"> "</font><font color="#E6DB74">openssl</font><font color="#FFFFFF">" </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't support it yet.</font> |
| <font color="#FFFFFF"> </font><font color="#66D9EF">echo</font><font color="#FFFFFF"> "</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">"</font> |
| <font color="#FFFFFF"> </font><font color="#F92672">elif</font><font color="#FFFFFF"> </font><font color="#66D9EF">[</font><font color="#FFFFFF"> "$1" </font><font color="#F92672">=</font><font color="#FFFFFF"> "</font><font color="#E6DB74">gnutls</font><font color="#FFFFFF">" </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't forgiving of unknown values, so this may require a GnuTLS version that supports TLS 1.3 even if wget doesn'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"> "</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">"</font> |
| <font color="#FFFFFF"> </font><font color="#F92672">fi</font> |
| <font color="#FFFFFF">}</font> |
| |
| <font color="#FFFFFF">main "$@" </font><font color="#F92672">||</font><font color="#FFFFFF"> </font><font color="#66D9EF">exit</font><font color="#FFFFFF"> 1</font> |
| </pre></html></WRAP> |
| |