scons.py
上传用户:market2
上传日期:2018-11-18
资源大小:18786k
文件大小:6k
源码类别:

外挂编程

开发平台:

Windows_Unix

  1. #! /usr/bin/env python
  2. #
  3. # SCons - a Software Constructor
  4. #
  5. # Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation
  6. #
  7. # Permission is hereby granted, free of charge, to any person obtaining
  8. # a copy of this software and associated documentation files (the
  9. # "Software"), to deal in the Software without restriction, including
  10. # without limitation the rights to use, copy, modify, merge, publish,
  11. # distribute, sublicense, and/or sell copies of the Software, and to
  12. # permit persons to whom the Software is furnished to do so, subject to
  13. # the following conditions:
  14. #
  15. # The above copyright notice and this permission notice shall be included
  16. # in all copies or substantial portions of the Software.
  17. #
  18. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
  19. # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  20. # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  21. # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  22. # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  23. # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  24. # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  25. #
  26. __revision__ = "src/script/scons.py 3057 2008/06/09 22:21:00 knight"
  27. __version__ = "0.98.5"
  28. __build__ = "r3057"
  29. __buildsys__ = "bangkok"
  30. __date__ = "2008/06/09 22:21:00"
  31. __developer__ = "knight"
  32. import os
  33. import os.path
  34. import sys
  35. ##############################################################################
  36. # BEGIN STANDARD SCons SCRIPT HEADER
  37. #
  38. # This is the cut-and-paste logic so that a self-contained script can
  39. # interoperate correctly with different SCons versions and installation
  40. # locations for the engine.  If you modify anything in this section, you
  41. # should also change other scripts that use this same header.
  42. ##############################################################################
  43. # Strip the script directory from sys.path() so on case-insensitive
  44. # (WIN32) systems Python doesn't think that the "scons" script is the
  45. # "SCons" package.  Replace it with our own library directories
  46. # (version-specific first, in case they installed by hand there,
  47. # followed by generic) so we pick up the right version of the build
  48. # engine modules if they're in either directory.
  49. script_dir = sys.path[0]
  50. if script_dir == "":
  51.     script_dir = "."
  52. script_dir = os.path.join(script_dir, "..", "..")
  53. os.chdir(script_dir)
  54. if script_dir in sys.path:
  55.     sys.path.remove(script_dir)
  56. libs = []
  57. if os.environ.has_key("SCONS_LIB_DIR"):
  58.     libs.append(os.environ["SCONS_LIB_DIR"])
  59. local = 'scons-local-' + __version__
  60. if script_dir:
  61.     local = os.path.join(script_dir, local)
  62. libs.append(os.path.abspath(local))
  63. scons_version = 'scons-%s' % __version__
  64. prefs = []
  65. if sys.platform == 'win32':
  66.     # sys.prefix is (likely) C:Python*;
  67.     # check only C:Python*.
  68.     prefs.append(sys.prefix)
  69.     prefs.append(os.path.join(sys.prefix, 'Lib', 'site-packages'))
  70. else:
  71.     # On other (POSIX) platforms, things are more complicated due to
  72.     # the variety of path names and library locations.  Try to be smart
  73.     # about it.
  74.     if script_dir == 'bin':
  75.         # script_dir is `pwd`/bin;
  76.         # check `pwd`/lib/scons*.
  77.         prefs.append(os.getcwd())
  78.     else:
  79.         if script_dir == '.' or script_dir == '':
  80.             script_dir = os.getcwd()
  81.         head, tail = os.path.split(script_dir)
  82.         if tail == "bin":
  83.             # script_dir is /foo/bin;
  84.             # check /foo/lib/scons*.
  85.             prefs.append(head)
  86.     head, tail = os.path.split(sys.prefix)
  87.     if tail == "usr":
  88.         # sys.prefix is /foo/usr;
  89.         # check /foo/usr/lib/scons* first,
  90.         # then /foo/usr/local/lib/scons*.
  91.         prefs.append(sys.prefix)
  92.         prefs.append(os.path.join(sys.prefix, "local"))
  93.     elif tail == "local":
  94.         h, t = os.path.split(head)
  95.         if t == "usr":
  96.             # sys.prefix is /foo/usr/local;
  97.             # check /foo/usr/local/lib/scons* first,
  98.             # then /foo/usr/lib/scons*.
  99.             prefs.append(sys.prefix)
  100.             prefs.append(head)
  101.         else:
  102.             # sys.prefix is /foo/local;
  103.             # check only /foo/local/lib/scons*.
  104.             prefs.append(sys.prefix)
  105.     else:
  106.         # sys.prefix is /foo (ends in neither /usr or /local);
  107.         # check only /foo/lib/scons*.
  108.         prefs.append(sys.prefix)
  109.     temp = map(lambda x: os.path.join(x, 'lib'), prefs)
  110.     temp.extend(map(lambda x: os.path.join(x,
  111.                                            'lib',
  112.                                            'python' + sys.version[:3],
  113.                                            'site-packages'),
  114.                            prefs))
  115.     prefs = temp
  116.     # Add the parent directory of the current python's library to the
  117.     # preferences.  On SuSE-91/AMD64, for example, this is /usr/lib64,
  118.     # not /usr/lib.
  119.     try:
  120.         libpath = os.__file__
  121.     except AttributeError:
  122.         pass
  123.     else:
  124.         while libpath:
  125.             libpath, tail = os.path.split(libpath)
  126.             if tail[:6] == "python":
  127.                 break
  128.         if libpath:
  129.             # Python library is in /usr/libfoo/python*;
  130.             # check /usr/libfoo/scons*.
  131.             prefs.append(libpath)
  132. # Look first for 'scons-__version__' in all of our preference libs,
  133. # then for 'scons'.
  134. libs.extend(map(lambda x: os.path.join(x, scons_version), prefs))
  135. libs.extend(map(lambda x: os.path.join(x, 'scons'), prefs))
  136. sys.path = libs + sys.path
  137. ##############################################################################
  138. # END STANDARD SCons SCRIPT HEADER
  139. ##############################################################################
  140. if __name__ == "__main__":
  141.     import SCons.Script
  142.     SCons.Script.main()