diff --git a/substrate/Cargo.lock b/substrate/Cargo.lock
index 2f2b4aa7cf35d45bd7b8bbf0366e776433175406..ea34146f16f9bf6379436b18a6d0de7df27c9453 100644
--- a/substrate/Cargo.lock
+++ b/substrate/Cargo.lock
@@ -5176,7 +5176,6 @@ dependencies = [
  "frame-support",
  "frame-system",
  "log",
- "pallet-assets",
  "pallet-balances",
  "pallet-staking",
  "pallet-staking-reward-curve",
@@ -9475,6 +9474,7 @@ version = "4.0.0-dev"
 dependencies = [
  "parity-scale-codec",
  "scale-info",
+ "sp-core",
  "sp-runtime",
  "sp-std",
 ]
diff --git a/substrate/frame/assets/Cargo.toml b/substrate/frame/assets/Cargo.toml
index 715149b20c0425040df5dbdd883d10c907980686..84bfd9535a461e4234f4dda8851824795387990e 100644
--- a/substrate/frame/assets/Cargo.toml
+++ b/substrate/frame/assets/Cargo.toml
@@ -23,9 +23,9 @@ frame-support = { version = "4.0.0-dev", default-features = false, path = "../su
 # `system` module provides us with all sorts of useful stuff and macros depend on it being around.
 frame-system = { version = "4.0.0-dev", default-features = false, path = "../system" }
 frame-benchmarking = { version = "4.0.0-dev", default-features = false, path = "../benchmarking", optional = true }
+sp-core = { version = "7.0.0", default-features = false, path = "../../primitives/core" }
 
 [dev-dependencies]
-sp-core = { version = "7.0.0", path = "../../primitives/core" }
 sp-std = { version = "5.0.0", path = "../../primitives/std" }
 sp-io = { version = "7.0.0", path = "../../primitives/io" }
 pallet-balances = { version = "4.0.0-dev", path = "../balances" }
@@ -35,6 +35,7 @@ default = ["std"]
 std = [
 	"codec/std",
 	"scale-info/std",
+	"sp-core/std",
 	"sp-std/std",
 	"sp-runtime/std",
 	"frame-support/std",
diff --git a/substrate/frame/assets/src/lib.rs b/substrate/frame/assets/src/lib.rs
index 629a0243cfc80aab29ff08e950caf4d3b771eb7a..ab589c0eef0f4583923bbb97308d5620112c57c5 100644
--- a/substrate/frame/assets/src/lib.rs
+++ b/substrate/frame/assets/src/lib.rs
@@ -1487,3 +1487,5 @@ pub mod pallet {
 		}
 	}
 }
+
+sp_core::generate_feature_enabled_macro!(runtime_benchmarks_enabled, feature = "runtime-benchmarks", $);
diff --git a/substrate/frame/bags-list/src/lib.rs b/substrate/frame/bags-list/src/lib.rs
index 1ffdf29345513a173e6af3f857de05bfa6ff00c6..14f8a613eb798c040b4ba6da2bb5929e4d642266 100644
--- a/substrate/frame/bags-list/src/lib.rs
+++ b/substrate/frame/bags-list/src/lib.rs
@@ -359,25 +359,26 @@ impl<T: Config<I>, I: 'static> SortedListProvider<T::AccountId> for Pallet<T, I>
 		List::<T, I>::unsafe_clear()
 	}
 
