Files
Leo Timmins da7169ed1a Fix egui-winit compilation on wasm32 (#8516)
Disclosure - AI written PR with GPT 6
I was unable to compile for wasm on my project because I use egui-winnit
instead of eframe

See AI explanation below:

## Summary

* Fixes #8436

`egui-winit` unconditionally compiled `NativeFile`, which implements
`DroppedFile::bytes()`. On wasm32, the trait requires `bytes_async()`
instead, causing compilation to fail.

This change gates the native file implementation and its usage to native
targets. An explicit wasm fallback ignores dropped-file events, which
winit’s web backend does not emit.

Adds a direct wasm compilation check to CI and the local check script,
since eframe’s wasm builds do not compile egui-winit.

## Validation

- wasm32 compilation with default features disabled passes.
- Native Linux/X11 compilation passes.
- Formatting and shell syntax checks pass.
- Strict wasm Clippy encounters six existing, unrelated warnings in
clipboard.rs.
2026-09-07 10:57:16 +02:00

97 lines
3.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# This scripts runs various CI-like checks in a convenient way.
set -eu
script_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )
cd "$script_path/.."
set -x
# Checks all tests, lints etc.
# Basically does what the CI does.
# cargo +1.95.0 install --quiet typos-cli
export RUSTFLAGS="-D warnings"
export RUSTDOCFLAGS="-D warnings" # https://github.com/emilk/egui/pull/1454
# Fast checks first:
typos
./scripts/lint.py
cargo fmt --all -- --check
cargo doc --quiet --lib --no-deps --all-features
cargo doc --quiet --document-private-items --no-deps --all-features
cargo clippy --quiet --all-targets --all-features -- -D warnings
cargo clippy --quiet --all-targets --all-features --release -- -D warnings # we need to check release mode too
./scripts/clippy_wasm.sh
cargo check --quiet --all-targets
cargo check --quiet --all-targets --all-features
cargo check --quiet -p egui_demo_app --lib --target wasm32-unknown-unknown
cargo check --quiet -p egui_demo_app --lib --target wasm32-unknown-unknown --all-features
cargo check --quiet -p egui-winit --no-default-features --target wasm32-unknown-unknown --locked
cargo test --quiet --all-targets --all-features --no-fail-fast # `--no-fail-fast` so that all failing snapshots are reported at once
cargo test --quiet --doc # slow - checks all doc-tests
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
cargo check --quiet -p eframe --no-default-features --features "glow","x11"
cargo check --quiet -p eframe --no-default-features --features "glow","wayland"
cargo check --quiet -p eframe --no-default-features --features "wgpu","x11"
cargo check --quiet -p eframe --no-default-features --features "wgpu","wayland"
else
cargo check --quiet -p eframe --no-default-features --features "glow"
cargo check --quiet -p eframe --no-default-features --features "wgpu"
fi
cargo check --quiet -p egui --no-default-features --features "serde"
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
cargo check --quiet -p egui_demo_app --no-default-features --features "glow","x11"
cargo check --quiet -p egui_demo_app --no-default-features --features "glow","wayland"
cargo check --quiet -p egui_demo_app --no-default-features --features "wgpu","x11"
cargo check --quiet -p egui_demo_app --no-default-features --features "wgpu","wayland"
else
cargo check --quiet -p egui_demo_app --no-default-features --features "glow"
cargo check --quiet -p egui_demo_app --no-default-features --features "wgpu"
fi
cargo check --quiet -p egui_demo_lib --no-default-features
cargo check --quiet -p egui_extras --no-default-features
cargo check --quiet -p egui_glow --no-default-features
cargo check --quiet -p egui-winit --no-default-features --features "wayland"
cargo check --quiet -p egui-winit --no-default-features --features "x11"
cargo check --quiet -p emath --no-default-features
cargo check --quiet -p epaint --no-default-features --release
cargo check --quiet -p epaint --no-default-features
cargo check --quiet -p eframe --all-features
cargo check --quiet -p egui --all-features
cargo check --quiet -p egui_demo_app --all-features
cargo check --quiet -p egui_extras --all-features
cargo check --quiet -p egui_glow --all-features
cargo check --quiet -p egui-winit --all-features
cargo check --quiet -p emath --all-features
cargo check --quiet -p epaint --all-features
./scripts/wasm_bindgen_check.sh
./scripts/cargo_deny.sh
# TODO(emilk): consider using https://github.com/taiki-e/cargo-hack or https://github.com/frewsxcv/cargo-all-features
# ------------------------------------------------------------
#
# For finding bloat:
# cargo bloat --release --bin egui_demo_app -n 200 | rg egui
# Also try https://github.com/google/bloaty
# what compiles slowly?
# cargo clean && time cargo build -p eframe --timings
# https://fasterthanli.me/articles/why-is-my-rust-build-so-slow
# what compiles slowly?
# cargo llvm-lines --lib -p egui | head -20
echo "All checks passed."