@@ -66,6 +66,7 @@ use std::path::{Path, PathBuf};
6666use std:: process:: { Child , Command , Stdio } ;
6767use std:: sync:: { Arc , Mutex } ;
6868use std:: thread:: { self , JoinHandle } ;
69+ use regex:: Regex ;
6970
7071// These modules are all glue to support reading the MSVC version from
7172// the registry and from COM interfaces
@@ -2839,9 +2840,18 @@ static NEW_STANDALONE_ANDROID_COMPILERS: [&str; 4] = [
28392840// So to construct proper command line check if
28402841// `--target` argument would be passed or not to clang
28412842fn android_clang_compiler_uses_target_arg_internally ( clang_path : & Path ) -> bool {
2842- NEW_STANDALONE_ANDROID_COMPILERS
2843- . iter ( )
2844- . any ( |x| Some ( x. as_ref ( ) ) == clang_path. file_name ( ) )
2843+ let re = Regex :: new ( r"^.*\d{2}-clang(\+\+)?$" ) . unwrap ( ) ;
2844+ re. is_match ( clang_path. to_str ( ) . unwrap ( ) )
2845+ }
2846+
2847+ #[ test]
2848+ fn test_android_clang_compiler_uses_target_arg_internally ( ) {
2849+ for version in 16 ..21 {
2850+ assert ! ( android_clang_compiler_uses_target_arg_internally( & PathBuf :: from( format!( "armv7a-linux-androideabi{}-clang" , version) ) ) ) ;
2851+ assert ! ( android_clang_compiler_uses_target_arg_internally( & PathBuf :: from( format!( "armv7a-linux-androideabi{}-clang++" , version) ) ) ) ;
2852+ }
2853+ assert ! ( !android_clang_compiler_uses_target_arg_internally( & PathBuf :: from( "clang" ) ) ) ;
2854+ assert ! ( !android_clang_compiler_uses_target_arg_internally( & PathBuf :: from( "clang++" ) ) ) ;
28452855}
28462856
28472857fn autodetect_android_compiler ( target : & str , host : & str , gnu : & str , clang : & str ) -> String {
0 commit comments