-	#[cfg(feature = "runtime-benchmarks")]
-	fn score_update_worst_case(who: &T::AccountId, is_increase: bool) -> Self::Score {
-		use frame_support::traits::Get as _;
-		let thresholds = T::BagThresholds::get();
-		let node = list::Node::<T, I>::get(who).unwrap();
-		let current_bag_idx = thresholds
-			.iter()
-			.chain(sp_std::iter::once(&T::Score::max_value()))
-			.position(|w| w == &node.bag_upper())
-			.unwrap();
-
-		if is_increase {
-			let next_threshold_idx = current_bag_idx + 1;
-			assert!(thresholds.len() > next_threshold_idx);
-			thresholds[next_threshold_idx]
-		} else {
-			assert!(current_bag_idx != 0);
-			let prev_threshold_idx = current_bag_idx - 1;
-			thresholds[prev_threshold_idx]
+	frame_election_provider_support::runtime_benchmarks_enabled! {
+		fn score_update_worst_case(who: &T::AccountId, is_increase: bool) -> Self::Score {
+			use frame_support::traits::Get as _;
+			let thresholds = T::BagThresholds::get();
+			let node = list::Node::<T, I>::get(who).unwrap();
+			let current_bag_idx = thresholds
+				.iter()
+				.chain(sp_std::iter::once(&T::Score::max_value()))
+				.position(|w| w == &node.bag_upper)
+				.unwrap();
+
+			if is_increase {
+				let next_threshold_idx = current_bag_idx + 1;
+				assert!(thresholds.len() > next_threshold_idx);
+				thresholds[next_threshold_idx]
+			} else {
+				assert!(current_bag_idx != 0);
+				let prev_threshold_idx = current_bag_idx - 1;
+				thresholds[prev_threshold_idx]
+			}
 		}
 	}
 }
@@ -389,14 +390,15 @@ impl<T: Config<I>, I: 'static> ScoreProvider<T::AccountId> for Pallet<T, I> {
 		Node::<T, I>::get(id).map(|node| node.score()).unwrap_or_default()
 	}
 
-	#[cfg(any(feature = "runtime-benchmarks", feature = "fuzz", test))]
-	fn set_score_of(id: &T::AccountId, new_score: T::Score) {
-		ListNodes::<T, I>::mutate(id, |maybe_node| {
-			if let Some(node) = maybe_node.as_mut() {
-				node.set_score(new_score)
-			} else {
-				panic!("trying to mutate {:?} which does not exists", id);
-			}
-		})
+	frame_election_provider_support::runtime_benchmarks_or_fuzz_enabled! {
+		fn set_score_of(id: &T::AccountId, new_score: T::Score) {
+			ListNodes::<T, I>::mutate(id, |maybe_node| {
+				if let Some(node) = maybe_node.as_mut() {
+					node.score = new_score;
+				} else {
+					panic!("trying to mutate {:?} which does not exists", id);
+				}
+			})
+		}
 	}
 }
