882 for m in self.modifiers: |
882 for m in self.modifiers: |
883 name = name + "." + m.name |
883 name = name + "." + m.name |
884 vars.append(m) |
884 vars.append(m) |
885 return [ BuildUnit(name=name, variants=vars) ] |
885 return [ BuildUnit(name=name, variants=vars) ] |
886 |
886 |
887 def isChildOf(self, progenitor, cache): |
887 def isDerivedFrom(self, progenitor, cache): |
888 r = False |
888 if self.name == progenitor: |
|
889 return True |
|
890 |
889 pname = self.extends |
891 pname = self.extends |
890 while pname is not None and pname is not '': |
892 while pname is not None and pname is not '': |
891 parent = cache.FindNamedVariant(pname) |
893 parent = cache.FindNamedVariant(pname) |
892 if parent is None: |
894 if parent is None: |
893 break |
895 break |
894 if parent.name == progenitor: |
896 if parent.name == progenitor: |
895 r = True |
897 return True |
896 break |
|
897 pname = parent.extends |
898 pname = parent.extends |
898 |
899 |
899 return r |
900 return False |
900 |
901 |
901 def __str__(self): |
902 def __str__(self): |
902 s = "<var name='%s' extends='%s'>\n" % (self.name, self.extends) |
903 s = "<var name='%s' extends='%s'>\n" % (self.name, self.extends) |
903 for op in self.ops: |
904 for op in self.ops: |
904 s += str(op) + '\n' |
905 s += str(op) + '\n' |
948 raise InvalidPropertyError() |
949 raise InvalidPropertyError() |
949 |
950 |
950 def Valid(self): |
951 def Valid(self): |
951 return self.name and self.meaning |
952 return self.name and self.meaning |
952 |
953 |
953 def GenerateBuildUnits(self, cache): |
954 def Resolve(self, cache): |
954 if not self.variants: |
955 if not self.variants: |
955 missing_variants = [] |
956 missing_variants = [] |
956 for r in self.varRefs: |
957 for r in self.varRefs: |
957 try: |
958 try: |
958 self.variants.append( r.Resolve(cache=cache) ) |
959 self.variants.append( r.Resolve(cache=cache) ) |
960 missing_variants.append(r.ref) |
961 missing_variants.append(r.ref) |
961 |
962 |
962 if len(missing_variants) > 0: |
963 if len(missing_variants) > 0: |
963 raise MissingVariantException("Missing variants '%s'", " ".join(missing_variants)) |
964 raise MissingVariantException("Missing variants '%s'", " ".join(missing_variants)) |
964 |
965 |
|
966 def GenerateBuildUnits(self, cache): |
|
967 self.Resolve(cache) |
|
968 |
965 name = self.name |
969 name = self.name |
966 |
970 |
967 for v in self.modifiers: |
971 for v in self.modifiers: |
968 name = name + "." + v.name |
972 name = name + "." + v.name |
969 |
973 |
970 return [ BuildUnit(name=name, variants=self.variants + self.modifiers) ] |
974 return [ BuildUnit(name=name, variants=self.variants + self.modifiers) ] |
971 |
975 |
|
976 def isDerivedFrom(self, progenitor, cache): |
|
977 self.Resolve(cache) |
|
978 if len(self.variants) == 1: |
|
979 return self.variants[0].isDerivedFrom(progenitor,cache) |
|
980 else: |
|
981 return False |
972 |
982 |
973 class AliasRef(Reference): |
983 class AliasRef(Reference): |
974 |
984 |
975 def __init__(self, ref=None): |
985 def __init__(self, ref=None): |
976 Reference.__init__(self, ref) |
986 Reference.__init__(self, ref) |