@@ -427,6 +427,62 @@ 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
+ // Extracts just the command name from WrappedCommand's output.
434
+ // The command name alone is not available in the Error enum.
435
+ fn trimmed_command ( command : & str ) -> & str {
436
+ let env_prefix = command
437
+ . 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 ! (
448
+ "`{}` command not found. Is pkg-config installed?" ,
449
+ trimmed_command( command)
450
+ )
451
+ }
452
+ _ => format ! (
453
+ "Could not run `{}` command, because {}" ,
454
+ trimmed_command( command) ,
455
+ cause
456
+ ) ,
457
+ } ,
458
+ Error :: Failure { command, output } => {
459
+ format ! (
460
+ "Command `{}` failed with {}" ,
461
+ trimmed_command( command) ,
462
+ output. status
463
+ )
464
+ }
465
+ Error :: ProbeFailure {
466
+ name,
467
+ command,
468
+ output,
469
+ } => format ! (
470
+ "The system library `{}` was not found, because command `{}` failed with {}" ,
471
+ name,
472
+ trimmed_command( command) ,
473
+ output. status
474
+ ) ,
475
+ Error :: EnvNoPkgConfig ( var) => {
476
+ format ! ( "pkg-config has been disabled via {} env var" , var)
477
+ }
478
+ Error :: CrossCompilation => {
479
+ format ! ( "pkg-config has not been set up to support cross-compilation" )
480
+ }
481
+ _ => self . to_string ( ) ,
482
+ }
483
+ }
484
+ }
485
+
430
486
fn format_output ( output : & Output , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
431
487
let stdout = String :: from_utf8_lossy ( & output. stdout ) ;
432
488
if !stdout. is_empty ( ) {
0 commit comments