Skip to content

Commit 7b8401c

Browse files
author
Ross Bayer
committed
[Build System: build-script] Remove the old implementation of the preset parser hidden away in swift_build_support.
1 parent 525708e commit 7b8401c

File tree

5 files changed

+28
-198
lines changed

5 files changed

+28
-198
lines changed

utils/build-script

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -971,7 +971,7 @@ def main_preset():
971971
diagnostics.fatal(e.message)
972972

973973
if args.show_presets:
974-
for name in sorted(preset_parser.preset_names(),
974+
for name in sorted(preset_parser.preset_names,
975975
key=lambda name: name.lower()):
976976
print(name)
977977
return 0

utils/build_swift/build_swift/presets.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
Swift preset parsing and handling functionality.
1212
"""
1313

14+
1415
from __future__ import absolute_import, unicode_literals
1516

1617
from collections import namedtuple
@@ -337,6 +338,7 @@ def get_preset(self, name, raw=False, vars=None):
337338

338339
return preset
339340

341+
@property
340342
def preset_names(self):
341343
"""Returns a list of all parsed preset names.
342344
"""

utils/build_swift/tests/test_driver_arguments.py

Lines changed: 23 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,14 @@
1010
import os
1111
import platform
1212
import sys
13-
import unittest
14-
from contextlib import contextmanager
15-
from io import StringIO
16-
17-
from swift_build_support.swift_build_support.SwiftBuildSupport import (
18-
get_all_preset_names, get_preset_options)
1913

2014
from . import expected_options as eo
21-
from .utils import BUILD_SCRIPT_IMPL_PATH, UTILS_PATH
15+
from . import utils
16+
from .utils import TestCase, UTILS_PATH, redirect_stdout
2217
from ..build_swift import argparse
2318
from ..build_swift import driver_arguments
2419
from ..build_swift import migration
20+
from ..build_swift.presets import PresetParser
2521

2622

2723
PRESETS_FILES = [
@@ -33,46 +29,22 @@ class ParserError(Exception):
3329
pass
3430

3531

36-
@contextmanager
37-
def redirect_stderr(stream=None):
38-
stream = stream or StringIO()
39-
old_stderr, sys.stderr = sys.stderr, stream
40-
try:
41-
yield stream
42-
finally:
43-
sys.stderr = old_stderr
44-
45-
46-
@contextmanager
47-
def redirect_stdout(stream=None):
48-
stream = stream or StringIO()
49-
old_stdout, sys.stdout = sys.stdout, stream
50-
try:
51-
yield stream
52-
finally:
53-
sys.stdout = old_stdout
54-
55-
56-
def _load_all_presets(presets_files):
57-
preset_names = get_all_preset_names(presets_files)
32+
def _load_all_presets(preset_files):
33+
parser = PresetParser()
34+
parser.read(preset_files)
5835

5936
# Hack to filter out mixins which are not expected to be valid presets
60-
preset_names = [n for n in preset_names if not n.startswith('mixin')]
61-
62-
substitutions = {
63-
'install_destdir': '/tmp/install',
64-
'install_symroot': '/tmp/symroot',
65-
'installable_package': '/tmp/xcode-xyz-root.tar.gz',
66-
}
37+
preset_names = [
38+
name for name in parser.preset_names
39+
if not name.startswith('mixin')
40+
]
6741

6842
presets = dict()
6943
for name in preset_names:
70-
try:
71-
# Attempt to parse preset
72-
presets[name] = get_preset_options(substitutions,
73-
presets_files, name)
74-
except SystemExit:
75-
continue
44+
preset = parser.get_preset(name, raw=True)
45+
args = migration.migrate_swift_sdks(preset.format_args())
46+
47+
presets[name] = args
7648

7749
return presets
7850

@@ -351,15 +323,8 @@ def test(self):
351323
return test
352324

353325

354-
class TestDriverArgumentParser(unittest.TestCase):
355-
356-
__metaclass__ = TestDriverArgumentParserMeta
357-
358-
@contextmanager
359-
def _quiet_output(self):
360-
with open(os.devnull, 'w') as devnull:
361-
with redirect_stderr(devnull), redirect_stdout(devnull):
362-
yield
326+
@utils.add_metaclass(TestDriverArgumentParserMeta)
327+
class TestDriverArgumentParser(TestCase):
363328

364329
def _parse_args(self, args):
365330
try:
@@ -372,8 +337,9 @@ def _check_impl_args(self, namespace):
372337
assert hasattr(namespace, 'build_script_impl_args')
373338

374339
try:
375-
migration.check_impl_args(BUILD_SCRIPT_IMPL_PATH,
376-
namespace.build_script_impl_args)
340+
migration.check_impl_args(
341+
utils.BUILD_SCRIPT_IMPL_PATH,
342+
namespace.build_script_impl_args)
377343
except (SystemExit, ValueError) as e:
378344
raise ParserError('failed to parse impl arguments: ' +
379345
str(namespace.build_script_impl_args), e)
@@ -382,7 +348,7 @@ def parse_args_and_unknown_args(self, args, namespace=None):
382348
if namespace is None:
383349
namespace = argparse.Namespace()
384350

385-
with self._quiet_output():
351+
with self.quietOutput():
386352
try:
387353
namespace, unknown_args = (
388354
super(self.parser.__class__, self.parser).parse_known_args(
@@ -396,32 +362,23 @@ def parse_args_and_unknown_args(self, args, namespace=None):
396362
return namespace, unknown_args
397363

398364
def parse_args(self, args, namespace=None):
399-
namespace, unknown_args = self.parse_args_and_unknown_args(args,
400-
namespace)
365+
namespace, unknown_args = self.parse_args_and_unknown_args(
366+
args, namespace)
401367

402368
if unknown_args:
403369
raise ParserError('unknown arguments: ' + str(unknown_args))
404370

405371
return namespace
406372

407373
def parse_default_args(self, args, check_impl_args=False):
408-
with self._quiet_output():
374+
with self.quietOutput():
409375
namespace = self._parse_args(args)
410376

411377
if check_impl_args:
412378
self._check_impl_args(namespace)
413379

414380
return namespace
415381

416-
@contextmanager
417-
def assertNotRaises(self, exception):
418-
assert issubclass(exception, BaseException)
419-
420-
try:
421-
yield
422-
except exception as e:
423-
self.fail(str(e))
424-
425382
def setUp(self):
426383
self.parser = driver_arguments.create_argument_parser()
427384

utils/build_swift/tests/test_presets.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ def __new__(cls, name, bases, attrs):
131131
preset_parser.read(PRESET_FILES)
132132

133133
# Generate tests for each preset
134-
for preset_name in preset_parser.preset_names():
134+
for preset_name in preset_parser.preset_names:
135135
test_name = 'test_get_preset_' + preset_name
136136
attrs[test_name] = cls.generate_get_preset_test(
137137
preset_parser, preset_name)
@@ -277,5 +277,5 @@ def test_preset_names(self):
277277
parser.read_string('[preset: bar]')
278278
parser.read_string('[preset: baz]')
279279

280-
self.assertEqual(set(parser.preset_names()),
280+
self.assertEqual(set(parser.preset_names),
281281
set(['foo', 'bar', 'baz']))

utils/swift_build_support/swift_build_support/SwiftBuildSupport.py

Lines changed: 0 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,8 @@
1010

1111
from __future__ import print_function
1212

13-
try:
14-
# Python 2
15-
import ConfigParser
16-
except ImportError:
17-
# Python 3
18-
import configparser as ConfigParser
19-
2013
import os
2114

22-
from . import diagnostics
23-
2415

2516
HOME = os.environ.get("HOME", "/")
2617

@@ -86,123 +77,3 @@ def _get_default_swift_repo_name():
8677
# directory name that is used.
8778
SWIFT_REPO_NAME = os.environ.get(
8879
"SWIFT_REPO_NAME", _get_default_swift_repo_name())
89-
90-
91-
def _load_preset_files_impl(preset_file_names, substitutions={}):
92-
config = ConfigParser.SafeConfigParser(substitutions, allow_no_value=True)
93-
if config.read(preset_file_names) == []:
94-
diagnostics.fatal(
95-
"preset file not found (tried " + str(preset_file_names) + ")")
96-
return config
97-
98-
99-
_PRESET_PREFIX = "preset: "
100-
101-
102-
def _get_preset_options_impl(config, substitutions, preset_name):
103-
section_name = _PRESET_PREFIX + preset_name
104-
if section_name not in config.sections():
105-
return (None, None, None)
106-
107-
build_script_opts = []
108-
build_script_impl_opts = []
109-
missing_opts = []
110-
dash_dash_seen = False
111-
112-
for o in config.options(section_name):
113-
try:
114-
a = config.get(section_name, o)
115-
except ConfigParser.InterpolationMissingOptionError as e:
116-
# e.reference contains the correctly formatted option
117-
missing_opts.append(e.reference)
118-
continue
119-
120-
if not a:
121-
a = ""
122-
123-
if o in substitutions:
124-
continue
125-
126-
opt = None
127-
if o == "mixin-preset":
128-
# Split on newlines and filter out empty lines.
129-
mixins = filter(None, [m.strip() for m in a.splitlines()])
130-
for mixin in mixins:
131-
(base_build_script_opts,
132-
base_build_script_impl_opts,
133-
base_missing_opts) = \
134-
_get_preset_options_impl(config, substitutions, mixin)
135-
build_script_opts += base_build_script_opts
136-
build_script_impl_opts += base_build_script_impl_opts
137-
missing_opts += base_missing_opts
138-
elif o == "dash-dash":
139-
dash_dash_seen = True
140-
elif a == "":
141-
opt = "--" + o
142-
else:
143-
opt = "--" + o + "=" + a
144-
145-
if opt:
146-
if not dash_dash_seen:
147-
build_script_opts.append(opt)
148-
else:
149-
build_script_impl_opts.append(opt)
150-
151-
return (build_script_opts, build_script_impl_opts, missing_opts)
152-
153-
154-
def get_preset_options(substitutions, preset_file_names, preset_name):
155-
config = _load_preset_files_impl(preset_file_names, substitutions)
156-
157-
(build_script_opts, build_script_impl_opts, missing_opts) = \
158-
_get_preset_options_impl(config, substitutions, preset_name)
159-
if not build_script_opts and not build_script_impl_opts:
160-
diagnostics.fatal("preset '" + preset_name + "' not found")
161-
if missing_opts:
162-
diagnostics.fatal("missing option(s) for preset '" + preset_name +
163-
"': " + ", ".join(missing_opts))
164-
165-
# Migrate 'swift-sdks' parameter to 'stdlib-deployment-targets'
166-
swift_sdks_opts = [opt for opt in build_script_impl_opts
167-
if opt.startswith("--swift-sdks")]
168-
try:
169-
swift_sdks_opt = swift_sdks_opts[-1]
170-
except IndexError:
171-
swift_sdks_opt = None
172-
173-
if swift_sdks_opt is not None:
174-
sdks_to_configure = swift_sdks_opt.split("=")[1].split(";")
175-
tgts = []
176-
# Expand SDKs in to their deployment targets
177-
from swift_build_support.swift_build_support.targets \
178-
import StdlibDeploymentTarget
179-
for sdk in sdks_to_configure:
180-
if sdk == "OSX":
181-
tgts += StdlibDeploymentTarget.OSX.targets
182-
elif sdk == "IOS":
183-
tgts += StdlibDeploymentTarget.iOS.targets
184-
elif sdk == "IOS_SIMULATOR":
185-
tgts += StdlibDeploymentTarget.iOSSimulator.targets
186-
elif sdk == "TVOS":
187-
tgts += StdlibDeploymentTarget.AppleTV.targets
188-
elif sdk == "TVOS_SIMULATOR":
189-
tgts += StdlibDeploymentTarget.AppleTVSimulator.targets
190-
elif sdk == "WATCHOS":
191-
tgts += StdlibDeploymentTarget.AppleWatch.targets
192-
elif sdk == "WATCHOS_SIMULATOR":
193-
tgts += StdlibDeploymentTarget.AppleWatchSimulator.targets
194-
195-
build_script_opts.append("--stdlib-deployment-targets=" +
196-
" ".join([tgt.name for tgt in tgts]))
197-
198-
# Filter the swift-sdks parameter
199-
build_script_impl_opts = [opt for opt in build_script_impl_opts
200-
if not opt.startswith("--swift-sdks")]
201-
202-
return build_script_opts + ["--"] + build_script_impl_opts
203-
204-
205-
def get_all_preset_names(preset_file_names):
206-
config = _load_preset_files_impl(preset_file_names)
207-
return [name[len(_PRESET_PREFIX):] for name in config.sections()
208-
if name.startswith(_PRESET_PREFIX)]

0 commit comments

Comments
 (0)