diff options
Diffstat (limited to 'engine/SCons/Script/SConscript.py')
| -rw-r--r-- | engine/SCons/Script/SConscript.py | 72 | 
1 files changed, 63 insertions, 9 deletions
diff --git a/engine/SCons/Script/SConscript.py b/engine/SCons/Script/SConscript.py index b366c4c..c0a75f2 100644 --- a/engine/SCons/Script/SConscript.py +++ b/engine/SCons/Script/SConscript.py @@ -6,7 +6,7 @@ files.  """  # -# 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 @@ -27,7 +27,7 @@ files.  # 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/Script/SConscript.py 74b2c53bc42290e911b334a6b44f187da698a668 2017/11/14 13:16:53 bdbaddog" +__revision__ = "src/engine/SCons/Script/SConscript.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"  import SCons  import SCons.Action @@ -153,6 +153,35 @@ def Return(*vars, **kw):  stack_bottom = '% Stack boTTom %' # hard to define a variable w/this name :) +def handle_missing_SConscript(f, must_exist=None): +    """Take appropriate action on missing file in SConscript() call. + +    Print a warning or raise an exception on missing file. +    On first warning, print a deprecation message. + +    Args: +        f (str): path of missing configuration file +        must_exist (bool): raise exception if file does not exist + +    Raises: +        UserError if 'must_exist' is True or if global +          SCons.Script._no_missing_sconscript is True. +    """ + +    if must_exist or (SCons.Script._no_missing_sconscript and must_exist is not False): +        msg = "Fatal: missing SConscript '%s'" % f.get_internal_path() +        raise SCons.Errors.UserError(msg) + +    if SCons.Script._warn_missing_sconscript_deprecated: +        msg = "Calling missing SConscript without error is deprecated.\n" + \ +              "Transition by adding must_exist=0 to SConscript calls.\n" + \ +              "Missing SConscript '%s'" % f.get_internal_path() +        SCons.Warnings.warn(SCons.Warnings.MissingSConscriptWarning, msg) +        SCons.Script._warn_missing_sconscript_deprecated = False +    else: +        msg = "Ignoring missing SConscript '%s'" % f.get_internal_path() +        SCons.Warnings.warn(SCons.Warnings.MissingSConscriptWarning, msg) +  def _SConscript(fs, *files, **kw):      top = fs.Top      sd = fs.SConstruct_dir.rdir() @@ -249,11 +278,12 @@ def _SConscript(fs, *files, **kw):                          pass                      try:                          try: -#                            _file_ = SCons.Util.to_str(_file_)                              if Main.print_time:                                  time1 = time.time() -                            exec(compile(_file_.read(), _file_.name, 'exec'), -                                 call_stack[-1].globals) +                            scriptdata = _file_.read() +                            scriptname = _file_.name +                            _file_.close() +                            exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)                          except SConscriptReturn:                              pass                      finally: @@ -264,8 +294,7 @@ def _SConscript(fs, *files, **kw):                          if old_file is not None:                              call_stack[-1].globals.update({__file__:old_file})                  else: -                    SCons.Warnings.warn(SCons.Warnings.MissingSConscriptWarning, -                             "Ignoring missing SConscript '%s'" % f.get_internal_path()) +                    handle_missing_SConscript(f, kw.get('must_exist', None))          finally:              SCons.Script.sconscript_reading = SCons.Script.sconscript_reading - 1 @@ -369,9 +398,9 @@ class SConsEnvironment(SCons.Environment.Base):          something like 3.2b1."""          version = version_string.split(' ')[0].split('.')          v_major = int(version[0]) -        v_minor = int(re.match('\d+', version[1]).group()) +        v_minor = int(re.match(r'\d+', version[1]).group())          if len(version) >= 3: -            v_revision = int(re.match('\d+', version[2]).group()) +            v_revision = int(re.match(r'\d+', version[2]).group())          else:              v_revision = 0          return v_major, v_minor, v_revision @@ -523,6 +552,31 @@ class SConsEnvironment(SCons.Environment.Base):              raise SCons.Errors.UserError("Import of non-existent variable '%s'"%x)      def SConscript(self, *ls, **kw): +        """Execute SCons configuration files. + +        Parameters: +            *ls (str or list): configuration file(s) to execute. + +        Keyword arguments: +            dirs (list): execute SConscript in each listed directory. +            name (str): execute script 'name' (used only with 'dirs'). +            exports (list or dict): locally export variables the +              called script(s) can import. +            variant_dir (str): mirror sources needed for the build in +             a variant directory to allow building in it. +            duplicate (bool): physically duplicate sources instead of just +              adjusting paths of derived files (used only with 'variant_dir') +              (default is True). +            must_exist (bool): fail if a requested script is missing +              (default is False, default is deprecated). + +        Returns: +            list of variables returned by the called script + +        Raises: +            UserError: a script is not found and such exceptions are enabled. +        """ +          if 'build_dir' in kw:              msg = """The build_dir keyword has been deprecated; use the variant_dir keyword instead."""              SCons.Warnings.warn(SCons.Warnings.DeprecatedBuildDirWarning, msg)  | 
