@@ -356,14 +356,11 @@ fn copy_sanitizers(
356
356
builder. copy ( & runtime. path , & dst) ;
357
357
358
358
if target == "x86_64-apple-darwin" || target == "aarch64-apple-darwin" {
359
- // Update the library install name reflect the fact it has been renamed.
360
- let status = Command :: new ( "install_name_tool" )
361
- . arg ( "-id" )
362
- . arg ( format ! ( "@rpath/{}" , runtime. name) )
363
- . arg ( & dst)
364
- . status ( )
365
- . expect ( "failed to execute `install_name_tool`" ) ;
366
- assert ! ( status. success( ) ) ;
359
+ // Update the library’s install name to reflect that it has has been renamed.
360
+ apple_darwin_update_library_name ( & dst, & format ! ( "@rpath/{}" , & runtime. name) ) ;
361
+ // Upon renaming the install name, the code signature of the file will invalidate,
362
+ // so we will sign it again.
363
+ apple_darwin_sign_file ( & dst) ;
367
364
}
368
365
369
366
target_deps. push ( dst) ;
@@ -372,6 +369,27 @@ fn copy_sanitizers(
372
369
target_deps
373
370
}
374
371
372
+ fn apple_darwin_update_library_name ( library_path : & Path , new_name : & str ) {
373
+ let status = Command :: new ( "install_name_tool" )
374
+ . arg ( "-id" )
375
+ . arg ( new_name)
376
+ . arg ( library_path)
377
+ . status ( )
378
+ . expect ( "failed to execute `install_name_tool`" ) ;
379
+ assert ! ( status. success( ) ) ;
380
+ }
381
+
382
+ fn apple_darwin_sign_file ( file_path : & Path ) {
383
+ let status = Command :: new ( "codesign" )
384
+ . arg ( "-f" ) // Force to rewrite the existing signature
385
+ . arg ( "-s" )
386
+ . arg ( "-" )
387
+ . arg ( file_path)
388
+ . status ( )
389
+ . expect ( "failed to execute `codesign`" ) ;
390
+ assert ! ( status. success( ) ) ;
391
+ }
392
+
375
393
#[ derive( Debug , Copy , Clone , PartialEq , Eq , Hash ) ]
376
394
pub struct StartupObjects {
377
395
pub compiler : Compiler ,
0 commit comments