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

外挂编程

开发平台:

Windows_Unix

  1. """scons.Node.Alias
  2. Alias nodes.
  3. This creates a hash of global Aliases (dummy targets).
  4. """
  5. #
  6. # Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation
  7. #
  8. # Permission is hereby granted, free of charge, to any person obtaining
  9. # a copy of this software and associated documentation files (the
  10. # "Software"), to deal in the Software without restriction, including
  11. # without limitation the rights to use, copy, modify, merge, publish,
  12. # distribute, sublicense, and/or sell copies of the Software, and to
  13. # permit persons to whom the Software is furnished to do so, subject to
  14. # the following conditions:
  15. #
  16. # The above copyright notice and this permission notice shall be included
  17. # in all copies or substantial portions of the Software.
  18. #
  19. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
  20. # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  21. # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  22. # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  23. # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  24. # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  25. # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  26. #
  27. __revision__ = "src/engine/SCons/Node/Alias.py 3057 2008/06/09 22:21:00 knight"
  28. import string
  29. import UserDict
  30. import SCons.Errors
  31. import SCons.Node
  32. import SCons.Util
  33. class AliasNameSpace(UserDict.UserDict):
  34.     def Alias(self, name, **kw):
  35.         if isinstance(name, SCons.Node.Alias.Alias):
  36.             return name
  37.         try:
  38.             a = self[name]
  39.         except KeyError:
  40.             a = apply(SCons.Node.Alias.Alias, (name,), kw)
  41.             self[name] = a
  42.         return a
  43.     def lookup(self, name, **kw):
  44.         try:
  45.             return self[name]
  46.         except KeyError:
  47.             return None
  48. class AliasNodeInfo(SCons.Node.NodeInfoBase):
  49.     current_version_id = 1
  50.     field_list = ['csig']
  51.     def str_to_node(self, s):
  52.         return default_ans.Alias(s)
  53. class AliasBuildInfo(SCons.Node.BuildInfoBase):
  54.     current_version_id = 1
  55. class Alias(SCons.Node.Node):
  56.     NodeInfo = AliasNodeInfo
  57.     BuildInfo = AliasBuildInfo
  58.     def __init__(self, name):
  59.         SCons.Node.Node.__init__(self)
  60.         self.name = name
  61.     def str_for_display(self):
  62.         return '"' + self.__str__() + '"'
  63.     def __str__(self):
  64.         return self.name
  65.     def make_ready(self):
  66.         self.get_csig()
  67.     really_build = SCons.Node.Node.build
  68.     is_up_to_date = SCons.Node.Node.children_are_up_to_date
  69.     def is_under(self, dir):
  70.         # Make Alias nodes get built regardless of
  71.         # what directory scons was run from. Alias nodes
  72.         # are outside the filesystem:
  73.         return 1
  74.     def get_contents(self):
  75.         """The contents of an alias is the concatenation
  76.         of the content signatures of all its sources."""
  77.         childsigs = map(lambda n: n.get_csig(), self.children())
  78.         return string.join(childsigs, '')
  79.     def sconsign(self):
  80.         """An Alias is not recorded in .sconsign files"""
  81.         pass
  82.     #
  83.     #
  84.     #
  85.     def changed_since_last_build(self, target, prev_ni):
  86.         cur_csig = self.get_csig()
  87.         try:
  88.             return cur_csig != prev_ni.csig
  89.         except AttributeError:
  90.             return 1
  91.     def build(self):
  92.         """A "builder" for aliases."""
  93.         pass
  94.     def convert(self):
  95.         try: del self.builder
  96.         except AttributeError: pass
  97.         self.reset_executor()
  98.         self.build = self.really_build
  99.     def get_csig(self):
  100.         """
  101.         Generate a node's content signature, the digested signature
  102.         of its content.
  103.         node - the node
  104.         cache - alternate node to use for the signature cache
  105.         returns - the content signature
  106.         """
  107.         try:
  108.             return self.ninfo.csig
  109.         except AttributeError:
  110.             pass
  111.         contents = self.get_contents()
  112.         csig = SCons.Util.MD5signature(contents)
  113.         self.get_ninfo().csig = csig
  114.         return csig
  115. default_ans = AliasNameSpace()
  116. SCons.Node.arg2nodes_lookups.append(default_ans.lookup)