diff options
Diffstat (limited to 'src/engine/SCons/Builder.py')
| -rw-r--r-- | src/engine/SCons/Builder.py | 37 | 
1 files changed, 28 insertions, 9 deletions
diff --git a/src/engine/SCons/Builder.py b/src/engine/SCons/Builder.py index 9cb0f86..7777436 100644 --- a/src/engine/SCons/Builder.py +++ b/src/engine/SCons/Builder.py @@ -77,7 +77,7 @@ There are the following methods for internal use within this module:  """  # -# Copyright (c) 2001 - 2017 The SCons Foundation +# Copyright (c) 2001 - 2019 The SCons Foundation  #  # Permission is hereby granted, free of charge, to any person obtaining  # a copy of this software and associated documentation files (the @@ -98,7 +98,7 @@ There are the following methods for internal use within this module:  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -__revision__ = "src/engine/SCons/Builder.py rel_3.0.0:4395:8972f6a2f699 2017/09/18 12:59:24 bdbaddog" +__revision__ = "src/engine/SCons/Builder.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"  import collections @@ -274,7 +274,7 @@ def Builder(**kw):      result = BuilderBase(**kw) -    if not composite is None: +    if composite is not None:          result = CompositeBuilder(result, composite)      return result @@ -291,7 +291,14 @@ def _node_errors(builder, env, tlist, slist):          if t.side_effect:              raise UserError("Multiple ways to build the same target were specified for: %s" % t)          if t.has_explicit_builder(): -            if not t.env is None and not t.env is env: +            # Check for errors when the environments are different +            # No error if environments are the same Environment instance +            if (t.env is not None and t.env is not env and +                    # Check OverrideEnvironment case - no error if wrapped Environments +                    # are the same instance, and overrides lists match +                    not (getattr(t.env, '__subject', 0) is getattr(env, '__subject', 1) and +                         getattr(t.env, 'overrides', 0) == getattr(env, 'overrides', 1) and +                         not builder.multi)):                  action = t.builder.action                  t_contents = t.builder.action.get_contents(tlist, slist, t.env)                  contents = builder.action.get_contents(tlist, slist, env) @@ -300,7 +307,10 @@ def _node_errors(builder, env, tlist, slist):                      msg = "Two different environments were specified for target %s,\n\tbut they appear to have the same action: %s" % (t, action.genstring(tlist, slist, t.env))                      SCons.Warnings.warn(SCons.Warnings.DuplicateEnvironmentWarning, msg)                  else: -                    msg = "Two environments with different actions were specified for the same target: %s\n(action 1: %s)\n(action 2: %s)" % (t,t_contents.decode('utf-8'),contents.decode('utf-8')) +                    try: +                        msg = "Two environments with different actions were specified for the same target: %s\n(action 1: %s)\n(action 2: %s)" % (t,t_contents.decode('utf-8'),contents.decode('utf-8')) +                    except UnicodeDecodeError: +                        msg = "Two environments with different actions were specified for the same target: %s"%t                      raise UserError(msg)              if builder.multi:                  if t.builder != builder: @@ -414,7 +424,7 @@ class BuilderBase(object):          if name:              self.name = name          self.executor_kw = {} -        if not chdir is _null: +        if chdir is not _null:              self.executor_kw['chdir'] = chdir          self.is_explicit = is_explicit @@ -544,8 +554,10 @@ class BuilderBase(object):              result = []              if target is None: target = [None]*len(source)              for tgt, src in zip(target, source): -                if not tgt is None: tgt = [tgt] -                if not src is None: src = [src] +                if tgt is not None: +                    tgt = [tgt] +                if src is not None: +                    src = [src]                  result.extend(self._execute(env, tgt, src, overwarn))              return SCons.Node.NodeList(result) @@ -553,6 +565,13 @@ class BuilderBase(object):          tlist, slist = self._create_nodes(env, target, source) +        # If there is more than one target ensure that if we need to reset +        # the implicit list to new scan of dependency all targets implicit lists +        # are cleared. (SCons GH Issue #2811 and MongoDB SERVER-33111) +        if len(tlist) > 1: +            for t in tlist: +                t.target_peers = tlist +          # Check for errors with the specified target/source lists.          _node_errors(self, env, tlist, slist) @@ -734,7 +753,7 @@ class BuilderBase(object):          for s in SCons.Util.flatten(source):              if SCons.Util.is_String(s):                  match_suffix = match_src_suffix(env.subst(s)) -                if not match_suffix and not '.' in s: +                if not match_suffix and '.' not in s:                      src_suf = self.get_src_suffix(env)                      s = self._adjustixes(s, None, src_suf)[0]              else:  | 
