@@ -23,13 +23,13 @@ where
2323 ) ;
2424
2525 let matches = App :: new ( "bindgen" )
26- . version ( option_env ! ( "CARGO_PKG_VERSION" ) . unwrap_or ( "unknown" ) )
2726 . about ( "Generates Rust bindings from C/C++ headers." )
27+ . setting ( clap:: AppSettings :: NoAutoVersion )
2828 . override_usage ( "bindgen [FLAGS] [OPTIONS] <header> -- <clang-args>..." )
2929 . args ( & [
3030 Arg :: new ( "header" )
3131 . help ( "C or C++ header file" )
32- . required ( true ) ,
32+ . required_unless_present ( "V" ) ,
3333 Arg :: new ( "depfile" )
3434 . long ( "depfile" )
3535 . takes_value ( true )
@@ -545,9 +545,24 @@ where
545545 Arg :: new ( "vtable-generation" )
546546 . long ( "vtable-generation" )
547547 . help ( "Enables generation of vtable functions." ) ,
548+ Arg :: new ( "V" )
549+ . long ( "version" )
550+ . help ( "Prints the version, and exits" ) ,
548551 ] ) // .args()
549552 . get_matches_from ( args) ;
550553
554+ let verbose = matches. is_present ( "verbose" ) ;
555+ if matches. is_present ( "V" ) {
556+ println ! (
557+ "bindgen {}" ,
558+ option_env!( "CARGO_PKG_VERSION" ) . unwrap_or( "unknown" )
559+ ) ;
560+ if verbose {
561+ println ! ( "Clang: {}" , crate :: clang_version( ) . full) ;
562+ }
563+ std:: process:: exit ( 0 ) ;
564+ }
565+
551566 let mut builder = builder ( ) ;
552567
553568 if let Some ( header) = matches. value_of ( "header" ) {
@@ -1015,7 +1030,5 @@ where
10151030 builder = builder. vtable_generation ( true ) ;
10161031 }
10171032
1018- let verbose = matches. is_present ( "verbose" ) ;
1019-
10201033 Ok ( ( builder, output, verbose) )
10211034}
0 commit comments