1
0
mirror of https://github.com/mpv-player/mpv synced 2024-12-20 13:52:10 +00:00
mpv/waftools/detections/compiler_swift.py
Akemi 12b90e744d build: fix swift build with waf 1.8.4
with older waf versions a node doesn't return an absolute path but just
a relative one. fix this by explicitly requesting an absolute one.

Fixes #5604
2018-03-11 22:44:26 -07:00

70 lines
2.2 KiB
Python

from waflib import Utils
def __run(cmd):
try:
output = Utils.subprocess.check_output(cmd, universal_newlines=True)
return output.strip()
except Exception:
return ""
def __add_swift_flags(ctx):
ctx.env.SWIFT_FLAGS = ('-frontend -c -sdk %s -enable-objc-interop'
' -emit-objc-header -parse-as-library'
' -target x86_64-apple-macosx10.10') % (ctx.env.MACOS_SDK)
swift_version = __run([ctx.env.SWIFT, '-version']).split(' ')[3].split('.')[:2]
major, minor = [int(n) for n in swift_version]
# the -swift-version parameter is only supported on swift 3.1 and newer
if major >= 3 and minor >= 1 or major >= 4:
ctx.env.SWIFT_FLAGS += ' -swift-version 3'
if ctx.is_optimization():
ctx.env.SWIFT_FLAGS += ' -O'
def __add_swift_library_linking_flags(ctx, swift_library):
ctx.env.append_value('LINKFLAGS', [
'-L%s' % swift_library,
'-Xlinker', '-force_load_swift_libs', '-lc++',
])
def __find_swift_library(ctx):
swift_library_paths = [
'Toolchains/XcodeDefault.xctoolchain/usr/lib/swift_static/macosx',
'usr/lib/swift_static/macosx'
]
dev_path = __run(['xcode-select', '-p'])[1:]
ctx.start_msg('Checking for Swift Library')
for path in swift_library_paths:
swift_library = ctx.root.find_dir([dev_path, path])
if swift_library is not None:
ctx.end_msg(swift_library.abspath())
__add_swift_library_linking_flags(ctx, swift_library.abspath())
return
ctx.end_msg(False)
def __find_macos_sdk(ctx):
ctx.start_msg('Checking for macOS SDK')
sdk = __run(['xcrun', '--sdk', 'macosx', '--show-sdk-path'])
if sdk:
ctx.end_msg(sdk)
ctx.env.MACOS_SDK = sdk
else:
ctx.end_msg(False)
def __find_swift_compiler(ctx):
ctx.start_msg('Checking for swift (Swift compiler)')
swift = __run(['xcrun', '-find', 'swift'])
if swift:
ctx.end_msg(swift)
ctx.env.SWIFT = swift
__add_swift_flags(ctx)
__find_swift_library(ctx)
else:
ctx.end_msg(False)
def configure(ctx):
if ctx.env.DEST_OS == "darwin":
__find_macos_sdk(ctx)
__find_swift_compiler(ctx)