両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン次のリビジョン両方とも次のリビジョン |
rust [2023/12/02 07:24] – [ディレクトリ ツールチェーンのオーバーライド] ともやん | rust [2024/05/20 16:15] – [ORM - Object Relational Mapper] ともやん |
---|
<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> |
</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="#FF8700"><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> |
</pre></html></WRAP> | |
<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="#FF8700"><b>$</b></font> <font color="#26A269">rustup</font> <font color="#A347BA">-V</font> |
</pre></html></WRAP> | </pre></html></WRAP> |
<WRAP color_result><html><pre> | <WRAP color_result><html><pre> |
rustup 1.25.1 (bb60b1e89 2022-07-12) | rustup 1.27.1 (54dd3d00f 2024-04-24) |
<b class=BOLD>info:</b> This is the version for the rustup toolchain manager, not the rustc compiler. | <b>info: </b>This is the version for the rustup toolchain manager, not the rustc compiler. |
<b class=BOLD>info:</b> The currently active `rustc` version is `rustc 1.61.0 (fe5b13d68 2022-05-18)` | <b>info: </b>The currently active `rustc` version is `rustc 1.77.2 (25ef9e3d8 2024-04-09)` |
</pre></html></WRAP> | </pre></html></WRAP> |
</WRAP> | </WRAP> |
<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="#FF8700"><b>$</b></font> <font color="#26A269">rustup</font> update |
</pre></html></WRAP> | </pre></html></WRAP> |
<WRAP color_result_long><html><pre> | <WRAP color_result_hlong><html><pre> |
<b class=BOLD>info:</b> syncing channel updates for 'stable-x86_64-unknown-linux-gnu' | <b>info: </b>syncing channel updates for 'stable-x86_64-unknown-linux-gnu' |
<b class=BOLD>info:</b> latest update on 2022-11-03, rust version 1.65.0 (897e37553 2022-11-02) | 730.9 KiB / 730.9 KiB (100 %) 463.2 KiB/s in 1s ETA: 0s |
<b class=BOLD>info:</b> downloading component 'rust-src' | <b>info: </b>latest update on 2024-05-02, rust version 1.78.0 (9b00956e5 2024-04-29) |
<b class=BOLD>info:</b> downloading component 'cargo' | <b>info: </b>downloading component 'rust-src' |
6.5 MiB / 6.5 MiB (100 %) 5.0 MiB/s in 1s ETA: 0s | 2.5 MiB / 2.5 MiB (100 %) 732.1 KiB/s in 4s ETA: 0s |
<b class=BOLD>info:</b> downloading component 'clippy' | <b>info: </b>downloading component 'cargo' |
2.9 MiB / 2.9 MiB (100 %) 2.7 MiB/s in 1s ETA: 0s | 8.0 MiB / 8.0 MiB (100 %) 662.4 KiB/s in 13s ETA: 0s |
<b class=BOLD>info:</b> downloading component 'rust-docs' | <b>info: </b>downloading component 'clippy' |
18.8 MiB / 18.8 MiB (100 %) 3.2 MiB/s in 6s ETA: 0s | 2.3 MiB / 2.3 MiB (100 %) 627.0 KiB/s in 3s ETA: 0s |
<b class=BOLD>info:</b> downloading component 'rust-std' | <b>info: </b>downloading component 'rust-docs' |
30.0 MiB / 30.0 MiB (100 %) 582.4 KiB/s in 16s ETA: 0s | 15.1 MiB / 15.1 MiB (100 %) 483.2 KiB/s in 25s ETA: 0s |
<b class=BOLD>info:</b> downloading component 'rustc' | <b>info: </b>downloading component 'rust-std' |
56.2 MiB / 56.2 MiB (100 %) 1.2 MiB/s in 53s ETA: 0s | 24.3 MiB / 24.3 MiB (100 %) 522.4 KiB/s in 42s ETA: 0s |
<b class=BOLD>info:</b> downloading component 'rustfmt' | <b>info: </b>downloading component 'rustc' |
4.3 MiB / 4.3 MiB (100 %) 1.3 MiB/s in 3s ETA: 0s | 63.7 MiB / 63.7 MiB (100 %) 256.0 KiB/s in 2m 37s ETA: 0s |
<b class=BOLD>info:</b> removing previous version of component 'rust-src' | <b>info: </b>downloading component 'rustfmt' |
<b class=BOLD>info:</b> removing previous version of component 'cargo' | 2.3 MiB / 2.3 MiB (100 %) 411.8 KiB/s in 6s ETA: 0s |
<b class=BOLD>info:</b> removing previous version of component 'clippy' | <b>info: </b>removing previous version of component 'rust-src' |
<b class=BOLD>info:</b> removing previous version of component 'rust-docs' | <b>info: </b>removing previous version of component 'cargo' |
<b class=BOLD>info:</b> removing previous version of component 'rust-std' | <b>info: </b>removing previous version of component 'clippy' |
<b class=BOLD>info:</b> removing previous version of component 'rustc' | <b>info: </b>removing previous version of component 'rust-docs' |
<b class=BOLD>info:</b> removing previous version of component 'rustfmt' | <b>info: </b>removing previous version of component 'rust-std' |
<b class=BOLD>info:</b> installing component 'rust-src' | <b>info: </b>removing previous version of component 'rustc' |
<b class=BOLD>info:</b> installing component 'cargo' | <b>info: </b>removing previous version of component 'rustfmt' |
<b class=BOLD>info:</b> installing component 'clippy' | <b>info: </b>installing component 'rust-src' |
<b class=BOLD>info:</b> installing component 'rust-docs' | <b>info: </b>installing component 'cargo' |
18.8 MiB / 18.8 MiB (100 %) 4.1 MiB/s in 4s ETA: 0s | <b>info: </b>installing component 'clippy' |
<b class=BOLD>info:</b> installing component 'rust-std' | <b>info: </b>installing component 'rust-docs' |
30.0 MiB / 30.0 MiB (100 %) 5.5 MiB/s in 5s ETA: 0s | 15.1 MiB / 15.1 MiB (100 %) 4.4 MiB/s in 3s ETA: 0s |
<b class=BOLD>info:</b> installing component 'rustc' | <b>info: </b>installing component 'rust-std' |
56.2 MiB / 56.2 MiB (100 %) 7.8 MiB/s in 11s ETA: 0s | 24.3 MiB / 24.3 MiB (100 %) 6.7 MiB/s in 3s ETA: 0s |
<b class=BOLD>info:</b> installing component 'rustfmt' | <b>info: </b>installing component 'rustc' |
<b class=BOLD>info:</b> checking for self-updates | 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 |
| |
<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="#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 class=BOLD>info:</b> cleaning up downloads & tmp directories | <b>info: </b>cleaning up downloads & tmp directories |
</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> |
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 ===== | ===== レシピ ===== |
| |
| ==== 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> |
| |
| Rust / Wasm クライアント Web アプリ フレームワーク\\ |
| [[https://yew.rs/|Yew]]\\ |
| |
| 非同期ランタイム\\ |
| [[https://tokio.rs/|Tokio - An asynchronous Rust runtime]]\\ |
| Rust 用の WebAssembly (WASM) Web アプリケーション バンドラー\\ |
| [[https://trunkrs.dev/|Trunk | Build, bundle & ship your Rust WASM application to the web]]\\ |
| |
| Rust 用のエレガントな GUI ライブラリ\\ |
| [[https://dioxuslabs.com/|Dioxus | An elegant GUI library for Rust]]\\ |
| |
| ==== ORM - Object Relational Mapper ==== |
| 参考: [[https://www.shuttle.rs/blog/2024/01/16/best-orm-rust|A Guide to Rust ORMs in 2024]] [[gtr>https://www.shuttle.rs/blog/2024/01/16/best-orm-rust|翻訳]]\\ |
| |
| === SeaORM === |
| 公式: [[https://www.sea-ql.org/SeaORM/|SeaORM 🐚 An async & dynamic ORM for Rust]]\\ |
| ソースコード: [[git>SeaQL/sea-orm|SeaQL/sea-orm: 🐚 An async & dynamic ORM for Rust]]\\ |
| |
| === Diesel === |
| 公式: [[https://diesel.rs/|Diesel is a Safe, Extensible ORM and Query Builder for Rust]]\\ |
| ソースコード: [[git>diesel-rs/diesel|diesel-rs/diesel: A safe, extensible ORM and Query Builder for Rust]]\\ |
| |
| [[.rust:diesel|Diesel]]\\ |
| |
| ==== Web ベースの Rust シミュレーター ==== |
[[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> |
| |
===== トラブルシューティング ===== | ===== トラブルシューティング ===== |
| |
===== 参考文献 ===== | ===== 参考文献 ===== |
[[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]]\\ |
| |
==== 付録 ==== | ==== 付録 ==== |
インストーラスクリプトの内容\\ | インストーラスクリプトの内容\\ |
<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> |
| |