| #!/usr/bin/env python3 |
| # |
| # Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file |
| # for details. All rights reserved. Use of this source code is governed by a |
| # BSD-style license that can be found in the LICENSE file. |
| # |
| # Copies a binary and signs with using the specified signing identity. |
| |
| import optparse |
| import subprocess |
| |
| parser = optparse.OptionParser() |
| parser.add_option("--identity", type="string", help="Code signing identity") |
| parser.add_option("--input", type="string") |
| parser.add_option("--output", type="string") |
| options = parser.parse_args()[0] |
| |
| if not options.identity: |
| raise Exception("Missing code signing identity (--identity)") |
| |
| if not options.input: |
| raise Exception("Missing binaries to sign (--input)") |
| |
| if not options.output: |
| raise Exception("Missing binaries to sign (--input)") |
| |
| # Not cp. Compare tool("copy") in mac_toolchain.gni. |
| cmd = ["ln", "-f", options.input, options.output] |
| result = subprocess.run(cmd, capture_output=True, encoding="utf8") |
| if result.returncode != 0: |
| print("failed to run: " + " ".join(cmd)) |
| print(f"exit code: {result.returncode}") |
| print("stdout:") |
| print(result.stdout) |
| print("stdout:") |
| print(result.stderr) |
| raise Exception("failed to copy") |
| |
| codesign_args = [ |
| "--deep", "--force", "--verify", "--verbose", "--timestamp", "--options", |
| "runtime", "--sign", options.identity |
| ] |
| cmd = ["codesign"] + codesign_args + [options.output] |
| result = subprocess.run(cmd, capture_output=True, encoding="utf8") |
| if result.returncode != 0: |
| print("failed to run: " + " ".join(cmd)) |
| print(f"exit code: {result.returncode}") |
| print("stdout:") |
| print(result.stdout) |
| print("stdout:") |
| print(result.stderr) |
| raise Exception("failed to codesign") |