# 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 """ Temporary module with functionaly used to migrate away from build-script-impl. """ from __future__ import absolute_import, unicode_literals from swift_build_support.swift_build_support.targets import \ StdlibDeploymentTarget __all__ = [ 'UnknownSDKError', 'migrate_swift_sdks', ] _SDK_TARGETS = { 'OSX': StdlibDeploymentTarget.OSX.targets, 'IOS': StdlibDeploymentTarget.iOS.targets, 'IOS_SIMULATOR': StdlibDeploymentTarget.iOSSimulator.targets, 'TVOS': StdlibDeploymentTarget.AppleTV.targets, 'TVOS_SIMULATOR': StdlibDeploymentTarget.AppleTVSimulator.targets, 'WATCHOS': StdlibDeploymentTarget.AppleWatch.targets, 'WATCHOS_SIMULATOR': StdlibDeploymentTarget.AppleWatchSimulator.targets, } # ----------------------------------------------------------------------------- class UnknownSDKError(Exception): """Error indicating an unknown SDK was encountered when migrating to target triples. """ pass def _swift_sdks_to_stdlib_targets(swift_sdks): stdlib_targets = [] for sdk in swift_sdks: sdk_targets = _SDK_TARGETS.get(sdk, None) if sdk_targets is None: raise UnknownSDKError(sdk) stdlib_targets += sdk_targets return stdlib_targets def migrate_swift_sdks(args): """Migrate usages of the now deprecated `--swift-sdks` option to the new `--stdlib-deployment-targets` option, converting Swift SDKs to the corresponding targets. Since argument parsing is a last-wins scenario, only the last `--swift-sdks` option is migrated, all others are removed. This function is a stop-gap to replacing all instances of `--swift-sdks`. """ swift_sdks_args = [arg for arg in args if arg.startswith('--swift-sdks')] if len(swift_sdks_args) < 1: return args # Only get the last --swift-sdks arg since last-wins swift_sdks_arg = swift_sdks_args[-1] sdk_list = swift_sdks_arg.split('=')[1].split(';') stdlib_targets = _swift_sdks_to_stdlib_targets(sdk_list) target_names = ' '.join([target.name for target in stdlib_targets]) stdlib_targets_arg = '--stdlib-deployment-targets=' + target_names args = [arg for arg in args if not arg.startswith('--swift-sdks')] args.append(stdlib_targets_arg) return args