| Index: pylib/gyp/xcodeproj_file.py
|
| diff --git a/pylib/gyp/xcodeproj_file.py b/pylib/gyp/xcodeproj_file.py
|
| index d08b7f777002f02e260ad9ffffa1816f042dba49..353997a8dbe7d93cee66496cf839777f0744ba31 100644
|
| --- a/pylib/gyp/xcodeproj_file.py
|
| +++ b/pylib/gyp/xcodeproj_file.py
|
| @@ -154,6 +154,10 @@ except ImportError:
|
| import sha
|
| _new_sha1 = sha.new
|
|
|
| +try:
|
| + basestring = basestring
|
| +except NameError:
|
| + basestring = str
|
|
|
| # See XCObject._EncodeString. This pattern is used to determine when a string
|
| # can be printed unquoted. Strings that match this pattern may be printed
|
| @@ -314,7 +318,7 @@ class XCObject(object):
|
| """
|
|
|
| that = self.__class__(id=self.id, parent=self.parent)
|
| - for key, value in self._properties.iteritems():
|
| + for key, value in self._properties.items():
|
| is_strong = self._schema[key][2]
|
|
|
| if isinstance(value, XCObject):
|
| @@ -324,8 +328,7 @@ class XCObject(object):
|
| that._properties[key] = new_value
|
| else:
|
| that._properties[key] = value
|
| - elif isinstance(value, str) or isinstance(value, unicode) or \
|
| - isinstance(value, int):
|
| + elif isinstance(value, basestring) or isinstance(value, int):
|
| that._properties[key] = value
|
| elif isinstance(value, list):
|
| if is_strong:
|
| @@ -449,10 +452,10 @@ class XCObject(object):
|
| # is 160 bits. Instead of throwing out 64 bits of the digest, xor them
|
| # into the portion that gets used.
|
| assert hash.digest_size % 4 == 0
|
| - digest_int_count = hash.digest_size / 4
|
| + digest_int_count = hash.digest_size // 4
|
| digest_ints = struct.unpack('>' + 'I' * digest_int_count, hash.digest())
|
| id_ints = [0, 0, 0]
|
| - for index in xrange(0, digest_int_count):
|
| + for index in range(0, digest_int_count):
|
| id_ints[index % 3] ^= digest_ints[index]
|
| self.id = '%08X%08X%08X' % tuple(id_ints)
|
|
|
| @@ -475,7 +478,7 @@ class XCObject(object):
|
| """Returns a list of all of this object's owned (strong) children."""
|
|
|
| children = []
|
| - for property, attributes in self._schema.iteritems():
|
| + for property, attributes in self._schema.items():
|
| (is_list, property_type, is_strong) = attributes[0:3]
|
| if is_strong and property in self._properties:
|
| if not is_list:
|
| @@ -603,7 +606,12 @@ class XCObject(object):
|
| comment = value.Comment()
|
| elif isinstance(value, str):
|
| printable += self._EncodeString(value)
|
| - elif isinstance(value, unicode):
|
| + # A python3 compatible way of saying isinstance(value, unicode).
|
| + # basestring is str in python3 so this is equivalent to the above isinstance.
|
| + # Thus if it failed above it will fail here.
|
| + # In python2 we test against str and unicode at this point. str has already
|
| + # failed in the above isinstance so we test against unicode.
|
| + elif isinstance(value, basestring):
|
| printable += self._EncodeString(value.encode('utf-8'))
|
| elif isinstance(value, int):
|
| printable += str(value)
|
| @@ -622,7 +630,7 @@ class XCObject(object):
|
| printable += end_tabs + ')'
|
| elif isinstance(value, dict):
|
| printable = '{' + sep
|
| - for item_key, item_value in sorted(value.iteritems()):
|
| + for item_key, item_value in sorted(value.items()):
|
| printable += element_tabs + \
|
| self._XCPrintableValue(tabs + 1, item_key, flatten_list) + ' = ' + \
|
| self._XCPrintableValue(tabs + 1, item_value, flatten_list) + ';' + \
|
| @@ -691,7 +699,7 @@ class XCObject(object):
|
| printable_value[0] == '"' and printable_value[-1] == '"':
|
| printable_value = printable_value[1:-1]
|
| printable += printable_key + ' = ' + printable_value + ';' + after_kv
|
| - except TypeError, e:
|
| + except TypeError as e:
|
| gyp.common.ExceptionAppend(e,
|
| 'while printing key "%s"' % key)
|
| raise
|
| @@ -730,7 +738,7 @@ class XCObject(object):
|
| self._XCKVPrint(file, 3, 'isa', self.__class__.__name__)
|
|
|
| # The remaining elements of an object dictionary are sorted alphabetically.
|
| - for property, value in sorted(self._properties.iteritems()):
|
| + for property, value in sorted(self._properties.items()):
|
| self._XCKVPrint(file, 3, property, value)
|
|
|
| # End the object.
|
| @@ -752,7 +760,7 @@ class XCObject(object):
|
| if properties is None:
|
| return
|
|
|
| - for property, value in properties.iteritems():
|
| + for property, value in properties.items():
|
| # Make sure the property is in the schema.
|
| if not property in self._schema:
|
| raise KeyError(property + ' not in ' + self.__class__.__name__)
|
| @@ -766,7 +774,7 @@ class XCObject(object):
|
| ' must be list, not ' + value.__class__.__name__)
|
| for item in value:
|
| if not isinstance(item, property_type) and \
|
| - not (item.__class__ == unicode and property_type == str):
|
| + not (isinstance(item, basestring) and property_type == str):
|
| # Accept unicode where str is specified. str is treated as
|
| # UTF-8-encoded.
|
| raise TypeError(
|
| @@ -774,7 +782,7 @@ class XCObject(object):
|
| ' must be ' + property_type.__name__ + ', not ' + \
|
| item.__class__.__name__)
|
| elif not isinstance(value, property_type) and \
|
| - not (value.__class__ == unicode and property_type == str):
|
| + not (isinstance(value, basestring) and property_type == str):
|
| # Accept unicode where str is specified. str is treated as
|
| # UTF-8-encoded.
|
| raise TypeError(
|
| @@ -788,8 +796,7 @@ class XCObject(object):
|
| self._properties[property] = value.Copy()
|
| else:
|
| self._properties[property] = value
|
| - elif isinstance(value, str) or isinstance(value, unicode) or \
|
| - isinstance(value, int):
|
| + elif isinstance(value, basestring) or isinstance(value, int):
|
| self._properties[property] = value
|
| elif isinstance(value, list):
|
| if is_strong:
|
| @@ -865,7 +872,7 @@ class XCObject(object):
|
|
|
| # TODO(mark): A stronger verification mechanism is needed. Some
|
| # subclasses need to perform validation beyond what the schema can enforce.
|
| - for property, attributes in self._schema.iteritems():
|
| + for property, attributes in self._schema.items():
|
| (is_list, property_type, is_strong, is_required) = attributes[0:4]
|
| if is_required and not property in self._properties:
|
| raise KeyError(self.__class__.__name__ + ' requires ' + property)
|
| @@ -875,7 +882,7 @@ class XCObject(object):
|
| overwrite properties that have already been set."""
|
|
|
| defaults = {}
|
| - for property, attributes in self._schema.iteritems():
|
| + for property, attributes in self._schema.items():
|
| (is_list, property_type, is_strong, is_required) = attributes[0:4]
|
| if is_required and len(attributes) >= 5 and \
|
| not property in self._properties:
|
| @@ -1426,8 +1433,8 @@ class XCFileLikeElement(XCHierarchicalElement):
|
| xche = self
|
| while xche != None and isinstance(xche, XCHierarchicalElement):
|
| xche_hashables = xche.Hashables()
|
| - for index in xrange(0, len(xche_hashables)):
|
| - hashables.insert(index, xche_hashables[index])
|
| + for index, xche_hashable in enumerate(xche_hashables):
|
| + hashables.insert(index, xche_hashable)
|
| xche = xche.parent
|
| return hashables
|
|
|
| @@ -2401,8 +2408,7 @@ class PBXNativeTarget(XCTarget):
|
| # The headers phase should come before the resources, sources, and
|
| # frameworks phases, if any.
|
| insert_at = len(self._properties['buildPhases'])
|
| - for index in xrange(0, len(self._properties['buildPhases'])):
|
| - phase = self._properties['buildPhases'][index]
|
| + for index, phase in enumerate(self._properties['buildPhases']):
|
| if isinstance(phase, PBXResourcesBuildPhase) or \
|
| isinstance(phase, PBXSourcesBuildPhase) or \
|
| isinstance(phase, PBXFrameworksBuildPhase):
|
| @@ -2422,8 +2428,7 @@ class PBXNativeTarget(XCTarget):
|
| # The resources phase should come before the sources and frameworks
|
| # phases, if any.
|
| insert_at = len(self._properties['buildPhases'])
|
| - for index in xrange(0, len(self._properties['buildPhases'])):
|
| - phase = self._properties['buildPhases'][index]
|
| + for index, phase in enumerate(self._properties['buildPhases']):
|
| if isinstance(phase, PBXSourcesBuildPhase) or \
|
| isinstance(phase, PBXFrameworksBuildPhase):
|
| insert_at = index
|
| @@ -2844,7 +2849,7 @@ class PBXProject(XCContainerPortal):
|
| # determine the sort order.
|
| return cmp(x_index, y_index)
|
|
|
| - for other_pbxproject, ref_dict in self._other_pbxprojects.iteritems():
|
| + for other_pbxproject, ref_dict in self._other_pbxprojects.items():
|
| # Build up a list of products in the remote project file, ordered the
|
| # same as the targets that produce them.
|
| remote_products = []
|
|
|