@@ -16,6 +16,7 @@ extern crate pkg_config;
1616) ) ]
1717compile_error ! ( "Enable 'bindgen' and 'bundled' features when using update_pregenerated_bindings" ) ;
1818
19+ use std:: io:: ErrorKind ;
1920use std:: path:: { Path , PathBuf } ;
2021use std:: process:: Command ;
2122use std:: { env, fs, io} ;
@@ -558,7 +559,7 @@ fn main() {
558559
559560 #[ cfg( not( feature = "bindgen" ) ) ]
560561 {
561- copy_pregenerated_bindings ( ) ;
562+ copy_pregenerated_bindings ( target . as_str ( ) ) ;
562563 println ! ( "cargo:include={}" , sdl2_includes) ;
563564 }
564565
@@ -574,10 +575,21 @@ fn main() {
574575 }
575576}
576577
578+ fn bindings_dir ( mut base : PathBuf , target : & str ) -> PathBuf {
579+ base. push ( "bindings" ) ;
580+ base. push ( target) ;
581+
582+ base
583+ }
584+
577585#[ cfg( any( not( feature = "bindgen" ) , update_pregenerated_bindings) ) ]
578- fn copy_pregenerated_bindings ( ) {
586+ fn copy_pregenerated_bindings ( target : & str ) {
579587 let out_path = PathBuf :: from ( env:: var ( "OUT_DIR" ) . unwrap ( ) ) ;
580- let crate_path = PathBuf :: from ( env:: var ( "CARGO_MANIFEST_DIR" ) . unwrap ( ) ) ;
588+ let crate_path = bindings_dir (
589+ PathBuf :: from ( env:: var ( "CARGO_MANIFEST_DIR" ) . unwrap ( ) ) ,
590+ target,
591+ ) ;
592+
581593 fs:: copy (
582594 crate_path. join ( "sdl_bindings.rs" ) ,
583595 out_path. join ( "sdl_bindings.rs" ) ,
@@ -642,7 +654,13 @@ fn generate_bindings(target: &str, host: &str, headers_paths: &[String]) {
642654 #[ cfg( not( update_pregenerated_bindings) ) ]
643655 let out_path = PathBuf :: from ( env:: var ( "OUT_DIR" ) . unwrap ( ) ) ;
644656 #[ cfg( update_pregenerated_bindings) ]
645- let out_path = PathBuf :: from ( "." ) ;
657+ let out_path = bindings_dir ( PathBuf :: from ( "." ) , target) ;
658+
659+ #[ cfg( update_pregenerated_bindings) ]
660+ match fs:: create_dir ( & out_path) {
661+ Err ( err) if err. kind ( ) == io:: ErrorKind :: AlreadyExists => { }
662+ res => res. expect ( "unable to create bindings dir" ) ,
663+ }
646664
647665 let mut all_bindings = bindgen:: builder ( )
648666 // enable no_std-friendly output by only using core definitions
@@ -836,7 +854,7 @@ fn generate_bindings(target: &str, host: &str, headers_paths: &[String]) {
836854 }
837855
838856 #[ cfg( update_pregenerated_bindings) ]
839- copy_pregenerated_bindings ( ) ;
857+ copy_pregenerated_bindings ( target ) ;
840858}
841859
842860fn get_os_from_triple ( triple : & str ) -> Option < & str > {
0 commit comments