blob: 2a3ba110e97202ffea65f0cd781669556ccddd6f [file] [log] [blame]
# swift_build_support/xcrun.py - Invoke xcrun from Python -*- python -*-
#
# This source file is part of the Swift.org open source project
#
# Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
# Licensed under Apache License v2.0 with Runtime Library Exception
#
# See https://swift.org/LICENSE.txt for license information
# See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
#
# ----------------------------------------------------------------------------
#
# Python wrappers for invoking `xcrun` on the command-line.
#
# ----------------------------------------------------------------------------
from __future__ import absolute_import
from . import cache_util
from . import shell
@cache_util.cached
def find(tool, sdk=None, toolchain=None):
"""
Return the path for the given tool, according to `xcrun --find`, using
the given sdk and toolchain.
If `xcrun --find` cannot find the tool, return None.
"""
command = ['xcrun', '--find', tool]
if sdk is not None:
command += ['--sdk', sdk]
if toolchain is not None:
command += ['--toolchain', toolchain]
# `xcrun --find` prints to stderr when it fails to find the
# given tool. We swallow that output with a pipe.
out = shell.capture(
command,
stderr=shell.DEVNULL, dry_run=False, echo=False, optional=True)
if out is None:
return None
return out.rstrip()
@cache_util.cached
def sdk_path(sdk):
"""
Return the path string for given SDK, according to `xcrun --show-sdk-path`.
If `xcrun --show-sdk-path` cannot find the SDK, return None.
"""
command = ['xcrun', '--sdk', sdk, '--show-sdk-path']
out = shell.capture(command, dry_run=False, echo=False, optional=True)
if out is None:
return None
return out.rstrip()