diff options
author | Tobias Markmann <tm@ayena.de> | 2018-07-13 15:20:36 (GMT) |
---|---|---|
committer | Tobias Markmann <tm@ayena.de> | 2018-09-26 14:05:36 (GMT) |
commit | 1536284a15743f6ec41d3230177a24d245158a9d (patch) | |
tree | 21216d18d93ddfc620e6b36dc28428c5d5b71775 /3rdParty/SCons/scons-3.0.1/engine/SCons/EnvironmentValues.py | |
parent | 091f6e520694360a0407ab0cf3bb036fb461e6e3 (diff) | |
download | swift-1536284a15743f6ec41d3230177a24d245158a9d.zip swift-1536284a15743f6ec41d3230177a24d245158a9d.tar.bz2 |
Update SCons in 3rdParty from 2.4.0 to 3.0.1
This also has our scons patch in 3rdParty/SCons applied.
Test-Information:
Builds with unit tests on macOS 10.13.6.
Change-Id: I25d3662eeec27a76dab10d501ba46dc16f0bef4b
Diffstat (limited to '3rdParty/SCons/scons-3.0.1/engine/SCons/EnvironmentValues.py')
-rw-r--r-- | 3rdParty/SCons/scons-3.0.1/engine/SCons/EnvironmentValues.py | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/3rdParty/SCons/scons-3.0.1/engine/SCons/EnvironmentValues.py b/3rdParty/SCons/scons-3.0.1/engine/SCons/EnvironmentValues.py new file mode 100644 index 0000000..d94bf3a --- /dev/null +++ b/3rdParty/SCons/scons-3.0.1/engine/SCons/EnvironmentValues.py @@ -0,0 +1,98 @@ +import re + +_is_valid_var = re.compile(r'[_a-zA-Z]\w*$') + +_rm = re.compile(r'\$[()]') +_remove = re.compile(r'\$\([^\$]*(\$[^\)][^\$]*)*\$\)') + +# Regular expressions for splitting strings and handling substitutions, +# for use by the scons_subst() and scons_subst_list() functions: +# +# The first expression compiled matches all of the $-introduced tokens +# that we need to process in some way, and is used for substitutions. +# The expressions it matches are: +# +# "$$" +# "$(" +# "$)" +# "$variable" [must begin with alphabetic or underscore] +# "${any stuff}" +# +# The second expression compiled is used for splitting strings into tokens +# to be processed, and it matches all of the tokens listed above, plus +# the following that affect how arguments do or don't get joined together: +# +# " " [white space] +# "non-white-space" [without any dollar signs] +# "$" [single dollar sign] +# +_dollar_exps_str = r'\$[\$\(\)]|\$[_a-zA-Z][\.\w]*|\${[^}]*}' +_dollar_exps = re.compile(r'(%s)' % _dollar_exps_str) +_separate_args = re.compile(r'(%s|\s+|[^\s\$]+|\$)' % _dollar_exps_str) + +# This regular expression is used to replace strings of multiple white +# space characters in the string result from the scons_subst() function. +_space_sep = re.compile(r'[\t ]+(?![^{]*})') + +class ValueTypes(object): + """ + Enum to store what type of value the variable holds. + """ + UNKNOWN = 0 + STRING = 1 + CALLABLE = 2 + VARIABLE = 3 + + +class EnvironmentValue(object): + """ + Hold a single value. We're going to cache parsed version of the file + We're going to keep track of variables which feed into this values evaluation + """ + def __init__(self, value): + self.value = value + self.var_type = ValueTypes.UNKNOWN + + if callable(self.value): + self.var_type = ValueTypes.CALLABLE + else: + self.parse_value() + + + def parse_value(self): + """ + Scan the string and break into component values + """ + + try: + if '$' not in self.value: + self._parsed = self.value + self.var_type = ValueTypes.STRING + else: + # Now we need to parse the specified string + result = _dollar_exps.sub(sub_match, args) + print(result) + pass + except TypeError: + # likely callable? either way we don't parse + self._parsed = self.value + + def parse_trial(self): + """ + Try alternate parsing methods. + :return: + """ + parts = [] + for c in self.value: + pass + + + +class EnvironmentValues(object): + """ + A class to hold all the environment variables + """ + def __init__(self, **kw): + self._dict = {} + for k in kw: + self._dict[k] = EnvironmentValue(kw[k]) |