diff --git a/substrate/frame/election-provider-support/Cargo.toml b/substrate/frame/election-provider-support/Cargo.toml
index b9584c899e1b1e661a2b9bc66b443654f250f84b..33a6f25ed082235bf0d7665cd03771664f99826c 100644
--- a/substrate/frame/election-provider-support/Cargo.toml
+++ b/substrate/frame/election-provider-support/Cargo.toml
@@ -21,10 +21,10 @@ sp-arithmetic = { version = "6.0.0", default-features = false, path = "../../pri
 sp-npos-elections = { version = "4.0.0-dev", default-features = false, path = "../../primitives/npos-elections" }
 sp-runtime = { version = "7.0.0", default-features = false, path = "../../primitives/runtime" }
 sp-std = { version = "5.0.0", default-features = false, path = "../../primitives/std" }
+sp-core = { version = "7.0.0", default-features = false, path = "../../primitives/core" }
 
 [dev-dependencies]
 rand = "0.7.3"
-sp-core = { version = "7.0.0", path = "../../primitives/core" }
 sp-io = { version = "7.0.0", path = "../../primitives/io" }
 sp-npos-elections = { version = "4.0.0-dev", path = "../../primitives/npos-elections" }
 
@@ -38,6 +38,7 @@ std = [
 	"scale-info/std",
 	"sp-arithmetic/std",
 	"sp-npos-elections/std",
+	"sp-core/std",
 	"sp-runtime/std",
 	"sp-std/std",
 ]
diff --git a/substrate/frame/election-provider-support/src/lib.rs b/substrate/frame/election-provider-support/src/lib.rs
index 8b26148844c39f1cc3a57b66e173be0bf82d5551..9d5d6c018e5e154e8b09ea25dd64dd8254b8a2b2 100644
--- a/substrate/frame/election-provider-support/src/lib.rs
+++ b/substrate/frame/election-provider-support/src/lib.rs
@@ -671,3 +671,6 @@ pub type BoundedSupportsOf<E> = BoundedSupports<
 	<E as ElectionProviderBase>::AccountId,
 	<E as ElectionProviderBase>::MaxWinners,
 >;
+
+sp_core::generate_feature_enabled_macro!(runtime_benchmarks_enabled, feature = "runtime-benchmarks", $);
+sp_core::generate_feature_enabled_macro!(runtime_benchmarks_or_fuzz_enabled, any(feature = "runtime-benchmarks", feature = "fuzzing"), $);
diff --git a/substrate/frame/fast-unstake/Cargo.toml b/substrate/frame/fast-unstake/Cargo.toml
index 61bc823cc11e5e5da7f5c96e96c2fb02d0cb7d52..b61060e775a9f2ec2f3b83bfd19ca1e7be48dbd9 100644
--- a/substrate/frame/fast-unstake/Cargo.toml
+++ b/substrate/frame/fast-unstake/Cargo.toml
@@ -25,10 +25,7 @@ sp-std = { version = "5.0.0", default-features = false, path = "../../primitives
 sp-staking = { default-features = false, path = "../../primitives/staking" }
 frame-election-provider-support = { default-features = false, path = "../election-provider-support" }
 
-# optional dependencies for cargo features
 frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true, path = "../benchmarking" }
-pallet-staking = { default-features = false, optional = true, path = "../staking" }
-pallet-assets = { default-features = false, optional = true, path = "../assets" }
 
 [dev-dependencies]
 pallet-staking-reward-curve = { version = "4.0.0-dev", path = "../staking/reward-curve" }
@@ -38,8 +35,6 @@ sp-tracing = { version = "6.0.0", path = "../../primitives/tracing" }
 pallet-staking = { path = "../staking" }
 pallet-balances = { path = "../balances" }
 pallet-timestamp = { path = "../timestamp" }
-pallet-assets = { path = "../assets" }
-
 
 [features]
 default = ["std"]
@@ -64,6 +59,5 @@ runtime-benchmarks = [
 	"frame-benchmarking/runtime-benchmarks",
 	"frame-system/runtime-benchmarks",
 	"sp-staking/runtime-benchmarks",
-	"pallet-staking/runtime-benchmarks"
 ]
 try-runtime = ["frame-support/try-runtime"]
diff --git a/substrate/frame/nomination-pools/Cargo.toml b/substrate/frame/nomination-pools/Cargo.toml
index 4894e3d97f19a43969f67e426c64173dff04e6fb..3eb2d4bc5fd9b4230bb10ec87ac0b6b9bac7d4b0 100644
--- a/substrate/frame/nomination-pools/Cargo.toml
+++ b/substrate/frame/nomination-pools/Cargo.toml
@@ -26,7 +26,7 @@ sp-core = { version = "7.0.0", default-features = false, path = "../../primitive
 sp-io = { version = "7.0.0", default-features = false, path = "../../primitives/io" }
 log = { version = "0.4.0", default-features = false }
 
-# Optional: usef for testing and/or fuzzing
+# Optional: use for testing and/or fuzzing
 pallet-balances = { version = "4.0.0-dev", path = "../balances", optional = true }
 sp-tracing = { version = "6.0.0", path = "../../primitives/tracing", optional = true }
 
diff --git a/substrate/frame/nomination-pools/benchmarking/Cargo.toml b/substrate/frame/nomination-pools/benchmarking/Cargo.toml
index be52d9777ac8692edc07e12c346f3063429a7491..74b71a353fe7fb4d23e37a94d39045890e9027fb 100644
--- a/substrate/frame/nomination-pools/benchmarking/Cargo.toml
+++ b/substrate/frame/nomination-pools/benchmarking/Cargo.toml
@@ -31,7 +31,6 @@ sp-runtime = { version = "7.0.0", default-features = false, path = "../../../pri
 sp-runtime-interface = { version = "7.0.0", default-features = false, path = "../../../primitives/runtime-interface" }
 sp-staking = { version = "4.0.0-dev", default-features = false, path = "../../../primitives/staking" }
 sp-std = { version = "5.0.0", default-features = false, path = "../../../primitives/std" }
-sp-io = { optional = true, default-features = false, path = "../../../primitives/io" }
 
 [dev-dependencies]
 pallet-balances = { version = "4.0.0-dev", default-features = false, path = "../../balances" }
@@ -53,7 +52,6 @@ std = [
 	"pallet-nomination-pools/std",
 	"sp-runtime/std",
 	"sp-runtime-interface/std",
-	"sp-io/std",
 	"sp-staking/std",
 	"sp-std/std",
 ]
diff --git a/substrate/frame/staking/Cargo.toml b/substrate/frame/staking/Cargo.toml
index 3ad63ad94a08a4f1cffd2c060e4990a60af70344..a7fca045cc4ba68a1218f5643197b0427301205b 100644
--- a/substrate/frame/staking/Cargo.toml
+++ b/substrate/frame/staking/Cargo.toml
@@ -32,10 +32,9 @@ sp-application-crypto = { version = "7.0.0", default-features = false, path = ".
 frame-election-provider-support = { version = "4.0.0-dev", default-features = false, path = "../election-provider-support" }
 log = { version = "0.4.17", default-features = false }
 
-# optional dependencies for cargo features
+# Optional imports for benchmarking
 frame-benchmarking = { version = "4.0.0-dev", default-features = false, path = "../benchmarking", optional = true }
 rand_chacha = { version = "0.2", default-features = false, optional = true }
-pallet-bags-list = { default-features = false, optional = true, path = "../bags-list" }
 
 [dev-dependencies]
 sp-tracing = { version = "6.0.0", path = "../../primitives/tracing" }
@@ -75,10 +74,5 @@ runtime-benchmarks = [
 	"frame-election-provider-support/runtime-benchmarks",
 	"rand_chacha",
 	"sp-staking/runtime-benchmarks",
-	"pallet-bags-list/runtime-benchmarks",
 ]
 try-runtime = ["frame-support/try-runtime"]
-fuzz = [
-	"pallet-bags-list/fuzz",
-	"frame-election-provider-support/fuzz",
-]
diff --git a/substrate/frame/staking/src/pallet/impls.rs b/substrate/frame/staking/src/pallet/impls.rs
index 6729a2ca32eccf03a58be902fae6cc632cbba5f9..1a4086ad2ab110fb06768d8455ed76c3da13bd5e 100644
--- a/substrate/frame/staking/src/pallet/impls.rs
+++ b/substrate/frame/staking/src/pallet/impls.rs
@@ -1329,7 +1329,7 @@ impl<T: Config> ScoreProvider<T::AccountId> for Pallet<T> {
 		Self::weight_of(who)
 	}
 
-	#[cfg(any(feature = "runtime-benchmarks", feature = "fuzz"))]
+	#[cfg(feature = "runtime-benchmarks")]
 	fn set_score_of(who: &T::AccountId, weight: Self::Score) {
 		// this will clearly results in an inconsistent state, but it should not matter for a
 		// benchmark.
@@ -1594,28 +1594,27 @@ impl<T: Config> StakingInterface for Pallet<T> {
 		Self::nominate(RawOrigin::Signed(ctrl).into(), targets)
 	}
 
-	#[cfg(feature = "runtime-benchmarks")]
-	fn nominations(who: Self::AccountId) -> Option<Vec<T::AccountId>> {
-		Nominators::<T>::get(who).map(|n| n.targets.into_inner())
-	}
+	sp_staking::runtime_benchmarks_enabled! {
+		fn nominations(who: Self::AccountId) -> Option<Vec<T::AccountId>> {
+			Nominators::<T>::get(who).map(|n| n.targets.into_inner())
+		}
 
-	#[cfg(feature = "runtime-benchmarks")]
-	fn add_era_stakers(
-		current_era: &EraIndex,
-		stash: &T::AccountId,
-		exposures: Vec<(Self::AccountId, Self::Balance)>,
-	) {
-		let others = exposures
-			.iter()
-			.map(|(who, value)| IndividualExposure { who: who.clone(), value: value.clone() })
-			.collect::<Vec<_>>();
-		let exposure = Exposure { total: Default::default(), own: Default::default(), others };
-		Self::add_era_stakers(current_era.clone(), stash.clone(), exposure)
-	}
+		fn add_era_stakers(
+			current_era: &EraIndex,
+			stash: &T::AccountId,
+			exposures: Vec<(Self::AccountId, Self::Balance)>,
+		) {
+			let others = exposures
+				.iter()
+				.map(|(who, value)| IndividualExposure { who: who.clone(), value: value.clone() })
+				.collect::<Vec<_>>();
+			let exposure = Exposure { total: Default::default(), own: Default::default(), others };
+			<ErasStakers<T>>::insert(&current_era, &stash, &exposure);
+		}
 
-	#[cfg(feature = "runtime-benchmarks")]
-	fn set_current_era(era: EraIndex) {
-		CurrentEra::<T>::put(era);
+		fn set_current_era(era: EraIndex) {
+			CurrentEra::<T>::put(era);
+		}
 	}
 }
 
diff --git a/substrate/frame/transaction-payment/asset-tx-payment/Cargo.toml b/substrate/frame/transaction-payment/asset-tx-payment/Cargo.toml
index b192c4e9cd96e4a57111d5fd1c267e88ac356638..8e4645a2677f97096914c637d384faf95bda8338 100644
--- a/substrate/frame/transaction-payment/asset-tx-payment/Cargo.toml
+++ b/substrate/frame/transaction-payment/asset-tx-payment/Cargo.toml
@@ -19,12 +19,10 @@ sp-io = { version = "7.0.0", default-features = false, path = "../../../primitiv
 sp-runtime = { version = "7.0.0", default-features = false, path = "../../../primitives/runtime" }
 sp-std = { version = "5.0.0", default-features = false, path = "../../../primitives/std" }
 
-# optional dependencies for cargo features
 frame-support = { version = "4.0.0-dev", default-features = false, path = "../../support" }
 frame-system = { version = "4.0.0-dev", default-features = false, path = "../../system" }
 pallet-transaction-payment = { version = "4.0.0-dev", default-features = false, path = ".." }
 frame-benchmarking = { version = "4.0.0-dev", default-features = false, path = "../../benchmarking", optional = true }
-pallet-assets = { default-features = false, optional = true, path = "../../assets" }
 
 # Other dependencies
 codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] }
@@ -40,7 +38,6 @@ pallet-assets = { version = "4.0.0-dev", path = "../../assets" }
 pallet-authorship = { version = "4.0.0-dev", path = "../../authorship" }
 pallet-balances = { version = "4.0.0-dev", path = "../../balances" }
 
-
 [features]
 default = ["std"]
 std = [
@@ -60,6 +57,5 @@ runtime-benchmarks = [
 	"frame-benchmarking/runtime-benchmarks",
 	"sp-runtime/runtime-benchmarks",
 	"frame-system/runtime-benchmarks",
-	"pallet-assets/runtime-benchmarks",
 ]
 try-runtime = ["frame-support/try-runtime"]
diff --git a/substrate/frame/transaction-payment/asset-tx-payment/src/tests.rs b/substrate/frame/transaction-payment/asset-tx-payment/src/tests.rs
index 02e15654f3eed6deea1ce8cd37ca8fc1dd191178..b70a88d02c6e1cba9d40d25ed465e40da707c0cb 100644
--- a/substrate/frame/transaction-payment/asset-tx-payment/src/tests.rs
+++ b/substrate/frame/transaction-payment/asset-tx-payment/src/tests.rs
@@ -173,8 +173,9 @@ impl pallet_assets::Config for Runtime {
 	type Extra = ();
 	type WeightInfo = ();
 	type RemoveItemsLimit = ConstU32<1000>;
-	#[cfg(feature = "runtime-benchmarks")]
-	type BenchmarkHelper = ();
+	pallet_assets::runtime_benchmarks_enabled! {
+		type BenchmarkHelper = ();
+	}
 }
 
 pub struct HardcodedAuthor;
diff --git a/substrate/primitives/core/src/lib.rs b/substrate/primitives/core/src/lib.rs
index fda7604d5337f20f3ceaa4fc4945daf7d7ac9283..30d0cc199b74db7fec07f153a5707b779096b0d5 100644
--- a/substrate/primitives/core/src/lib.rs
+++ b/substrate/primitives/core/src/lib.rs
@@ -622,3 +622,49 @@ macro_rules! bounded_btree_map {
 		}
 	};
 }
+
+/// Generates a macro for checking if a certain feature is enabled.
+///
+/// These feature checking macros can be used to conditionally enable/disable code in a dependent
+/// crate based on a feature in the crate where the macro is called.
+#[macro_export]
+// We need to skip formatting this macro because of this bug:
+// https://github.com/rust-lang/rustfmt/issues/5283
+#[rustfmt::skip]
+macro_rules! generate_feature_enabled_macro {
+	( $macro_name:ident, $feature_name:meta, $d:tt ) => {
+		/// Enable/disable the given code depending on
+		#[doc = concat!("`", stringify!($feature_name), "`")]
+		/// being enabled for the crate or not.
+		///
+		/// # Example
+		///
+		/// ```nocompile
+		/// // Will add the code depending on the feature being enabled or not.
+		#[doc = concat!(stringify!($macro_name), "!( println!(\"Hello\") )")]
+		/// ```
+		#[cfg($feature_name)]
+		#[macro_export]
+		macro_rules! $macro_name {
+			( $d ( $d input:tt )* ) => {
+				$d ( $d input )*
+			}
+		}
+
+		/// Enable/disable the given code depending on
+		#[doc = concat!("`", stringify!($feature_name), "`")]
+		/// being enabled for the crate or not.
+		///
+		/// # Example
+		///
+		/// ```nocompile
+		/// // Will add the code depending on the feature being enabled or not.
+		#[doc = concat!(stringify!($macro_name), "!( println!(\"Hello\") )")]
+		/// ```
+		#[cfg(not($feature_name))]
+		#[macro_export]
+		macro_rules! $macro_name {
+			( $d ( $d input:tt )* ) => {};
+		}
+	};
+}
diff --git a/substrate/primitives/staking/Cargo.toml b/substrate/primitives/staking/Cargo.toml
index 550c1485e992ca2e923292ec6d9f1623879c5295..35feae43ebb8cdc0e016289fccd187c80ec82efd 100644
--- a/substrate/primitives/staking/Cargo.toml
+++ b/substrate/primitives/staking/Cargo.toml
@@ -15,6 +15,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 [dependencies]
 codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] }
 scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
+sp-core = { version = "7.0.0", default-features = false, path = "../core" }
 sp-runtime = { version = "7.0.0", default-features = false, path = "../runtime" }
 sp-std = { version = "5.0.0", default-features = false, path = "../std" }
 
@@ -23,6 +24,7 @@ default = ["std"]
 std = [
 	"codec/std",
 	"scale-info/std",
+	"sp-core/std",
 	"sp-runtime/std",
 	"sp-std/std",
 ]
diff --git a/substrate/primitives/staking/src/lib.rs b/substrate/primitives/staking/src/lib.rs
index 703f0abe80458fa319dc6fc72e394874e9a90df4..9eb4a4890cdf82375a1b62011da1e8ba5353fb14 100644
--- a/substrate/primitives/staking/src/lib.rs
+++ b/substrate/primitives/staking/src/lib.rs
@@ -190,3 +190,5 @@ pub trait StakingInterface {
 	#[cfg(feature = "runtime-benchmarks")]
 	fn set_current_era(era: EraIndex);
 }
+
+sp_core::generate_feature_enabled_macro!(runtime_benchmarks_enabled, feature = "runtime-benchmarks", $);
diff --git a/substrate/utils/wasm-builder/src/wasm_project.rs b/substrate/utils/wasm-builder/src/wasm_project.rs
index 7688069dd7cca209bf5c0ccf4df01d1e7efa1ea8..d17997360deef01ccfc670e2b996c041ae22d639 100644
--- a/substrate/utils/wasm-builder/src/wasm_project.rs
+++ b/substrate/utils/wasm-builder/src/wasm_project.rs
@@ -379,14 +379,15 @@ fn find_package_by_manifest_path<'a>(
 	if let Some(pkg) = crate_metadata.packages.iter().find(|p| p.manifest_path == manifest_path) {
 		return pkg
 	}
+
 	let pkgs_by_name = crate_metadata
 		.packages
 		.iter()
 		.filter(|p| p.name == pkg_name)
 		.collect::<Vec<_>>();
-	let mut pkgs = pkgs_by_name.iter();
-	if let Some(pkg) = pkgs.next() {
-		if pkgs.next().is_some() {
+
+	if let Some(pkg) = pkgs_by_name.first() {
+		if pkgs_by_name.len() > 1 {
 			panic!(
 				"Found multiple packages matching the name {pkg_name} ({manifest_path:?}): {:?}",
 				pkgs_by_name
@@ -395,7 +396,7 @@ fn find_package_by_manifest_path<'a>(
 			return pkg
 		}
 	} else {
-		panic!("Failed to find entry for package {pkg_name} ({manifest_path:?})");
+		panic!("Failed to find entry for package {pkg_name} ({manifest_path:?}).");
 	}
 }