diff options
Diffstat (limited to 'script/scons')
| -rwxr-xr-x[-rw-r--r--] | script/scons | 113 | 
1 files changed, 58 insertions, 55 deletions
diff --git a/script/scons b/script/scons index fe9d724..1d9595e 100644..100755 --- a/script/scons +++ b/script/scons @@ -2,7 +2,7 @@  #  # SCons - a Software Constructor  # -# 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 @@ -25,22 +25,30 @@  from __future__ import print_function -__revision__ = "src/script/scons.py 74b2c53bc42290e911b334a6b44f187da698a668 2017/11/14 13:16:53 bdbaddog" +__revision__ = "src/script/scons.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan" -__version__ = "3.0.1" +__version__ = "3.1.1" -__build__ = "74b2c53bc42290e911b334a6b44f187da698a668" +__build__ = "72ae09dc35ac2626f8ff711d8c4b30b6138e08e3" -__buildsys__ = "hpmicrodog" +__buildsys__ = "octodog" -__date__ = "2017/11/14 13:16:53" +__date__ = "2019-08-08 14:50:06" -__developer__ = "bdbaddog" +__developer__ = "bdeegan" + +# This is the entry point to the SCons program. +# The only job of this script is to work out where the guts of the program +# could be and import them, where the real work begins. +# SCons can be invoked several different ways +# - from an installed location +# - from a "local install" copy +# - from a source tree, which has a different dir struture than the other two +# Try to account for all those possibilities.  import os  import sys -  ##############################################################################  # BEGIN STANDARD SCons SCRIPT HEADER  # @@ -50,57 +58,53 @@ import sys  # should also change other scripts that use this same header.  ############################################################################## -# Strip the script directory from sys.path() so on case-insensitive -# (WIN32) systems Python doesn't think that the "scons" script is the -# "SCons" package.  Replace it with our own library directories -# (version-specific first, in case they installed by hand there, -# followed by generic) so we pick up the right version of the build -# engine modules if they're in either directory. - - +# compatibility check  if (3,0,0) < sys.version_info < (3,5,0) or sys.version_info < (2,7,0):      msg = "scons: *** SCons version %s does not run under Python version %s.\n\ -Python < 3.5 is not yet supported.\n" +Python 2.7 or >= 3.5 is required.\n"      sys.stderr.write(msg % (__version__, sys.version.split()[0]))      sys.exit(1) - +# Strip the script directory from sys.path so on case-insensitive +# (WIN32) systems Python doesn't think that the "scons" script is the +# "SCons" package.  script_dir = os.path.dirname(os.path.realpath(__file__)) - -if script_dir in sys.path: -    sys.path.remove(script_dir) +script_path = os.path.realpath(os.path.dirname(__file__)) +if script_path in sys.path: +    sys.path.remove(script_path)  libs = []  if "SCONS_LIB_DIR" in os.environ:      libs.append(os.environ["SCONS_LIB_DIR"]) -# - running from source takes priority (since 2.3.2), excluding SCONS_LIB_DIR settings -script_path = os.path.abspath(os.path.dirname(__file__)) -source_path = os.path.join(script_path, '..', 'engine') -libs.append(source_path) +# running from source takes 2nd priority (since 2.3.2), following SCONS_LIB_DIR +source_path = os.path.join(script_path, os.pardir, 'engine') +if os.path.isdir(source_path): +    libs.append(source_path) +# add local-install locations  local_version = 'scons-local-' + __version__  local = 'scons-local'  if script_dir:      local_version = os.path.join(script_dir, local_version)      local = os.path.join(script_dir, local) -libs.append(os.path.abspath(local_version)) -libs.append(os.path.abspath(local)) +if os.path.isdir(local_version): +    libs.append(os.path.abspath(local_version)) +if os.path.isdir(local): +    libs.append(os.path.abspath(local))  scons_version = 'scons-%s' % __version__  # preferred order of scons lookup paths  prefs = [] - -# - running from egg check +# if we can find package information, use it  try:      import pkg_resources  except ImportError:      pass  else: -    # when running from an egg add the egg's directory      try:          d = pkg_resources.get_distribution('scons')      except pkg_resources.DistributionNotFound: @@ -109,18 +113,18 @@ else:          prefs.append(d.location)  if sys.platform == 'win32': -    # sys.prefix is (likely) C:\Python*; -    # check only C:\Python*. +    # Use only sys.prefix on Windows      prefs.append(sys.prefix)      prefs.append(os.path.join(sys.prefix, 'Lib', 'site-packages'))  else:      # On other (POSIX) platforms, things are more complicated due to -    # the variety of path names and library locations.  Try to be smart -    # about it. +    # the variety of path names and library locations. +    # Build up some possibilities, then transform them into candidates +    temp = []      if script_dir == 'bin':          # script_dir is `pwd`/bin;          # check `pwd`/lib/scons*. -        prefs.append(os.getcwd()) +        temp.append(os.getcwd())      else:          if script_dir == '.' or script_dir == '':              script_dir = os.getcwd() @@ -128,42 +132,41 @@ else:          if tail == "bin":              # script_dir is /foo/bin;              # check /foo/lib/scons*. -            prefs.append(head) +            temp.append(head)      head, tail = os.path.split(sys.prefix)      if tail == "usr":          # sys.prefix is /foo/usr;          # check /foo/usr/lib/scons* first,          # then /foo/usr/local/lib/scons*. -        prefs.append(sys.prefix) -        prefs.append(os.path.join(sys.prefix, "local")) +        temp.append(sys.prefix) +        temp.append(os.path.join(sys.prefix, "local"))      elif tail == "local":          h, t = os.path.split(head)          if t == "usr":              # sys.prefix is /foo/usr/local;              # check /foo/usr/local/lib/scons* first,              # then /foo/usr/lib/scons*. -            prefs.append(sys.prefix) -            prefs.append(head) +            temp.append(sys.prefix) +            temp.append(head)          else:              # sys.prefix is /foo/local;              # check only /foo/local/lib/scons*. -            prefs.append(sys.prefix) +            temp.append(sys.prefix)      else:          # sys.prefix is /foo (ends in neither /usr or /local);          # check only /foo/lib/scons*. -        prefs.append(sys.prefix) +        temp.append(sys.prefix) + +    # suffix these to add to our original prefs: +    prefs.extend([os.path.join(x, 'lib') for x in temp]) +    prefs.extend([os.path.join(x, 'lib', 'python' + sys.version[:3], +                               'site-packages') for x in temp]) -    temp = [os.path.join(x, 'lib') for x in prefs] -    temp.extend([os.path.join(x, -                                           'lib', -                                           'python' + sys.version[:3], -                                           'site-packages') for x in prefs]) -    prefs = temp      # Add the parent directory of the current python's library to the -    # preferences.  On SuSE-91/AMD64, for example, this is /usr/lib64, -    # not /usr/lib. +    # preferences.  This picks up differences between, e.g., lib and lib64, +    # and finds the base location in case of a non-copying virtualenv.      try:          libpath = os.__file__      except AttributeError: @@ -177,9 +180,9 @@ else:          prefs.append(libpath)  # Look first for 'scons-__version__' in all of our preference libs, -# then for 'scons'. -libs.extend([os.path.join(x, scons_version) for x in prefs]) -libs.extend([os.path.join(x, 'scons') for x in prefs]) +# then for 'scons'.  Skip paths that do not exist. +libs.extend([os.path.join(x, scons_version) for x in prefs if os.path.isdir(x)]) +libs.extend([os.path.join(x, 'scons') for x in prefs if os.path.isdir(x)])  sys.path = libs + sys.path @@ -191,9 +194,9 @@ if __name__ == "__main__":      try:          import SCons.Script      except ImportError: -        print("SCons import failed. Unable to find engine files in:") +        sys.stderr.write("SCons import failed. Unable to find engine files in:\n")          for path in libs: -            print("  {}".format(path)) +            sys.stderr.write("  {}\n".format(path))          raise      # this does all the work, and calls sys.exit  | 
