default features from bevy_asset and bevy_ecs can actually be disabled (#3097)

# Objective

- `bevy_ecs` exposes as an optional feature `bevy_reflect`. Disabling it doesn't compile.
- `bevy_asset` exposes as an optional feature `filesystem_watcher`. Disabling it doesn't compile. It is also not possible to disable this feature from Bevy

## Solution

- Fix compilation errors when disabling the default features. Make it possible to disable the feature `filesystem_watcher` from Bevy
This commit is contained in:
François 2021-11-13 21:15:22 +00:00
parent 71f4ff46f1
commit ac06ea3d17
8 changed files with 29 additions and 9 deletions

View file

@ -27,6 +27,7 @@ default = [
"hdr", "hdr",
"mp3", "mp3",
"x11", "x11",
"filesystem_watcher"
] ]
# Force dynamic linking, which improves iterative compile times # Force dynamic linking, which improves iterative compile times
@ -68,6 +69,9 @@ mp3 = ["bevy_internal/mp3"]
vorbis = ["bevy_internal/vorbis"] vorbis = ["bevy_internal/vorbis"]
wav = ["bevy_internal/wav"] wav = ["bevy_internal/wav"]
# Enable watching file system for asset hot reload
filesystem_watcher = ["bevy_internal/filesystem_watcher"]
serialize = ["bevy_internal/serialize"] serialize = ["bevy_internal/serialize"]
# Display server protocol support (X11 is enabled by default) # Display server protocol support (X11 is enabled by default)

View file

@ -9,7 +9,7 @@ license = "MIT OR Apache-2.0"
keywords = ["bevy"] keywords = ["bevy"]
[features] [features]
default = ["filesystem_watcher"] default = []
filesystem_watcher = ["notify"] filesystem_watcher = ["notify"]
[dependencies] [dependencies]

View file

