13
13
14
14
from __future__ import absolute_import , unicode_literals
15
15
16
+ import itertools
17
+
16
18
from swift_build_support .swift_build_support .targets import \
17
19
StdlibDeploymentTarget
18
20
19
21
22
+ try :
23
+ # Python 2
24
+ from itertools import imap
25
+ except ImportError :
26
+ imap = map
27
+
28
+
20
29
__all__ = [
21
30
'UnknownSDKError' ,
22
31
'migrate_swift_sdks' ,
@@ -41,44 +50,41 @@ class UnknownSDKError(Exception):
41
50
triples.
42
51
"""
43
52
44
- pass
45
-
53
+ def __init__ ( self , sdk ):
54
+ self . sdk = sdk
46
55
47
- def _swift_sdks_to_stdlib_targets (swift_sdks ):
48
- stdlib_targets = []
49
- for sdk in swift_sdks :
50
- sdk_targets = _SDK_TARGETS .get (sdk , None )
51
- if sdk_targets is None :
52
- raise UnknownSDKError (sdk )
53
- stdlib_targets += sdk_targets
54
-
55
- return stdlib_targets
56
+ super (UnknownSDKError , self ).__init__ (
57
+ 'Unknown SDK: {}' .format (self .sdk ))
56
58
57
59
58
60
def migrate_swift_sdks (args ):
59
61
"""Migrate usages of the now deprecated `--swift-sdks` option to the new
60
62
`--stdlib-deployment-targets` option, converting Swift SDKs to the
61
- corresponding targets. Since argument parsing is a last-wins scenario, only
62
- the last `--swift-sdks` option is migrated, all others are removed.
63
+ corresponding targets.
63
64
64
65
This function is a stop-gap to replacing all instances of `--swift-sdks`.
65
66
"""
66
67
67
- swift_sdks_args = [arg for arg in args if arg .startswith ('--swift-sdks' )]
68
+ def _flatten (iterable ):
69
+ return itertools .chain .from_iterable (iterable )
70
+
71
+ def _swift_sdk_to_stdlib_targets (sdk ):
72
+ targets = _SDK_TARGETS .get (sdk , None )
73
+ if targets is None :
74
+ raise UnknownSDKError (sdk )
68
75
69
- if len (swift_sdks_args ) < 1 :
70
- return args
76
+ return targets
71
77
72
- # Only get the last --swift-sdks arg since last-wins
73
- swift_sdks_arg = swift_sdks_args [- 1 ]
78
+ def _migrate_swift_sdks_arg (arg ):
79
+ if not arg .startswith ('--swift-sdks' ):
80
+ return arg
74
81
75
- sdk_list = swift_sdks_arg .split ('=' )[1 ]. split ( ';' )
76
- stdlib_targets = _swift_sdks_to_stdlib_targets ( sdk_list )
82
+ sdks = arg .split ('=' )[1 ]
83
+ sdk_list = [] if sdks == '' else sdks . split ( ';' )
77
84
78
- target_names = ' ' . join ([ target . name for target in stdlib_targets ] )
79
- stdlib_targets_arg = '--stdlib-deployment-targets=' + target_names
85
+ targets = _flatten ( imap ( _swift_sdk_to_stdlib_targets , sdk_list ) )
86
+ target_names = [ target . name for target in targets ]
80
87
81
- args = [arg for arg in args if not arg .startswith ('--swift-sdks' )]
82
- args .append (stdlib_targets_arg )
88
+ return '--stdlib-deployment-targets={}' .format (' ' .join (target_names ))
83
89
84
- return args
90
+ return list ( imap ( _migrate_swift_sdks_arg , args ))
0 commit comments