From 8b63b6aa1bd3047733782a4904c15a9505af10aa Mon Sep 17 00:00:00 2001 From: gianluca-hilton Date: Mon, 3 Aug 2020 17:37:48 +0200 Subject: [PATCH 1/2] Detect standalone android compiler with regex --- Cargo.toml | 1 + src/lib.rs | 24 +++++++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index f523021c1..439b432d5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,6 +19,7 @@ edition = "2018" [dependencies] jobserver = { version = "0.1.16", optional = true } +regex = "1.3.9" [features] parallel = ["jobserver"] diff --git a/src/lib.rs b/src/lib.rs index 3d3cff487..9e4b5007c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -56,6 +56,7 @@ #![allow(deprecated)] #![deny(missing_docs)] +use regex::Regex; use std::collections::HashMap; use std::env; use std::ffi::{OsStr, OsString}; @@ -2839,9 +2840,26 @@ static NEW_STANDALONE_ANDROID_COMPILERS: [&str; 4] = [ // So to construct proper command line check if // `--target` argument would be passed or not to clang fn android_clang_compiler_uses_target_arg_internally(clang_path: &Path) -> bool { - NEW_STANDALONE_ANDROID_COMPILERS - .iter() - .any(|x| Some(x.as_ref()) == clang_path.file_name()) + let re = Regex::new(r"^.*\d{2}-clang(\+\+)?$").unwrap(); + re.is_match(clang_path.to_str().unwrap()) +} + +#[test] +fn test_android_clang_compiler_uses_target_arg_internally() { + for version in 16..21 { + assert!(android_clang_compiler_uses_target_arg_internally( + &PathBuf::from(format!("armv7a-linux-androideabi{}-clang", version)) + )); + assert!(android_clang_compiler_uses_target_arg_internally( + &PathBuf::from(format!("armv7a-linux-androideabi{}-clang++", version)) + )); + } + assert!(!android_clang_compiler_uses_target_arg_internally( + &PathBuf::from("clang") + )); + assert!(!android_clang_compiler_uses_target_arg_internally( + &PathBuf::from("clang++") + )); } fn autodetect_android_compiler(target: &str, host: &str, gnu: &str, clang: &str) -> String { From 07546dfde68bcf569264a9567d1c70f1a2690b2f Mon Sep 17 00:00:00 2001 From: gianluca-hilton Date: Fri, 7 Aug 2020 09:43:08 +0200 Subject: [PATCH 2/2] Remove regex dependency --- Cargo.toml | 1 - src/lib.rs | 12 +++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 439b432d5..f523021c1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,6 @@ edition = "2018" [dependencies] jobserver = { version = "0.1.16", optional = true } -regex = "1.3.9" [features] parallel = ["jobserver"] diff --git a/src/lib.rs b/src/lib.rs index 9e4b5007c..295c7c726 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -56,7 +56,6 @@ #![allow(deprecated)] #![deny(missing_docs)] -use regex::Regex; use std::collections::HashMap; use std::env; use std::ffi::{OsStr, OsString}; @@ -2840,8 +2839,15 @@ static NEW_STANDALONE_ANDROID_COMPILERS: [&str; 4] = [ // So to construct proper command line check if // `--target` argument would be passed or not to clang fn android_clang_compiler_uses_target_arg_internally(clang_path: &Path) -> bool { - let re = Regex::new(r"^.*\d{2}-clang(\+\+)?$").unwrap(); - re.is_match(clang_path.to_str().unwrap()) + if let Some(filename) = clang_path.file_name() { + if let Some(filename_str) = filename.to_str() { + filename_str.contains("android") + } else { + false + } + } else { + false + } } #[test]