@ -1,15 +1,23 @@
use crate::{filesystem_watcher::FilesystemWatcher, AssetIo, AssetIoError, AssetServer}; #[cfg(feature = "filesystem_watcher")]
use crate::{filesystem_watcher::FilesystemWatcher, AssetServer};
use crate::{AssetIo, AssetIoError};
use anyhow::Result; use anyhow::Result;
#[cfg(feature = "filesystem_watcher")]
use bevy_ecs::system::Res; use bevy_ecs::system::Res;
use bevy_utils::{BoxedFuture, HashSet}; use bevy_utils::BoxedFuture;
#[cfg(feature = "filesystem_watcher")]
use bevy_utils::HashSet;
#[cfg(feature = "filesystem_watcher")]
use crossbeam_channel::TryRecvError; use crossbeam_channel::TryRecvError;
use fs::File; use fs::File;
use io::Read; #[cfg(feature = "filesystem_watcher")]
use parking_lot::RwLock; use parking_lot::RwLock;
#[cfg(feature = "filesystem_watcher")]
use std::sync::Arc;
use std::{ use std::{
env, fs, io, env, fs,
io::Read,
path::{Path, PathBuf}, path::{Path, PathBuf},
sync::Arc,
}; };
pub struct FileAssetIo { pub struct FileAssetIo {
@ -21,6 +29,7 @@ pub struct FileAssetIo {
impl FileAssetIo { impl FileAssetIo {
pub fn new<P: AsRef<Path>>(path: P) -> Self { pub fn new<P: AsRef<Path>>(path: P) -> Self {
FileAssetIo { FileAssetIo {
#[cfg(feature = "filesystem_watcher")]
filesystem_watcher: Default::default(), filesystem_watcher: Default::default(),
root_path: Self::get_root_path().join(path.as_ref()), root_path: Self::get_root_path().join(path.as_ref()),
} }

View file

@ -11,9 +11,9 @@ keywords = ["bevy"]
[dependencies] [dependencies]
# bevy # bevy
bevy_app = { path = "../bevy_app", version = "0.5.0" } bevy_app = { path = "../bevy_app", version = "0.5.0", features = ["bevy_reflect"] }
bevy_derive = { path = "../bevy_derive", version = "0.5.0" } bevy_derive = { path = "../bevy_derive", version = "0.5.0" }
bevy_ecs = { path = "../bevy_ecs", version = "0.5.0" } bevy_ecs = { path = "../bevy_ecs", version = "0.5.0", features = ["bevy_reflect"] }
bevy_math = { path = "../bevy_math", version = "0.5.0" } bevy_math = { path = "../bevy_math", version = "0.5.0" }
bevy_reflect = { path = "../bevy_reflect", version = "0.5.0", features = ["bevy"] } bevy_reflect = { path = "../bevy_reflect", version = "0.5.0", features = ["bevy"] }
bevy_tasks = { path = "../bevy_tasks", version = "0.5.0" } bevy_tasks = { path = "../bevy_tasks", version = "0.5.0" }

View file

@ -1,6 +1,7 @@
//! Types that detect when their internal data mutate. //! Types that detect when their internal data mutate.
use crate::{component::ComponentTicks, system::Resource}; use crate::{component::ComponentTicks, system::Resource};
#[cfg(feature = "bevy_reflect")]
use bevy_reflect::Reflect; use bevy_reflect::Reflect;
use std::ops::{Deref, DerefMut}; use std::ops::{Deref, DerefMut};
@ -188,9 +189,11 @@ impl_into_inner!(Mut<'a, T>, T,);
impl_debug!(Mut<'a, T>,); impl_debug!(Mut<'a, T>,);
/// Unique mutable borrow of a Reflected component /// Unique mutable borrow of a Reflected component
#[cfg(feature = "bevy_reflect")]
pub struct ReflectMut<'a> { pub struct ReflectMut<'a> {
pub(crate) value: &'a mut dyn Reflect, pub(crate) value: &'a mut dyn Reflect,
pub(crate) ticks: Ticks<'a>, pub(crate) ticks: Ticks<'a>,
} }
#[cfg(feature = "bevy_reflect")]
change_detection_impl!(ReflectMut<'a>, dyn Reflect,); change_detection_impl!(ReflectMut<'a>, dyn Reflect,);

View file

@ -29,6 +29,9 @@ mp3 = ["bevy_audio/mp3"]
vorbis = ["bevy_audio/vorbis"] vorbis = ["bevy_audio/vorbis"]
wav = ["bevy_audio/wav"] wav = ["bevy_audio/wav"]
# Enable watching file system for asset hot reload
filesystem_watcher = ["bevy_asset/filesystem_watcher"]
serialize = ["bevy_input/serialize"] serialize = ["bevy_input/serialize"]
# Display server protocol support (X11 is enabled by default) # Display server protocol support (X11 is enabled by default)

View file

@ -11,7 +11,7 @@ keywords = ["bevy"]
[dependencies] [dependencies]
# bevy # bevy
bevy_app = { path = "../bevy_app", version = "0.5.0" } bevy_app = { path = "../bevy_app", version = "0.5.0" }
bevy_ecs = { path = "../bevy_ecs", version = "0.5.0" } bevy_ecs = { path = "../bevy_ecs", version = "0.5.0", features = ["bevy_reflect"] }
bevy_math = { path = "../bevy_math", version = "0.5.0" } bevy_math = { path = "../bevy_math", version = "0.5.0" }
bevy_reflect = { path = "../bevy_reflect", version = "0.5.0", features = ["bevy"] } bevy_reflect = { path = "../bevy_reflect", version = "0.5.0", features = ["bevy"] }
bevy_utils = { path = "../bevy_utils", version = "0.5.0" } bevy_utils = { path = "../bevy_utils", version = "0.5.0" }

View file

@ -14,6 +14,7 @@
|hdr|[HDR](https://en.wikipedia.org/wiki/High_dynamic_range) support.| |hdr|[HDR](https://en.wikipedia.org/wiki/High_dynamic_range) support.|
|mp3|MP3 audio format support.| |mp3|MP3 audio format support.|
|x11|Make GUI applications use X11 protocol. You could enable wayland feature to override this.| |x11|Make GUI applications use X11 protocol. You could enable wayland feature to override this.|
|filesystem_watcher|Enable watching the file system for asset hot reload|
## Optional Features ## Optional Features