diff options
Diffstat (limited to 'src/engine/SCons/Util.py')
-rw-r--r-- | src/engine/SCons/Util.py | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/src/engine/SCons/Util.py b/src/engine/SCons/Util.py index 25cea2f..ea5d7f6 100644 --- a/src/engine/SCons/Util.py +++ b/src/engine/SCons/Util.py @@ -803,16 +803,34 @@ def scons_subst_list(strSubst, env, mode=SUBST_RAW, target=None, source=None, di if not self.in_strip or self.mode != SUBST_SIG: try: - y = self[-1][-1] + x + current_word = self[-1][-1] except IndexError: self.add_new_word(x) else: - literal1 = self.literal(self[-1][-1]) - literal2 = self.literal(x) - y = self.conv(y) - if is_String(y): - y = CmdStringHolder(y, literal1 or literal2) - self[-1][-1] = y + # All right, this is a hack and it should probably + # be refactored out of existence in the future. + # The issue is that we want to smoosh words together + # and make one file name that gets escaped if + # we're expanding something like foo$EXTENSION, + # but we don't want to smoosh them together if + # it's something like >$TARGET, because then we'll + # treat the '>' like it's part of the file name. + # So for now, just hard-code looking for the special + # command-line redirection characters... + try: + last_char = str(current_word)[-1] + except IndexError: + last_char = '\0' + if last_char in '<>|': + self.add_new_word(x) + else: + y = current_word + x + literal1 = self.literal(self[-1][-1]) + literal2 = self.literal(x) + y = self.conv(y) + if is_String(y): + y = CmdStringHolder(y, literal1 or literal2) + self[-1][-1] = y def add_new_word(self, x): if not self.in_strip or self.mode != SUBST_SIG: |