File tree Expand file tree Collapse file tree 1 file changed +31
-2
lines changed Expand file tree Collapse file tree 1 file changed +31
-2
lines changed Original file line number Diff line number Diff line change @@ -3440,6 +3440,35 @@ impl Tool {
3440
3440
}
3441
3441
3442
3442
fn with_features ( path : PathBuf , clang_driver : Option < & str > , cuda : bool ) -> Self {
3443
+ fn detect_family ( path : & Path ) -> ToolFamily {
3444
+ let mut cmd = Command :: new ( path) ;
3445
+ cmd. arg ( "--version" ) ;
3446
+
3447
+ let stdout = match run_output ( & mut cmd, & path. to_string_lossy ( ) )
3448
+ . ok ( )
3449
+ . and_then ( |o| String :: from_utf8 ( o) . ok ( ) )
3450
+ {
3451
+ Some ( s) => s,
3452
+ None => {
3453
+ // --version failed. fallback to gnu
3454
+ println ! ( "cargo-warning:Running failed: {:?}" , cmd) ;
3455
+ return ToolFamily :: Gnu ;
3456
+ }
3457
+ } ;
3458
+ if stdout. contains ( "clang" ) {
3459
+ ToolFamily :: Clang
3460
+ } else if stdout. contains ( "GCC" ) {
3461
+ ToolFamily :: Gnu
3462
+ } else {
3463
+ // --version doesn't include clang for GCC
3464
+ println ! (
3465
+ "cargo-warning:Compiler version doesn't include clang or GCC: {:?}" ,
3466
+ cmd
3467
+ ) ;
3468
+ ToolFamily :: Gnu
3469
+ }
3470
+ }
3471
+
3443
3472
// Try to detect family of the tool from its name, falling back to Gnu.
3444
3473
let family = if let Some ( fname) = path. file_name ( ) . and_then ( |p| p. to_str ( ) ) {
3445
3474
if fname. contains ( "clang-cl" ) {
@@ -3452,10 +3481,10 @@ impl Tool {
3452
3481
_ => ToolFamily :: Clang ,
3453
3482
}
3454
3483
} else {
3455
- ToolFamily :: Gnu
3484
+ detect_family ( & path )
3456
3485
}
3457
3486
} else {
3458
- ToolFamily :: Gnu
3487
+ detect_family ( & path )
3459
3488
} ;
3460
3489
3461
3490
Tool {
You can’t perform that action at this time.
0 commit comments