diff --git a/shell/platform/darwin/ios/BUILD.gn b/shell/platform/darwin/ios/BUILD.gn index 3843b50960e6dd5fd64e07b71d4ba1f764fb334f..6e00a098ee4ed6cae9c8108731ad7f8dc4ea90e7 100644 --- a/shell/platform/darwin/ios/BUILD.gn +++ b/shell/platform/darwin/ios/BUILD.gn @@ -136,44 +136,31 @@ shared_library("create_flutter_framework_dylib") { ] } -copy("copy_framework_dylib") { - visibility = [ ":*" ] - - sources = [ - "$root_out_dir/libFlutter.dylib", - ] - outputs = [ - "$_flutter_framework_dir/Flutter", - ] - - deps = [ - ":create_flutter_framework_dylib", - ] -} - action("copy_dylib_and_update_framework_install_name") { visibility = [ ":*" ] - stamp_file = "$root_out_dir/flutter_install_name_stamp" script = "$flutter_root/sky/tools/change_install_name.py" inputs = [ - "$_flutter_framework_dir/Flutter", + script, + ] + sources = [ + "$root_out_dir/libFlutter.dylib", ] outputs = [ - stamp_file, + "$_flutter_framework_dir/Flutter", ] args = [ "--dylib", - rebase_path("$_flutter_framework_dir/Flutter"), + rebase_path(sources[0]), "--install_name", "@rpath/Flutter.framework/Flutter", - "--stamp", - rebase_path(stamp_file), + "--output", + rebase_path(outputs[0]), ] deps = [ - ":copy_framework_dylib", + ":create_flutter_framework_dylib", ] } diff --git a/shell/platform/darwin/macos/BUILD.gn b/shell/platform/darwin/macos/BUILD.gn index 20d0961275ff6298d46488d8f48bf04663ccb787..653a85e6230b98cb049d2fb399c9abea6949e996 100644 --- a/shell/platform/darwin/macos/BUILD.gn +++ b/shell/platform/darwin/macos/BUILD.gn @@ -76,44 +76,32 @@ shared_library("create_flutter_framework_dylib") { libs = [ "Cocoa.framework" ] } -copy("copy_framework_dylib") { - visibility = [ ":*" ] - - sources = [ - "$root_out_dir/lib$_flutter_framework_name.dylib", - ] - outputs = [ - "$_flutter_framework_dir/Versions/A/$_flutter_framework_name", - ] - - deps = [ - ":create_flutter_framework_dylib", - ] -} - action("copy_dylib_and_update_framework_install_name") { visibility = [ ":*" ] - stamp_file = "$root_out_dir/flutter_install_name_stamp" script = "$flutter_root/sky/tools/change_install_name.py" + framework_binary_subpath = "Versions/A/$_flutter_framework_name" inputs = [ - "$_flutter_framework_dir/Versions/A/$_flutter_framework_name", + script, + ] + sources = [ + "$root_out_dir/lib$_flutter_framework_name.dylib", ] outputs = [ - stamp_file, + "$_flutter_framework_dir/$framework_binary_subpath", ] args = [ "--dylib", - rebase_path("$_flutter_framework_dir/Versions/A/$_flutter_framework_name"), + rebase_path(sources[0]), "--install_name", - "@rpath/$_flutter_framework_filename/Versions/A/$_flutter_framework_name", - "--stamp", - rebase_path(stamp_file), + "@rpath/$_flutter_framework_filename/$framework_binary_subpath", + "--output", + rebase_path(outputs[0]), ] deps = [ - ":copy_framework_dylib", + ":create_flutter_framework_dylib", ] } diff --git a/shell/platform/embedder/BUILD.gn b/shell/platform/embedder/BUILD.gn index fce3b8feb0ace62c4bc027eb5c0ff7316ffd6f7c..66efa1f9d5b90f587a84041d908146008712dc68 100644 --- a/shell/platform/embedder/BUILD.gn +++ b/shell/platform/embedder/BUILD.gn @@ -148,19 +148,6 @@ copy("copy_headers") { if (is_mac && !embedder_for_target) { _flutter_embedder_framework_dir = "$root_out_dir/FlutterEmbedder.framework" - copy("copy_dylib") { - visibility = [ ":*" ] - sources = [ - "$root_out_dir/libflutter_engine.dylib", - ] - outputs = [ - "$_flutter_embedder_framework_dir/Versions/A/FlutterEmbedder", - ] - deps = [ - ":flutter_engine_library", - ] - } - copy("copy_framework_headers") { visibility = [ ":*" ] sources = [ @@ -209,28 +196,30 @@ if (is_mac && !embedder_for_target) { action("install_dylib") { visibility = [ ":*" ] - stamp_file = "$root_build_dir/flutter_embedder_install_name_stamp" script = "$flutter_root/sky/tools/change_install_name.py" + framework_binary_subpath = "Versions/A/FlutterEmbedder" inputs = [ - "$_flutter_embedder_framework_dir/Versions/A/FlutterEmbedder", + script, + ] + sources = [ + "$root_out_dir/libflutter_engine.dylib", ] - outputs = [ - stamp_file, + "$_flutter_embedder_framework_dir/$framework_binary_subpath", ] args = [ "--dylib", - "FlutterEmbedder.framework/Versions/A/FlutterEmbedder", + rebase_path(sources[0]), "--install_name", - "@rpath/FlutterEmbedder.framework/Versions/A/FlutterEmbedder", - "--stamp", - rebase_path(stamp_file), + "@rpath/FlutterEmbedder.framework/$framework_binary_subpath", + "--output", + rebase_path(outputs[0]), ] deps = [ - ":copy_dylib", + ":flutter_engine_library", ] } diff --git a/sky/tools/change_install_name.py b/sky/tools/change_install_name.py index 3d715c422ff43df32e8a2288a25b5a8c75f60e4b..7b41c674c3bd5ee8515f57e5c883cf94cad5e46a 100755 --- a/sky/tools/change_install_name.py +++ b/sky/tools/change_install_name.py @@ -9,36 +9,34 @@ import sys import os -def MakeStamp(stamp_path): - dir_name = os.path.dirname(stamp_path) - - if not os.path.isdir(dir_name): - os.makedirs() - - with open(stamp_path, 'a'): - os.utime(stamp_path, None) - - def main(): parser = argparse.ArgumentParser( description='Changes the install name of a dylib') parser.add_argument('--dylib', type=str) parser.add_argument('--install_name', type=str) - parser.add_argument('--stamp', type=str) + # install_name_tool operates in place, which can't be expressed in GN, so + # this tool copies to a new location first, then operates on the copy. + parser.add_argument('--output', type=str) args = parser.parse_args() + subprocess.check_call([ + '/usr/bin/env', + 'cp', + '-fp', + args.dylib, + args.output, + ]) + subprocess.check_call([ '/usr/bin/env', 'xcrun', 'install_name_tool', '-id', args.install_name, - args.dylib, + args.output, ]) - MakeStamp(args.stamp) - if __name__ == '__main__': sys.exit(main())