blob: 8b329cc95cc2b3ecd19f4a66bb2ffe3c126e4572 [file] [log] [blame]
# swift_build_support/which.py - shutil.which() for Python 2.7 -*- 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
#
# ----------------------------------------------------------------------------
#
# A naive reimplementation of shutil.which() for Python 2.7. This can be
# removed if shutil.which() is backported, or if the Swift build toolchain
# migrates completely to Python 3.3+.
#
# ----------------------------------------------------------------------------
from __future__ import absolute_import
from . import cache_util
from . import shell
@cache_util.cached
def which(cmd):
"""
Return the path to an executable which would be run if
the given cmd was called. If no cmd would be called, return None.
Python 3.3+ provides this behavior via the shutil.which() function;
see: https://docs.python.org/3.3/library/shutil.html#shutil.which
We provide our own implementation because shutil.which() has not
been backported to Python 2.7, which we support.
"""
out = shell.capture(['which', cmd],
dry_run=False, echo=False,
optional=True, stderr=shell.DEVNULL)
if out is None:
return None
return out.rstrip()