summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com>2024-04-17 19:26:40 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2024-04-17 19:26:40 +0000
commit2d340ba5bc117b35218ec5f1e1bdcb3cd9937bc6 (patch)
tree80f13aa8cd6fa4222a67fb349b3e38ee0dbe97cb
parentfbb70489fd4484a41076c1e8cf60cc9398d8bff0 (diff)
parentc7d610df5a41c944e5a47460677367083a5f6332 (diff)
downloaddevelopment-2d340ba5bc117b35218ec5f1e1bdcb3cd9937bc6.tar.gz
Merge changes I6e2dcaef,Ie653d82b,I3d8e80b6 into main
* changes: Allow crates with multiple target kinds. Allow externs without a hash. Ignore more rustc arguments.
-rw-r--r--tools/cargo_embargo/src/cargo/cargo_out.rs6
-rw-r--r--tools/cargo_embargo/src/cargo/metadata.rs45
2 files changed, 28 insertions, 23 deletions
diff --git a/tools/cargo_embargo/src/cargo/cargo_out.rs b/tools/cargo_embargo/src/cargo/cargo_out.rs
index bb91b8569..01ca55c95 100644
--- a/tools/cargo_embargo/src/cargo/cargo_out.rs
+++ b/tools/cargo_embargo/src/cargo/cargo_out.rs
@@ -276,9 +276,9 @@ impl Crate {
if let Some((name, path)) = arg.split_once('=') {
let filename = path.split('/').last().unwrap();
- // Example filename: "libgetrandom-fd8800939535fc59.rmeta"
+ // Example filename: "libgetrandom-fd8800939535fc59.rmeta" or "libmls_rs_uniffi.rlib".
static REGEX: Lazy<Regex> = Lazy::new(|| {
- Regex::new(r"^lib(.*)-[0-9a-f]*.(rlib|so|rmeta)$").unwrap()
+ Regex::new(r"^lib([^-]*)(?:-[0-9a-f]*)?.(rlib|so|rmeta)$").unwrap()
});
let Some(lib_name) = REGEX.captures(filename).and_then(|x| x.get(1)) else {
@@ -361,6 +361,8 @@ impl Crate {
_ if arg.starts_with("--allow=clippy") => {}
_ if arg.starts_with("-Wclippy") => {}
_ if arg.starts_with("--warn=clippy") => {}
+ _ if arg.starts_with("-A=rustdoc") => {}
+ _ if arg.starts_with("--allow=rustdoc") => {}
_ if arg.starts_with("-D") => {}
_ if arg.starts_with("--deny=") => {}
_ if arg.starts_with("-W") => {}
diff --git a/tools/cargo_embargo/src/cargo/metadata.rs b/tools/cargo_embargo/src/cargo/metadata.rs
index c937ae925..2958a0117 100644
--- a/tools/cargo_embargo/src/cargo/metadata.rs
+++ b/tools/cargo_embargo/src/cargo/metadata.rs
@@ -19,7 +19,6 @@ use crate::config::VariantConfig;
use anyhow::{bail, Context, Result};
use serde::Deserialize;
use std::collections::BTreeMap;
-use std::ops::Deref;
use std::path::{Path, PathBuf};
/// `cfg` strings for dependencies which should be considered enabled. It would be better to parse
@@ -124,20 +123,24 @@ fn parse_cargo_metadata(
let package_dir = package_dir_from_id(&package.id)?;
for target in &package.targets {
- let [target_kind] = target.kind.deref() else {
- bail!("Target kind had unexpected length: {:?}", target.kind);
- };
- if ![
- TargetKind::Bin,
- TargetKind::Cdylib,
- TargetKind::Lib,
- TargetKind::ProcMacro,
- TargetKind::Rlib,
- TargetKind::Staticlib,
- TargetKind::Test,
- ]
- .contains(target_kind)
- {
+ let target_kinds = target
+ .kind
+ .clone()
+ .into_iter()
+ .filter(|kind| {
+ [
+ TargetKind::Bin,
+ TargetKind::Cdylib,
+ TargetKind::Lib,
+ TargetKind::ProcMacro,
+ TargetKind::Rlib,
+ TargetKind::Staticlib,
+ TargetKind::Test,
+ ]
+ .contains(kind)
+ })
+ .collect::<Vec<_>>();
+ if target_kinds.is_empty() {
// Only binaries, libraries and integration tests are supported.
continue;
}
@@ -146,14 +149,14 @@ fn parse_cargo_metadata(
// https://github.com/rust-lang/rfcs/blob/master/text/0940-hyphens-considered-harmful.md
// for background.
let target_name = target.name.replace('-', "_");
- let target_triple = if *target_kind == TargetKind::ProcMacro {
+ let target_triple = if target_kinds == [TargetKind::ProcMacro] {
None
} else {
Some("x86_64-unknown-linux-gnu".to_string())
};
// Don't generate an entry for integration tests, they will be covered by the test case
// below.
- if *target_kind != TargetKind::Test {
+ if target_kinds != [TargetKind::Test] {
crates.push(Crate {
name: target_name.clone(),
package_name: package.name.to_owned(),
@@ -168,7 +171,7 @@ fn parse_cargo_metadata(
package,
&metadata.packages,
&features,
- *target_kind,
+ &target_kinds,
false,
)?,
..Default::default()
@@ -190,7 +193,7 @@ fn parse_cargo_metadata(
package,
&metadata.packages,
&features,
- *target_kind,
+ &target_kinds,
true,
)?,
..Default::default()
@@ -205,7 +208,7 @@ fn get_externs(
package: &PackageMetadata,
packages: &[PackageMetadata],
features: &[String],
- target_kind: TargetKind,
+ target_kinds: &[TargetKind],
test: bool,
) -> Result<Vec<Extern>> {
let mut externs = package
@@ -226,7 +229,7 @@ fn get_externs(
// If there is a library target and this is a binary or integration test, add the library as an
// extern.
- if matches!(target_kind, TargetKind::Bin | TargetKind::Test) {
+ if matches!(target_kinds, [TargetKind::Bin] | [TargetKind::Test]) {
for target in &package.targets {
if target.kind.contains(&TargetKind::Lib) {
let lib_name = target.name.replace('-', "_");