@@ -427,6 +427,49 @@ impl fmt::Display for Error {
427
427
}
428
428
}
429
429
430
+ impl Error {
431
+ /// Returns a concise version of the error message
432
+ pub fn error_message ( & self ) -> String {
433
+
434
+ // Extracts just the command name from WrappedCommand's output.
435
+ // The command name alone is not available in the Error enum.
436
+ fn trimmed_command ( command : & str ) -> & str {
437
+ let env_prefix = command. split_inclusive ( ' ' )
438
+ . take_while ( |arg| arg. starts_with ( "PKG_CONFIG" ) && arg. contains ( '=' ) )
439
+ . map ( |arg| arg. len ( ) )
440
+ . sum :: < usize > ( ) ;
441
+ command[ env_prefix..] . split ( " --" ) . next ( ) . unwrap ( )
442
+ }
443
+
444
+ match self {
445
+ Error :: Command { command, cause } => match cause. kind ( ) {
446
+ io:: ErrorKind :: NotFound => {
447
+ format ! ( "`{}` command not found. Is pkg-config installed?" , trimmed_command( command) )
448
+ }
449
+ _ => format ! ( "Could not run `{}` command, because {}" , trimmed_command( command) , cause) ,
450
+ } ,
451
+ Error :: Failure { command, output } => {
452
+ format ! ( "Command `{}` failed with {}" , trimmed_command( command) , output. status)
453
+ }
454
+ Error :: ProbeFailure {
455
+ name,
456
+ command,
457
+ output,
458
+ } => format ! (
459
+ "The system library `{}` was not found, because command `{}` failed with {}" ,
460
+ name, trimmed_command( command) , output. status
461
+ ) ,
462
+ Error :: EnvNoPkgConfig ( var) => {
463
+ format ! ( "pkg-config has been disabled via {} env var" , var)
464
+ }
465
+ Error :: CrossCompilation => {
466
+ format ! ( "pkg-config has not been set up to support cross-compilation" )
467
+ }
468
+ _ => self . to_string ( ) ,
469
+ }
470
+ }
471
+ }
472
+
430
473
fn format_output ( output : & Output , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
431
474
let stdout = String :: from_utf8_lossy ( & output. stdout ) ;
432
475
if !stdout. is_empty ( ) {
0 commit comments