Merge pull request #18972 from Rightpoint:task/colejd/prevent-existing-xcframework-error

This commit is contained in:
Alexander Alekhin 2020-12-01 12:36:29 +00:00
commit fc54853d44

View File

@ -4,7 +4,7 @@ This script builds OpenCV into an xcframework compatible with the platforms
of your choice. Just run it and grab a snack; you'll be waiting a while. of your choice. Just run it and grab a snack; you'll be waiting a while.
""" """
import sys, os, argparse, pathlib, traceback import sys, os, argparse, pathlib, traceback, contextlib, shutil
from cv_build_utils import execute, print_error, print_header, get_xcode_version, get_cmake_version from cv_build_utils import execute, print_error, print_header, get_xcode_version, get_cmake_version
if __name__ == "__main__": if __name__ == "__main__":
@ -67,7 +67,7 @@ if __name__ == "__main__":
# Build phase # Build phase
try: try:
# Build .frameworks for each platform # Phase 1: build .frameworks for each platform
osx_script_path = os.path.abspath(os.path.abspath(os.path.dirname(__file__))+'/../osx/build_framework.py') osx_script_path = os.path.abspath(os.path.abspath(os.path.dirname(__file__))+'/../osx/build_framework.py')
ios_script_path = os.path.abspath(os.path.abspath(os.path.dirname(__file__))+'/../ios/build_framework.py') ios_script_path = os.path.abspath(os.path.abspath(os.path.dirname(__file__))+'/../ios/build_framework.py')
@ -104,22 +104,29 @@ if __name__ == "__main__":
print_header("Building Catalyst frameworks") print_header("Building Catalyst frameworks")
execute(command, cwd=os.getcwd()) execute(command, cwd=os.getcwd())
# Put all the built .frameworks together into a .xcframework # Phase 2: put all the built .frameworks together into a .xcframework
print_header("Building xcframework")
xcframework_path = "{}/{}.xcframework".format(args.out, args.framework_name)
print_header("Building {}".format(xcframework_path))
# Remove the xcframework if it exists, otherwise the existing
# file will cause the xcodebuild command to fail.
with contextlib.suppress(FileNotFoundError):
shutil.rmtree(xcframework_path)
print("Removed existing xcframework at {}".format(xcframework_path))
framework_path = "{}/{}.xcframework".format(args.out, args.framework_name)
xcframework_build_command = [ xcframework_build_command = [
"xcodebuild", "xcodebuild",
"-create-xcframework", "-create-xcframework",
"-output", "-output",
framework_path, xcframework_path,
] ]
for folder in build_folders: for folder in build_folders:
xcframework_build_command += ["-framework", "{}/{}.framework".format(folder, args.framework_name)] xcframework_build_command += ["-framework", xcframework_path]
execute(xcframework_build_command, cwd=os.getcwd()) execute(xcframework_build_command, cwd=os.getcwd())
print("") print("")
print_header("Finished building {}".format(framework_path)) print_header("Finished building {}".format(xcframework_path))
except Exception as e: except Exception as e:
print_error(e) print_error(e)
traceback.print_exc(file=sys.stderr) traceback.print_exc(file=sys.stderr)