2805 lines
94 KiB
Diff
2805 lines
94 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
|
|
Date: Sun, 29 Dec 2024 15:20:28 +0100
|
|
Subject: [PATCH] Fix Python compat and remove six
|
|
|
|
Fix compatibility with Python 3.9 and remove shims for old Python.
|
|
|
|
Includes several patches from Fedora:
|
|
|
|
- https://src.fedoraproject.org/rpms/gyp/blob/6b8579b88ec60d56c890e672ef3e3d0bc126f6d4/f/gyp-python38.patch
|
|
- https://src.fedoraproject.org/rpms/gyp/blob/6b8579b88ec60d56c890e672ef3e3d0bc126f6d4/f/gyp-fix-cmake.patch
|
|
- https://src.fedoraproject.org/rpms/gyp/blob/6b8579b88ec60d56c890e672ef3e3d0bc126f6d4/f/gyp-python39.patch
|
|
- https://src.fedoraproject.org/rpms/gyp/blob/6b8579b88ec60d56c890e672ef3e3d0bc126f6d4/f/gyp-fips.patch
|
|
---
|
|
buildbot/buildbot_run.py | 2 -
|
|
gyptest.py | 2 -
|
|
pylib/gyp/MSVSNew.py | 28 +-
|
|
pylib/gyp/MSVSSettings.py | 16 +-
|
|
pylib/gyp/MSVSSettings_test.py | 5 +-
|
|
pylib/gyp/__init__.py | 10 +-
|
|
pylib/gyp/common.py | 7 +-
|
|
pylib/gyp/easy_xml.py | 6 +-
|
|
pylib/gyp/easy_xml_test.py | 5 +-
|
|
pylib/gyp/generator/analyzer.py | 2 -
|
|
pylib/gyp/generator/cmake.py | 13 +-
|
|
pylib/gyp/generator/dump_dependency_json.py | 2 -
|
|
pylib/gyp/generator/make.py | 4 +-
|
|
pylib/gyp/generator/msvs.py | 2 -
|
|
pylib/gyp/generator/msvs_test.py | 5 +-
|
|
pylib/gyp/generator/ninja.py | 12 +-
|
|
pylib/gyp/generator/xcode.py | 2 -
|
|
pylib/gyp/input.py | 64 ++---
|
|
pylib/gyp/mac_tool.py | 2 -
|
|
pylib/gyp/msvs_emulation.py | 21 +-
|
|
pylib/gyp/simple_copy.py | 14 +-
|
|
pylib/gyp/win_tool.py | 2 -
|
|
pylib/gyp/xcode_emulation.py | 2 -
|
|
pylib/gyp/xcodeproj_file.py | 45 +---
|
|
samples/samples | 2 -
|
|
.../gyptest-action.py | 2 -
|
|
.../gyptest-multiple-outputs.py | 2 -
|
|
test/actions/src/action_missing_name.gyp | 2 +-
|
|
test/analyzer/gyptest-analyzer.py | 2 -
|
|
test/arflags/gyptest-arflags.py | 2 -
|
|
.../gyptest-compiler-global-settings.py | 2 -
|
|
test/compiler-override/my_cc.py | 1 -
|
|
test/compiler-override/my_cxx.py | 1 -
|
|
test/compiler-override/my_ld.py | 1 -
|
|
test/compiler-override/my_nm.py | 1 -
|
|
test/compiler-override/my_readelf.py | 1 -
|
|
.../inheritance/gyptest-duplicates.py | 2 -
|
|
test/copies/gyptest-updir.py | 2 -
|
|
test/determinism/gyptest-solibs.py | 2 -
|
|
test/determinism/rule.py | 2 -
|
|
test/escaping/gyptest-colon.py | 2 -
|
|
test/generator-output/gyptest-mac-bundle.py | 2 -
|
|
test/ios/gyptest-extension.py | 2 -
|
|
test/ios/gyptest-per-config-settings.py | 2 -
|
|
test/ios/gyptest-watch.py | 2 -
|
|
test/lib/TestCmd.py | 246 +++---------------
|
|
test/lib/TestCommon.py | 7 +-
|
|
test/lib/TestGyp.py | 9 +-
|
|
test/lib/TestMac.py | 2 -
|
|
.../gyptest-shared-obj-install-path.py | 3 -
|
|
.../linux/ldflags-duplicates/check-ldflags.py | 2 -
|
|
test/mac/gyptest-app-assets-catalog.py | 2 -
|
|
test/mac/gyptest-app-error.py | 11 +-
|
|
test/mac/gyptest-app.py | 2 -
|
|
test/mac/gyptest-bundle-resources.py | 2 -
|
|
test/mac/gyptest-copies.py | 2 -
|
|
test/mac/gyptest-depend-on-bundle.py | 2 -
|
|
test/mac/gyptest-framework.py | 2 -
|
|
test/mac/gyptest-infoplist-process.py | 2 -
|
|
test/mac/gyptest-installname.py | 2 -
|
|
test/mac/gyptest-ldflags-passed-to-libtool.py | 2 -
|
|
test/mac/gyptest-loadable-module.py | 2 -
|
|
test/mac/gyptest-missing-cfbundlesignature.py | 2 -
|
|
test/mac/gyptest-non-strs-flattened-to-env.py | 2 -
|
|
test/mac/gyptest-postbuild-defaults.py | 2 -
|
|
test/mac/gyptest-postbuild-fail.py | 2 -
|
|
test/mac/gyptest-rebuild.py | 2 -
|
|
test/mac/gyptest-sdkroot.py | 2 -
|
|
test/mac/gyptest-sourceless-module.py | 2 -
|
|
test/mac/gyptest-strip-default.py | 2 -
|
|
test/mac/gyptest-strip.py | 2 -
|
|
test/mac/gyptest-swift-library.py | 2 -
|
|
test/mac/gyptest-xcode-env-order.py | 2 -
|
|
test/make/gyptest-noload.py | 3 -
|
|
.../basics/gyptest-make_global_settings.py | 2 -
|
|
.../env-wrapper/gyptest-wrapper.py | 2 -
|
|
.../gyptest-make_global_settings.py | 2 -
|
|
.../full-toolchain/my_nm.py | 1 -
|
|
.../full-toolchain/my_readelf.py | 1 -
|
|
.../wrapper/gyptest-wrapper.py | 2 -
|
|
.../gyptest-many-actions-unsorted.py | 2 -
|
|
test/many-actions/gyptest-many-actions.py | 2 -
|
|
.../msvs/config_attrs/gyptest-config_attrs.py | 2 -
|
|
test/msvs/rules_stdout_stderr/rule_stderr.py | 1 -
|
|
test/msvs/rules_stdout_stderr/rule_stdout.py | 1 -
|
|
.../gyptest-action-dependencies.py | 2 -
|
|
.../gyptest-solibs-avoid-relinking.py | 2 -
|
|
test/rules-dirname/gyptest-dirname.py | 2 -
|
|
.../gyptest-rules-variables.py | 2 -
|
|
test/rules/gyptest-all.py | 2 -
|
|
test/rules/gyptest-default.py | 2 -
|
|
test/standalone/gyptest-standalone.py | 2 -
|
|
.../commands/gyptest-commands-ignore-env.py | 1 -
|
|
.../commands/gyptest-commands-repeated.py | 2 -
|
|
test/variables/commands/gyptest-commands.py | 1 -
|
|
.../repeated_multidir/print_cwd_basename.py | 1 -
|
|
test/variables/commands/test.py | 2 -
|
|
.../filelist/gyptest-filelist-golden.py | 2 -
|
|
...test-cl-enable-enhanced-instruction-set.py | 2 -
|
|
test/win/gyptest-cl-function-level-linking.py | 2 -
|
|
test/win/gyptest-command-quote.py | 2 -
|
|
test/win/gyptest-link-defrelink.py | 2 -
|
|
test/win/gyptest-link-enable-uac.py | 16 +-
|
|
.../gyptest-link-enable-winrt-app-revision.py | 2 -
|
|
...nk-enable-winrt-target-platform-version.py | 2 -
|
|
test/win/gyptest-link-enable-winrt.py | 2 -
|
|
test/win/gyptest-link-large-pdb.py | 2 -
|
|
test/win/gyptest-link-ordering.py | 2 -
|
|
test/win/gyptest-link-restat-importlib.py | 2 -
|
|
test/win/gyptest-macro-targetfilename.py | 2 -
|
|
test/win/gyptest-rc-build.py | 2 -
|
|
test/win/vs-macros/as.py | 2 -
|
|
tools/graphviz.py | 2 -
|
|
tools/pretty_gyp.py | 2 -
|
|
tools/pretty_sln.py | 2 -
|
|
tools/pretty_vcproj.py | 55 ++--
|
|
116 files changed, 136 insertions(+), 643 deletions(-)
|
|
|
|
diff --git a/buildbot/buildbot_run.py b/buildbot/buildbot_run.py
|
|
index 89416520d3ac..964ed26bf0b0 100755
|
|
--- a/buildbot/buildbot_run.py
|
|
+++ b/buildbot/buildbot_run.py
|
|
@@ -5,8 +5,6 @@
|
|
|
|
"""Argument-less script to select what to run on the buildbots."""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import os
|
|
import shutil
|
|
import subprocess
|
|
diff --git a/gyptest.py b/gyptest.py
|
|
index 1a9ffca7a134..60ddba5e3f18 100755
|
|
--- a/gyptest.py
|
|
+++ b/gyptest.py
|
|
@@ -5,8 +5,6 @@
|
|
|
|
"""gyptest.py -- test runner for GYP tests."""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import argparse
|
|
import math
|
|
import os
|
|
diff --git a/pylib/gyp/MSVSNew.py b/pylib/gyp/MSVSNew.py
|
|
index 73182ec880ca..7698cfa3f70d 100644
|
|
--- a/pylib/gyp/MSVSNew.py
|
|
+++ b/pylib/gyp/MSVSNew.py
|
|
@@ -4,31 +4,14 @@
|
|
|
|
"""New implementation of Visual Studio project generation."""
|
|
|
|
+from functools import total_ordering
|
|
+import hashlib
|
|
import os
|
|
import random
|
|
import sys
|
|
|
|
import gyp.common
|
|
|
|
-# hashlib is supplied as of Python 2.5 as the replacement interface for md5
|
|
-# and other secure hashes. In 2.6, md5 is deprecated. Import hashlib if
|
|
-# available, avoiding a deprecation warning under 2.6. Import md5 otherwise,
|
|
-# preserving 2.4 compatibility.
|
|
-try:
|
|
- import hashlib
|
|
- _new_md5 = hashlib.md5
|
|
-except ImportError:
|
|
- import md5
|
|
- _new_md5 = md5.new
|
|
-
|
|
-
|
|
-try:
|
|
- # cmp was removed in python3.
|
|
- cmp
|
|
-except NameError:
|
|
- def cmp(a, b):
|
|
- return (a > b) - (a < b)
|
|
-
|
|
# Initialize random number generator
|
|
random.seed()
|
|
|
|
@@ -61,20 +44,17 @@ def MakeGuid(name, seed='msvs_new'):
|
|
to_hash = str(seed) + str(name)
|
|
to_hash = to_hash.encode('utf-8')
|
|
# Calculate a MD5 signature for the seed and name.
|
|
- d = _new_md5(to_hash).hexdigest().upper()
|
|
+ d = hashlib.md5(to_hash, usedforsecurity=False).hexdigest().upper()
|
|
# Convert most of the signature to GUID form (discard the rest)
|
|
guid = ('{' + d[:8] + '-' + d[8:12] + '-' + d[12:16] + '-' + d[16:20]
|
|
+ '-' + d[20:32] + '}')
|
|
return guid
|
|
|
|
#------------------------------------------------------------------------------
|
|
|
|
|
|
+@total_ordering
|
|
class MSVSSolutionEntry(object):
|
|
- def __cmp__(self, other):
|
|
- # Sort by name then guid (so things are in order on vs2008).
|
|
- return cmp((self.name, self.get_guid()), (other.name, other.get_guid()))
|
|
-
|
|
def __lt__(self, other):
|
|
return (self.name, self.get_guid()) < (other.name, other.get_guid())
|
|
|
|
diff --git a/pylib/gyp/MSVSSettings.py b/pylib/gyp/MSVSSettings.py
|
|
index 1d2e25ab90f1..01d05a74a26c 100644
|
|
--- a/pylib/gyp/MSVSSettings.py
|
|
+++ b/pylib/gyp/MSVSSettings.py
|
|
@@ -14,17 +14,9 @@ The MSBuild schemas were also considered. They are typically found in the
|
|
MSBuild install directory, e.g. c:\Program Files (x86)\MSBuild
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import sys
|
|
import re
|
|
|
|
-try:
|
|
- # basestring was removed in python3.
|
|
- basestring
|
|
-except NameError:
|
|
- basestring = str
|
|
-
|
|
# Dictionaries of settings validators. The key is the tool name, the value is
|
|
# a dictionary mapping setting names to validation functions.
|
|
_msvs_validators = {}
|
|
@@ -114,27 +106,27 @@ class _String(_Type):
|
|
"""A setting that's just a string."""
|
|
|
|
def ValidateMSVS(self, value):
|
|
- if not isinstance(value, basestring):
|
|
+ if not isinstance(value, str):
|
|
raise ValueError('expected string; got %r' % value)
|
|
|
|
def ValidateMSBuild(self, value):
|
|
- if not isinstance(value, basestring):
|
|
+ if not isinstance(value, str):
|
|
raise ValueError('expected string; got %r' % value)
|
|
|
|
def ConvertToMSBuild(self, value):
|
|
# Convert the macros
|
|
return ConvertVCMacrosToMSBuild(value)
|
|
|
|
|
|
class _StringList(_Type):
|
|
"""A settings that's a list of strings."""
|
|
|
|
def ValidateMSVS(self, value):
|
|
- if not isinstance(value, basestring) and not isinstance(value, list):
|
|
+ if not isinstance(value, str) and not isinstance(value, list):
|
|
raise ValueError('expected string list; got %r' % value)
|
|
|
|
def ValidateMSBuild(self, value):
|
|
- if not isinstance(value, basestring) and not isinstance(value, list):
|
|
+ if not isinstance(value, str) and not isinstance(value, list):
|
|
raise ValueError('expected string list; got %r' % value)
|
|
|
|
def ConvertToMSBuild(self, value):
|
|
diff --git a/pylib/gyp/MSVSSettings_test.py b/pylib/gyp/MSVSSettings_test.py
|
|
index 73ed25e27d4d..1d4b9a2da3c4 100755
|
|
--- a/pylib/gyp/MSVSSettings_test.py
|
|
+++ b/pylib/gyp/MSVSSettings_test.py
|
|
@@ -6,10 +6,7 @@
|
|
|
|
"""Unit tests for the MSVSSettings.py file."""
|
|
|
|
-try:
|
|
- from StringIO import StringIO
|
|
-except ImportError:
|
|
- from io import StringIO
|
|
+from io import StringIO
|
|
import unittest
|
|
import gyp.MSVSSettings as MSVSSettings
|
|
|
|
diff --git a/pylib/gyp/__init__.py b/pylib/gyp/__init__.py
|
|
index e038151ba714..a1afbb66bc09 100755
|
|
--- a/pylib/gyp/__init__.py
|
|
+++ b/pylib/gyp/__init__.py
|
|
@@ -4,24 +4,16 @@
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import copy
|
|
import gyp.input
|
|
import optparse
|
|
import os.path
|
|
import re
|
|
import shlex
|
|
import sys
|
|
import traceback
|
|
from gyp.common import GypError
|
|
|
|
-try:
|
|
- # basestring was removed in python3.
|
|
- basestring
|
|
-except NameError:
|
|
- basestring = str
|
|
-
|
|
# Default debug modes for GYP
|
|
debug = {}
|
|
|
|
@@ -418,7 +410,7 @@ def gyp_main(args):
|
|
for option, value in sorted(options.__dict__.items()):
|
|
if option[0] == '_':
|
|
continue
|
|
- if isinstance(value, basestring):
|
|
+ if isinstance(value, str):
|
|
DebugOutput(DEBUG_GENERAL, " %s: '%s'", option, value)
|
|
else:
|
|
DebugOutput(DEBUG_GENERAL, " %s: %s", option, value)
|
|
diff --git a/pylib/gyp/common.py b/pylib/gyp/common.py
|
|
index f3ba8a0498f1..0f100852f38a 100644
|
|
--- a/pylib/gyp/common.py
|
|
+++ b/pylib/gyp/common.py
|
|
@@ -2,17 +2,14 @@
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
-from __future__ import with_statement
|
|
-
|
|
+from collections.abc import MutableSet
|
|
import errno
|
|
import filecmp
|
|
import os.path
|
|
import re
|
|
import tempfile
|
|
import sys
|
|
|
|
-from six.moves import collections_abc
|
|
-
|
|
|
|
# A minimal memoizing decorator. It'll blow up if the args aren't immutable,
|
|
# among other "problems".
|
|
@@ -495,7 +492,7 @@ def uniquer(seq, idfun=None):
|
|
|
|
|
|
# Based on http://code.activestate.com/recipes/576694/.
|
|
-class OrderedSet(collections_abc.MutableSet):
|
|
+class OrderedSet(MutableSet):
|
|
def __init__(self, iterable=None):
|
|
self.end = end = []
|
|
end += [None, end, end] # sentinel node for doubly linked list
|
|
diff --git a/pylib/gyp/easy_xml.py b/pylib/gyp/easy_xml.py
|
|
index 2de51e25fb04..ac2e93f5c2f5 100644
|
|
--- a/pylib/gyp/easy_xml.py
|
|
+++ b/pylib/gyp/easy_xml.py
|
|
@@ -2,16 +2,12 @@
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
+from functools import reduce
|
|
import re
|
|
import os
|
|
import locale
|
|
import sys
|
|
|
|
-try:
|
|
- # reduce moved to functools in python3.
|
|
- reduce
|
|
-except NameError:
|
|
- from functools import reduce
|
|
|
|
def XmlToString(content, encoding='utf-8', pretty=False):
|
|
""" Writes the XML content to disk, touching the file only if it has changed.
|
|
diff --git a/pylib/gyp/easy_xml_test.py b/pylib/gyp/easy_xml_test.py
|
|
index c3be44641788..fce2b61b36f5 100755
|
|
--- a/pylib/gyp/easy_xml_test.py
|
|
+++ b/pylib/gyp/easy_xml_test.py
|
|
@@ -6,12 +6,9 @@
|
|
|
|
""" Unit tests for the easy_xml.py file. """
|
|
|
|
+from io import StringIO
|
|
import gyp.easy_xml as easy_xml
|
|
import unittest
|
|
-try:
|
|
- from StringIO import StringIO
|
|
-except ImportError:
|
|
- from io import StringIO
|
|
|
|
|
|
class TestSequenceFunctions(unittest.TestCase):
|
|
diff --git a/pylib/gyp/generator/analyzer.py b/pylib/gyp/generator/analyzer.py
|
|
index b3484dcb1bed..ab0d86456aab 100644
|
|
--- a/pylib/gyp/generator/analyzer.py
|
|
+++ b/pylib/gyp/generator/analyzer.py
|
|
@@ -62,8 +62,6 @@ directly supplied to gyp. OTOH if both "a.gyp" and "b.gyp" are supplied to gyp
|
|
then the "all" target includes "b1" and "b2".
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import gyp.common
|
|
import gyp.ninja_syntax as ninja_syntax
|
|
import json
|
|
diff --git a/pylib/gyp/generator/cmake.py b/pylib/gyp/generator/cmake.py
|
|
index 4a2041cf2687..6ed14d72a78b 100644
|
|
--- a/pylib/gyp/generator/cmake.py
|
|
+++ b/pylib/gyp/generator/cmake.py
|
|
@@ -28,21 +28,14 @@ not be able to find the header file directories described in the generated
|
|
CMakeLists.txt file.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import multiprocessing
|
|
import os
|
|
import signal
|
|
import string
|
|
import subprocess
|
|
import gyp.common
|
|
import gyp.xcode_emulation
|
|
|
|
-try:
|
|
- # maketrans moved to str in python3.
|
|
- _maketrans = string.maketrans
|
|
-except NameError:
|
|
- _maketrans = str.maketrans
|
|
|
|
generator_default_variables = {
|
|
'EXECUTABLE_PREFIX': '',
|
|
@@ -246,7 +239,7 @@ def StringToCMakeTargetName(a):
|
|
Invalid for make: ':'
|
|
Invalid for unknown reasons but cause failures: '.'
|
|
"""
|
|
- return a.translate(_maketrans(' /():."', '_______'))
|
|
+ return a.translate(str.maketrans(' /():."', '_______'))
|
|
|
|
|
|
def WriteActions(target_name, actions, extra_sources, extra_deps,
|
|
@@ -281,7 +274,7 @@ def WriteActions(target_name, actions, extra_sources, extra_deps,
|
|
dirs = set(dir for dir in (os.path.dirname(o) for o in outputs) if dir)
|
|
|
|
if int(action.get('process_outputs_as_sources', False)):
|
|
- extra_sources.extend(zip(cmake_outputs, outputs))
|
|
+ extra_sources.extend(list(zip(cmake_outputs, outputs)))
|
|
|
|
# add_custom_command
|
|
output.write('add_custom_command(OUTPUT ')
|
|
@@ -987,7 +980,7 @@ def WriteTarget(namer, qualified_target, target_dicts, build_dir, config_to_use,
|
|
|
|
# XCode settings
|
|
xcode_settings = config.get('xcode_settings', {})
|
|
- for xcode_setting, xcode_value in xcode_settings.viewitems():
|
|
+ for xcode_setting, xcode_value in xcode_settings.items():
|
|
SetTargetProperty(output, cmake_target_name,
|
|
"XCODE_ATTRIBUTE_%s" % xcode_setting, xcode_value,
|
|
'' if isinstance(xcode_value, str) else ' ')
|
|
diff --git a/pylib/gyp/generator/dump_dependency_json.py b/pylib/gyp/generator/dump_dependency_json.py
|
|
index 2bf3f397d695..719b6c1e54ad 100644
|
|
--- a/pylib/gyp/generator/dump_dependency_json.py
|
|
+++ b/pylib/gyp/generator/dump_dependency_json.py
|
|
@@ -2,8 +2,6 @@
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import collections
|
|
import os
|
|
import gyp
|
|
diff --git a/pylib/gyp/generator/make.py b/pylib/gyp/generator/make.py
|
|
index 997eec08666e..bc2c24cbefad 100644
|
|
--- a/pylib/gyp/generator/make.py
|
|
+++ b/pylib/gyp/generator/make.py
|
|
@@ -21,8 +21,6 @@
|
|
# toplevel Makefile. It may make sense to generate some .mk files on
|
|
# the side to keep the the files readable.
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import os
|
|
import re
|
|
import sys
|
|
@@ -1774,7 +1772,7 @@ $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD
|
|
|
|
# Hash the target name to avoid generating overlong filenames.
|
|
cmdstring = (command if command else self.target).encode('utf-8')
|
|
- cmddigest = hashlib.sha1(cmdstring).hexdigest()
|
|
+ cmddigest = hashlib.sha1(cmdstring, usedforsecurity=False).hexdigest()
|
|
intermediate = "%s.intermediate" % (cmddigest)
|
|
self.WriteLn('%s: %s' % (' '.join(outputs), intermediate))
|
|
self.WriteLn('\t%s' % '@:');
|
|
diff --git a/pylib/gyp/generator/msvs.py b/pylib/gyp/generator/msvs.py
|
|
index 2278c16acf3a..0d4c904df200 100644
|
|
--- a/pylib/gyp/generator/msvs.py
|
|
+++ b/pylib/gyp/generator/msvs.py
|
|
@@ -2,8 +2,6 @@
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import copy
|
|
import ntpath
|
|
import os
|
|
diff --git a/pylib/gyp/generator/msvs_test.py b/pylib/gyp/generator/msvs_test.py
|
|
index 838d236a2d8e..db1382fc4cf2 100755
|
|
--- a/pylib/gyp/generator/msvs_test.py
|
|
+++ b/pylib/gyp/generator/msvs_test.py
|
|
@@ -5,12 +5,9 @@
|
|
|
|
""" Unit tests for the msvs.py file. """
|
|
|
|
+from io import StringIO
|
|
import gyp.generator.msvs as msvs
|
|
import unittest
|
|
-try:
|
|
- from StringIO import StringIO
|
|
-except ImportError:
|
|
- from io import StringIO
|
|
|
|
|
|
class TestSequenceFunctions(unittest.TestCase):
|
|
diff --git a/pylib/gyp/generator/ninja.py b/pylib/gyp/generator/ninja.py
|
|
index 3bcfe352925b..23d6467f41e3 100644
|
|
--- a/pylib/gyp/generator/ninja.py
|
|
+++ b/pylib/gyp/generator/ninja.py
|
|
@@ -2,29 +2,23 @@
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
+from io import StringIO
|
|
import collections
|
|
import copy
|
|
import hashlib
|
|
import json
|
|
import multiprocessing
|
|
import os.path
|
|
import re
|
|
import signal
|
|
import subprocess
|
|
import sys
|
|
-import six
|
|
import gyp
|
|
import gyp.common
|
|
from gyp.common import OrderedSet
|
|
import gyp.msvs_emulation
|
|
import gyp.MSVSUtil as MSVSUtil
|
|
import gyp.xcode_emulation
|
|
-try:
|
|
- from cStringIO import StringIO
|
|
-except ImportError:
|
|
- from io import StringIO
|
|
|
|
from gyp.common import GetEnvironFallback
|
|
import gyp.ninja_syntax as ninja_syntax
|
|
@@ -752,7 +746,7 @@ class NinjaWriter(object):
|
|
if self.flavor == 'win':
|
|
# WriteNewNinjaRule uses unique_name for creating an rsp file on win.
|
|
extra_bindings.append(('unique_name',
|
|
- hashlib.md5(six.ensure_binary(outputs[0])).hexdigest()))
|
|
+ hashlib.md5(outputs[0].encode('utf-8'), usedforsecurity=False).hexdigest()))
|
|
|
|
self.ninja.build(outputs, rule_name, self.GypPathToNinja(source),
|
|
implicit=inputs,
|
|
@@ -2389,7 +2383,7 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params,
|
|
qualified_target_for_hash = gyp.common.QualifiedTarget(build_file, name,
|
|
toolset)
|
|
qualified_target_for_hash = qualified_target_for_hash.encode('utf-8')
|
|
- hash_for_rules = hashlib.md5(qualified_target_for_hash).hexdigest()
|
|
+ hash_for_rules = hashlib.md5(qualified_target_for_hash, usedforsecurity=False).hexdigest()
|
|
|
|
base_path = os.path.dirname(build_file)
|
|
obj = 'obj'
|
|
diff --git a/pylib/gyp/generator/xcode.py b/pylib/gyp/generator/xcode.py
|
|
index 23571086c2b6..0455cf416350 100644
|
|
--- a/pylib/gyp/generator/xcode.py
|
|
+++ b/pylib/gyp/generator/xcode.py
|
|
@@ -2,8 +2,6 @@
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import filecmp
|
|
import gyp.common
|
|
import gyp.xcodeproj_file
|
|
diff --git a/pylib/gyp/input.py b/pylib/gyp/input.py
|
|
index 4c1289164045..efcc4e55d6d5 100644
|
|
--- a/pylib/gyp/input.py
|
|
+++ b/pylib/gyp/input.py
|
|
@@ -2,8 +2,6 @@
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import ast
|
|
import gyp.common
|
|
import gyp.simple_copy
|
|
@@ -54,22 +52,6 @@ path_sections = set()
|
|
per_process_data = {}
|
|
per_process_aux_data = {}
|
|
|
|
-try:
|
|
- _str_types = (basestring,)
|
|
-# There's no basestring in python3.
|
|
-except NameError:
|
|
- _str_types = (str,)
|
|
-
|
|
-try:
|
|
- _int_types = (int, long)
|
|
-# There's no long in python3.
|
|
-except NameError:
|
|
- _int_types = (int,)
|
|
-
|
|
-# Shortcuts as we use these combos a lot.
|
|
-_str_int_types = _str_types + _int_types
|
|
-_str_int_list_types = _str_int_types + (list,)
|
|
-
|
|
|
|
def IsPathSection(section):
|
|
# If section ends in one of the '=+?!' characters, it's applied to a section
|
|
@@ -657,7 +639,7 @@ def IsStrCanonicalInt(string):
|
|
|
|
The canonical form is such that str(int(string)) == string.
|
|
"""
|
|
- if isinstance(string, _str_types):
|
|
+ if isinstance(string, str):
|
|
# This function is called a lot so for maximum performance, avoid
|
|
# involving regexps which would otherwise make the code much
|
|
# shorter. Regexps would need twice the time of this function.
|
|
@@ -957,17 +939,17 @@ def ExpandVariables(input, phase, variables, build_file):
|
|
|
|
if type(replacement) is list:
|
|
for item in replacement:
|
|
- if not contents[-1] == '/' and not isinstance(item, _str_int_types):
|
|
+ if not contents[-1] == '/' and not isinstance(item, (str, int)):
|
|
raise GypError('Variable ' + contents +
|
|
' must expand to a string or list of strings; ' +
|
|
'list contains a ' +
|
|
item.__class__.__name__)
|
|
# Run through the list and handle variable expansions in it. Since
|
|
# the list is guaranteed not to contain dicts, this won't do anything
|
|
# with conditions sections.
|
|
ProcessVariablesAndConditionsInList(replacement, phase, variables,
|
|
build_file)
|
|
- elif not isinstance(replacement, _str_int_types):
|
|
+ elif not isinstance(replacement, (str, int)):
|
|
raise GypError('Variable ' + str(contents) +
|
|
' must expand to a string or list of strings; ' +
|
|
'found a ' + replacement.__class__.__name__)
|
|
@@ -1086,7 +1068,7 @@ def EvalSingleCondition(
|
|
# use a command expansion directly inside a condition.
|
|
cond_expr_expanded = ExpandVariables(cond_expr, phase, variables,
|
|
build_file)
|
|
- if not isinstance(cond_expr_expanded, _str_int_types):
|
|
+ if not isinstance(cond_expr_expanded, (str, int)):
|
|
raise ValueError(
|
|
'Variable expansion in this context permits str and int ' + \
|
|
'only, found ' + cond_expr_expanded.__class__.__name__)
|
|
@@ -1162,28 +1144,28 @@ def LoadAutomaticVariablesFromDict(variables, the_dict):
|
|
# Any keys with plain string values in the_dict become automatic variables.
|
|
# The variable name is the key name with a "_" character prepended.
|
|
for key, value in the_dict.items():
|
|
- if isinstance(value, _str_int_list_types):
|
|
+ if isinstance(value, (str, int, list)):
|
|
variables['_' + key] = value
|
|
|
|
|
|
def LoadVariablesFromVariablesDict(variables, the_dict, the_dict_key):
|
|
# Any keys in the_dict's "variables" dict, if it has one, becomes a
|
|
# variable. The variable name is the key name in the "variables" dict.
|
|
# Variables that end with the % character are set only if they are unset in
|
|
# the variables dict. the_dict_key is the name of the key that accesses
|
|
# the_dict in the_dict's parent dict. If the_dict's parent is not a dict
|
|
# (it could be a list or it could be parentless because it is a root dict),
|
|
# the_dict_key will be None.
|
|
for key, value in the_dict.get('variables', {}).items():
|
|
- if not isinstance(value, _str_int_list_types):
|
|
+ if not isinstance(value, (str, int, list)):
|
|
continue
|
|
|
|
if key.endswith('%'):
|
|
variable_name = key[:-1]
|
|
if variable_name in variables:
|
|
# If the variable is already set, don't set it.
|
|
continue
|
|
- if the_dict_key is 'variables' and variable_name in the_dict:
|
|
+ if the_dict_key == 'variables' and variable_name in the_dict:
|
|
# If the variable is set without a % in the_dict, and the_dict is a
|
|
# variables dict (making |variables| a varaibles sub-dict of a
|
|
# variables dict), use the_dict's definition.
|
|
@@ -1228,9 +1210,9 @@ def ProcessVariablesAndConditionsInDict(the_dict, phase, variables_in,
|
|
|
|
for key, value in the_dict.items():
|
|
# Skip "variables", which was already processed if present.
|
|
- if key != 'variables' and isinstance(value, _str_types):
|
|
+ if key != 'variables' and isinstance(value, str):
|
|
expanded = ExpandVariables(value, phase, variables, build_file)
|
|
- if not isinstance(expanded, _str_int_types):
|
|
+ if not isinstance(expanded, (str, int)):
|
|
raise ValueError(
|
|
'Variable expansion in this context permits str and int ' + \
|
|
'only, found ' + expanded.__class__.__name__ + ' for ' + key)
|
|
@@ -1287,54 +1269,54 @@ def ProcessVariablesAndConditionsInDict(the_dict, phase, variables_in,
|
|
for key, value in the_dict.items():
|
|
# Skip "variables" and string values, which were already processed if
|
|
# present.
|
|
- if key == 'variables' or isinstance(value, _str_types):
|
|
+ if key == 'variables' or isinstance(value, str):
|
|
continue
|
|
if type(value) is dict:
|
|
# Pass a copy of the variables dict so that subdicts can't influence
|
|
# parents.
|
|
ProcessVariablesAndConditionsInDict(value, phase, variables,
|
|
build_file, key)
|
|
elif type(value) is list:
|
|
# The list itself can't influence the variables dict, and
|
|
# ProcessVariablesAndConditionsInList will make copies of the variables
|
|
# dict if it needs to pass it to something that can influence it. No
|
|
# copy is necessary here.
|
|
ProcessVariablesAndConditionsInList(value, phase, variables,
|
|
build_file)
|
|
- elif not isinstance(value, _int_types):
|
|
+ elif not isinstance(value, int):
|
|
raise TypeError('Unknown type ' + value.__class__.__name__ + \
|
|
' for ' + key)
|
|
|
|
|
|
def ProcessVariablesAndConditionsInList(the_list, phase, variables,
|
|
build_file):
|
|
# Iterate using an index so that new values can be assigned into the_list.
|
|
index = 0
|
|
while index < len(the_list):
|
|
item = the_list[index]
|
|
if type(item) is dict:
|
|
# Make a copy of the variables dict so that it won't influence anything
|
|
# outside of its own scope.
|
|
ProcessVariablesAndConditionsInDict(item, phase, variables, build_file)
|
|
elif type(item) is list:
|
|
ProcessVariablesAndConditionsInList(item, phase, variables, build_file)
|
|
- elif isinstance(item, _str_types):
|
|
+ elif isinstance(item, str):
|
|
expanded = ExpandVariables(item, phase, variables, build_file)
|
|
- if isinstance(expanded, _str_int_types):
|
|
+ if isinstance(expanded, (str, int)):
|
|
the_list[index] = expanded
|
|
elif type(expanded) is list:
|
|
the_list[index:index+1] = expanded
|
|
index += len(expanded)
|
|
|
|
# index now identifies the next item to examine. Continue right now
|
|
# without falling into the index increment below.
|
|
continue
|
|
else:
|
|
raise ValueError(
|
|
'Variable expansion in this context permits strings and ' + \
|
|
'lists only, found ' + expanded.__class__.__name__ + ' at ' + \
|
|
index)
|
|
- elif not isinstance(item, _int_types):
|
|
+ elif not isinstance(item, int):
|
|
raise TypeError('Unknown type ' + item.__class__.__name__ + \
|
|
' at index ' + index)
|
|
index = index + 1
|
|
@@ -2069,14 +2051,14 @@ def MergeLists(to, fro, to_file, fro_file, is_paths=False, append=True):
|
|
hashable_to_set = set(x for x in to if is_hashable(x))
|
|
for item in fro:
|
|
singleton = False
|
|
- if isinstance(item, _str_int_types):
|
|
+ if isinstance(item, (str, int)):
|
|
# The cheap and easy case.
|
|
if is_paths:
|
|
to_item = MakePathRelative(to_file, fro_file, item)
|
|
else:
|
|
to_item = item
|
|
|
|
- if not (isinstance(item, _str_types) and item.startswith('-')):
|
|
+ if not (isinstance(item, str) and item.startswith('-')):
|
|
# Any string that doesn't begin with a "-" is a singleton - it can
|
|
# only appear once in a list, to be enforced by the list merge append
|
|
# or prepend.
|
|
@@ -2133,18 +2115,18 @@ def MergeDicts(to, fro, to_file, fro_file):
|
|
# modified.
|
|
if k in to:
|
|
bad_merge = False
|
|
- if isinstance(v, _str_int_types):
|
|
- if not isinstance(to[k], _str_int_types):
|
|
+ if isinstance(v, (str, int)):
|
|
+ if not isinstance(to[k], (str, int)):
|
|
bad_merge = True
|
|
elif type(v) is not type(to[k]):
|
|
bad_merge = True
|
|
|
|
if bad_merge:
|
|
raise TypeError(
|
|
'Attempt to merge dict value of type ' + v.__class__.__name__ + \
|
|
' into incompatible type ' + to[k].__class__.__name__ + \
|
|
' for key ' + k)
|
|
- if isinstance(v, _str_int_types):
|
|
+ if isinstance(v, (str, int)):
|
|
# Overwrite the existing value, if any. Cheap and easy.
|
|
is_path = IsPathSection(k)
|
|
if is_path:
|
|
@@ -2619,7 +2601,7 @@ def ValidateRunAsInTarget(target, target_dict, build_file):
|
|
"must be a list." %
|
|
(target_name, build_file))
|
|
working_directory = run_as.get('working_directory')
|
|
- if working_directory and not isinstance(working_directory, _str_types):
|
|
+ if working_directory and not isinstance(working_directory, str):
|
|
raise GypError("The 'working_directory' for 'run_as' in target %s "
|
|
"in file %s should be a string." %
|
|
(target_name, build_file))
|
|
@@ -2654,24 +2636,24 @@ def TurnIntIntoStrInDict(the_dict):
|
|
# Use items instead of iteritems because there's no need to try to look at
|
|
# reinserted keys and their associated values.
|
|
for k, v in the_dict.items():
|
|
- if isinstance(v, _int_types):
|
|
+ if isinstance(v, int):
|
|
v = str(v)
|
|
the_dict[k] = v
|
|
elif type(v) is dict:
|
|
TurnIntIntoStrInDict(v)
|
|
elif type(v) is list:
|
|
TurnIntIntoStrInList(v)
|
|
|
|
- if isinstance(k, _int_types):
|
|
+ if isinstance(k, int):
|
|
del the_dict[k]
|
|
the_dict[str(k)] = v
|
|
|
|
|
|
def TurnIntIntoStrInList(the_list):
|
|
"""Given list the_list, recursively converts all integers into strings.
|
|
"""
|
|
for index, item in enumerate(the_list):
|
|
- if isinstance(item, _int_types):
|
|
+ if isinstance(item, int):
|
|
the_list[index] = str(item)
|
|
elif type(item) is dict:
|
|
TurnIntIntoStrInDict(item)
|
|
diff --git a/pylib/gyp/mac_tool.py b/pylib/gyp/mac_tool.py
|
|
index 64d21063ff6a..3537fa21ed9b 100755
|
|
--- a/pylib/gyp/mac_tool.py
|
|
+++ b/pylib/gyp/mac_tool.py
|
|
@@ -8,8 +8,6 @@
|
|
These functions are executed via gyp-mac-tool when using the Makefile generator.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import fcntl
|
|
import fnmatch
|
|
import glob
|
|
diff --git a/pylib/gyp/msvs_emulation.py b/pylib/gyp/msvs_emulation.py
|
|
index 034ef49591f8..98ba8a8b76c0 100644
|
|
--- a/pylib/gyp/msvs_emulation.py
|
|
+++ b/pylib/gyp/msvs_emulation.py
|
|
@@ -7,24 +7,17 @@ This module helps emulate Visual Studio 2008 behavior on top of other
|
|
build systems, primarily ninja.
|
|
"""
|
|
|
|
+from collections.abc import Iterable
|
|
import os
|
|
import re
|
|
import subprocess
|
|
import sys
|
|
|
|
-from six.moves import collections_abc
|
|
-
|
|
from gyp.common import OrderedSet
|
|
import gyp.MSVSUtil
|
|
import gyp.MSVSVersion
|
|
from gyp.MSVSVersion import version_to_tuple
|
|
|
|
-try:
|
|
- # basestring was removed in python3.
|
|
- basestring
|
|
-except NameError:
|
|
- basestring = str
|
|
-
|
|
|
|
windows_quoter_regex = re.compile(r'(\\*)"')
|
|
|
|
@@ -94,34 +87,34 @@ def _AddPrefix(element, prefix):
|
|
"""Add |prefix| to |element| or each subelement if element is iterable."""
|
|
if element is None:
|
|
return element
|
|
- if (isinstance(element, collections_abc.Iterable) and
|
|
- not isinstance(element, basestring)):
|
|
+ if (isinstance(element, Iterable) and
|
|
+ not isinstance(element, str)):
|
|
return [prefix + e for e in element]
|
|
else:
|
|
return prefix + element
|
|
|
|
|
|
def _DoRemapping(element, map):
|
|
"""If |element| then remap it through |map|. If |element| is iterable then
|
|
each item will be remapped. Any elements not found will be removed."""
|
|
if map is not None and element is not None:
|
|
if not callable(map):
|
|
map = map.get # Assume it's a dict, otherwise a callable to do the remap.
|
|
- if (isinstance(element, collections_abc.Iterable) and
|
|
- not isinstance(element, basestring)):
|
|
+ if (isinstance(element, Iterable) and
|
|
+ not isinstance(element, str)):
|
|
element = filter(None, [map(elem) for elem in element])
|
|
else:
|
|
element = map(element)
|
|
return element
|
|
|
|
|
|
def _AppendOrReturn(append, element):
|
|
"""If |append| is None, simply return |element|. If |append| is not None,
|
|
then add |element| to it, adding each item in |element| if it's a list or
|
|
tuple."""
|
|
if append is not None and element is not None:
|
|
- if (isinstance(element, collections_abc.Iterable) and
|
|
- not isinstance(element, basestring)):
|
|
+ if (isinstance(element, Iterable) and
|
|
+ not isinstance(element, str)):
|
|
append.extend(element)
|
|
else:
|
|
append.append(element)
|
|
diff --git a/pylib/gyp/simple_copy.py b/pylib/gyp/simple_copy.py
|
|
index 58a61c34231f..20a9958dab02 100644
|
|
--- a/pylib/gyp/simple_copy.py
|
|
+++ b/pylib/gyp/simple_copy.py
|
|
@@ -28,19 +28,7 @@ _deepcopy_dispatch = d = {}
|
|
def _deepcopy_atomic(x):
|
|
return x
|
|
|
|
-try:
|
|
- _string_types = (str, unicode)
|
|
-# There's no unicode in python3
|
|
-except NameError:
|
|
- _string_types = (str, )
|
|
-
|
|
-try:
|
|
- _integer_types = (int, long)
|
|
-# There's no long in python3
|
|
-except NameError:
|
|
- _integer_types = (int, )
|
|
-
|
|
-for x in (type(None), float, bool, type) + _integer_types + _string_types:
|
|
+for x in (type(None), float, bool, type, int, str):
|
|
d[x] = _deepcopy_atomic
|
|
|
|
def _deepcopy_list(x):
|
|
diff --git a/pylib/gyp/win_tool.py b/pylib/gyp/win_tool.py
|
|
index e7c0dd81f752..41fdab9352cc 100755
|
|
--- a/pylib/gyp/win_tool.py
|
|
+++ b/pylib/gyp/win_tool.py
|
|
@@ -9,8 +9,6 @@
|
|
These functions are executed via gyp-win-tool when using the ninja generator.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import os
|
|
import re
|
|
import shutil
|
|
diff --git a/pylib/gyp/xcode_emulation.py b/pylib/gyp/xcode_emulation.py
|
|
index 4de25f9f4a00..ada688e2acb8 100644
|
|
--- a/pylib/gyp/xcode_emulation.py
|
|
+++ b/pylib/gyp/xcode_emulation.py
|
|
@@ -7,8 +7,6 @@ This module contains classes that help to emulate xcodebuild behavior on top of
|
|
other build systems, such as make and ninja.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import copy
|
|
import gyp.common
|
|
import os
|
|
diff --git a/pylib/gyp/xcodeproj_file.py b/pylib/gyp/xcodeproj_file.py
|
|
index 9374add9b0f8..fe82756a6fa2 100644
|
|
--- a/pylib/gyp/xcodeproj_file.py
|
|
+++ b/pylib/gyp/xcodeproj_file.py
|
|
@@ -139,35 +139,12 @@ a project file is output.
|
|
|
|
import functools
|
|
import gyp.common
|
|
+import hashlib
|
|
import posixpath
|
|
import re
|
|
import struct
|
|
import sys
|
|
|
|
-# hashlib is supplied as of Python 2.5 as the replacement interface for sha
|
|
-# and other secure hashes. In 2.6, sha is deprecated. Import hashlib if
|
|
-# available, avoiding a deprecation warning under 2.6. Import sha otherwise,
|
|
-# preserving 2.4 compatibility.
|
|
-try:
|
|
- import hashlib
|
|
- _new_sha1 = hashlib.sha1
|
|
-except ImportError:
|
|
- import sha
|
|
- _new_sha1 = sha.new
|
|
-
|
|
-try:
|
|
- # basestring was removed in python3.
|
|
- basestring
|
|
-except NameError:
|
|
- basestring = str
|
|
-
|
|
-try:
|
|
- # cmp was removed in python3.
|
|
- cmp
|
|
-except NameError:
|
|
- def cmp(a, b):
|
|
- return (a > b) - (a < b)
|
|
-
|
|
# See XCObject._EncodeString. This pattern is used to determine when a string
|
|
# can be printed unquoted. Strings that match this pattern may be printed
|
|
# unquoted. Strings that do not match must be quoted and may be further
|
|
@@ -337,7 +314,7 @@ class XCObject(object):
|
|
that._properties[key] = new_value
|
|
else:
|
|
that._properties[key] = value
|
|
- elif isinstance(value, basestring) or isinstance(value, int):
|
|
+ elif isinstance(value, str) or isinstance(value, int):
|
|
that._properties[key] = value
|
|
elif isinstance(value, list):
|
|
if is_strong:
|
|
@@ -434,7 +411,7 @@ class XCObject(object):
|
|
hash.update(data.encode('utf-8'))
|
|
|
|
if seed_hash is None:
|
|
- seed_hash = _new_sha1()
|
|
+ seed_hash = hashlib.sha1()
|
|
|
|
hash = seed_hash.copy()
|
|
|
|
@@ -615,13 +592,6 @@ class XCObject(object):
|
|
comment = value.Comment()
|
|
elif isinstance(value, str):
|
|
printable += self._EncodeString(value)
|
|
- # 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)
|
|
elif isinstance(value, list):
|
|
@@ -783,29 +753,29 @@ class XCObject(object):
|
|
' must be list, not ' + value.__class__.__name__)
|
|
for item in value:
|
|
if not isinstance(item, property_type) and \
|
|
- not (isinstance(item, basestring) and property_type == str):
|
|
+ not (isinstance(item, str) and property_type == str):
|
|
# Accept unicode where str is specified. str is treated as
|
|
# UTF-8-encoded.
|
|
raise TypeError(
|
|
'item of ' + property + ' of ' + self.__class__.__name__ + \
|
|
' must be ' + property_type.__name__ + ', not ' + \
|
|
item.__class__.__name__)
|
|
elif not isinstance(value, property_type) and \
|
|
- not (isinstance(value, basestring) and property_type == str):
|
|
+ not (isinstance(value, str) and property_type == str):
|
|
# Accept unicode where str is specified. str is treated as
|
|
# UTF-8-encoded.
|
|
raise TypeError(
|
|
property + ' of ' + self.__class__.__name__ + ' must be ' + \
|
|
property_type.__name__ + ', not ' + value.__class__.__name__)
|
|
|
|
# Checks passed, perform the assignment.
|
|
if do_copy:
|
|
if isinstance(value, XCObject):
|
|
if is_strong:
|
|
self._properties[property] = value.Copy()
|
|
else:
|
|
self._properties[property] = value
|
|
- elif isinstance(value, basestring) or isinstance(value, int):
|
|
+ elif isinstance(value, str) or isinstance(value, int):
|
|
self._properties[property] = value
|
|
elif isinstance(value, list):
|
|
if is_strong:
|
|
@@ -1032,6 +1002,9 @@ class XCHierarchicalElement(XCObject):
|
|
|
|
if self_type == other_type:
|
|
# If the two objects are of the same sort rank, compare their names.
|
|
+ def cmp(a, b):
|
|
+ return (a > b) - (a < b)
|
|
+
|
|
return cmp(self.Name(), other.Name())
|
|
|
|
# Otherwise, sort groups before everything else.
|
|
diff --git a/samples/samples b/samples/samples
|
|
index ff26de38258f..ceaee5e46137 100755
|
|
--- a/samples/samples
|
|
+++ b/samples/samples
|
|
@@ -4,8 +4,6 @@
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import os.path
|
|
import shutil
|
|
import sys
|
|
diff --git a/test/actions-multiple-outputs-with-dependencies/gyptest-action.py b/test/actions-multiple-outputs-with-dependencies/gyptest-action.py
|
|
index a9d218282cc1..d0aee50c0f2d 100755
|
|
--- a/test/actions-multiple-outputs-with-dependencies/gyptest-action.py
|
|
+++ b/test/actions-multiple-outputs-with-dependencies/gyptest-action.py
|
|
@@ -10,8 +10,6 @@ Verifies actions with multiple outputs & dependncies will correctly rebuild.
|
|
This is a regression test for crrev.com/1177163002.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
import os
|
|
import sys
|
|
diff --git a/test/actions-multiple-outputs/gyptest-multiple-outputs.py b/test/actions-multiple-outputs/gyptest-multiple-outputs.py
|
|
index 5e2682d00ff6..3d25945987a0 100755
|
|
--- a/test/actions-multiple-outputs/gyptest-multiple-outputs.py
|
|
+++ b/test/actions-multiple-outputs/gyptest-multiple-outputs.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies actions with multiple outputs will correctly rebuild.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
import os
|
|
import sys
|
|
diff --git a/test/actions/src/action_missing_name.gyp b/test/actions/src/action_missing_name.gyp
|
|
index 6647aac3b509..30fe051c0477 100644
|
|
--- a/test/actions/src/action_missing_name.gyp
|
|
+++ b/test/actions/src/action_missing_name.gyp
|
|
@@ -15,7 +15,7 @@
|
|
'action': [
|
|
'python',
|
|
'-c',
|
|
- 'from __future__ import print_function; print(\'missing name\')',
|
|
+ 'print(\'missing name\')',
|
|
],
|
|
},
|
|
],
|
|
diff --git a/test/analyzer/gyptest-analyzer.py b/test/analyzer/gyptest-analyzer.py
|
|
index 58a1ce6f0715..2bf0c7a31df9 100644
|
|
--- a/test/analyzer/gyptest-analyzer.py
|
|
+++ b/test/analyzer/gyptest-analyzer.py
|
|
@@ -6,8 +6,6 @@
|
|
"""Tests for analyzer
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import json
|
|
import TestGyp
|
|
|
|
diff --git a/test/arflags/gyptest-arflags.py b/test/arflags/gyptest-arflags.py
|
|
index 870a2d894695..36248fd63bd8 100644
|
|
--- a/test/arflags/gyptest-arflags.py
|
|
+++ b/test/arflags/gyptest-arflags.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies that building a target with invalid arflags fails.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import os
|
|
import sys
|
|
import TestGyp
|
|
diff --git a/test/compiler-override/gyptest-compiler-global-settings.py b/test/compiler-override/gyptest-compiler-global-settings.py
|
|
index 9f062a4fef72..a46325c28184 100755
|
|
--- a/test/compiler-override/gyptest-compiler-global-settings.py
|
|
+++ b/test/compiler-override/gyptest-compiler-global-settings.py
|
|
@@ -6,8 +6,6 @@
|
|
Verifies that make_global_settings can be used to override the
|
|
compiler settings.
|
|
"""
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
import os
|
|
import copy
|
|
diff --git a/test/compiler-override/my_cc.py b/test/compiler-override/my_cc.py
|
|
index 09e1d3c58d18..b4d9e32b8ba3 100755
|
|
--- a/test/compiler-override/my_cc.py
|
|
+++ b/test/compiler-override/my_cc.py
|
|
@@ -2,6 +2,5 @@
|
|
# Copyright (c) 2012 Google Inc. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
-from __future__ import print_function
|
|
import sys
|
|
print(sys.argv)
|
|
diff --git a/test/compiler-override/my_cxx.py b/test/compiler-override/my_cxx.py
|
|
index 09e1d3c58d18..b4d9e32b8ba3 100755
|
|
--- a/test/compiler-override/my_cxx.py
|
|
+++ b/test/compiler-override/my_cxx.py
|
|
@@ -2,6 +2,5 @@
|
|
# Copyright (c) 2012 Google Inc. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
-from __future__ import print_function
|
|
import sys
|
|
print(sys.argv)
|
|
diff --git a/test/compiler-override/my_ld.py b/test/compiler-override/my_ld.py
|
|
index 09e1d3c58d18..b4d9e32b8ba3 100755
|
|
--- a/test/compiler-override/my_ld.py
|
|
+++ b/test/compiler-override/my_ld.py
|
|
@@ -2,6 +2,5 @@
|
|
# Copyright (c) 2012 Google Inc. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
-from __future__ import print_function
|
|
import sys
|
|
print(sys.argv)
|
|
diff --git a/test/compiler-override/my_nm.py b/test/compiler-override/my_nm.py
|
|
index 2c4e678110bb..578d680bc545 100755
|
|
--- a/test/compiler-override/my_nm.py
|
|
+++ b/test/compiler-override/my_nm.py
|
|
@@ -2,7 +2,6 @@
|
|
# Copyright (c) 2014 Google Inc. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
-from __future__ import print_function
|
|
import sys
|
|
print(sys.argv)
|
|
with open('RAN_MY_NM', 'w') as f:
|
|
diff --git a/test/compiler-override/my_readelf.py b/test/compiler-override/my_readelf.py
|
|
index 626665435e68..6ec7c9ea22b7 100755
|
|
--- a/test/compiler-override/my_readelf.py
|
|
+++ b/test/compiler-override/my_readelf.py
|
|
@@ -2,7 +2,6 @@
|
|
# Copyright (c) 2014 Google Inc. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
-from __future__ import print_function
|
|
import sys
|
|
print(sys.argv)
|
|
with open('RAN_MY_READELF', 'w') as f:
|
|
diff --git a/test/configurations/inheritance/gyptest-duplicates.py b/test/configurations/inheritance/gyptest-duplicates.py
|
|
index f015638b6ddd..ebf5a5791fef 100755
|
|
--- a/test/configurations/inheritance/gyptest-duplicates.py
|
|
+++ b/test/configurations/inheritance/gyptest-duplicates.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies that configurations do not duplicate other settings.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
test = TestGyp.TestGyp(format='gypd')
|
|
diff --git a/test/copies/gyptest-updir.py b/test/copies/gyptest-updir.py
|
|
index 47a2ca2e1d58..19012d6d2792 100755
|
|
--- a/test/copies/gyptest-updir.py
|
|
+++ b/test/copies/gyptest-updir.py
|
|
@@ -9,8 +9,6 @@ Verifies file copies where the destination is one level above an expansion that
|
|
yields a make variable.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import sys
|
|
|
|
import TestGyp
|
|
diff --git a/test/determinism/gyptest-solibs.py b/test/determinism/gyptest-solibs.py
|
|
index a9c312573bd8..309ce6d9a0a0 100644
|
|
--- a/test/determinism/gyptest-solibs.py
|
|
+++ b/test/determinism/gyptest-solibs.py
|
|
@@ -9,8 +9,6 @@ Verifies builds are the same even with different PYTHONHASHSEEDs.
|
|
Tests all_targets, implicit_deps and solibs.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import os
|
|
import sys
|
|
import TestGyp
|
|
diff --git a/test/determinism/rule.py b/test/determinism/rule.py
|
|
index e18c31455743..9581874234b0 100644
|
|
--- a/test/determinism/rule.py
|
|
+++ b/test/determinism/rule.py
|
|
@@ -3,6 +3,4 @@
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
print('Hello World')
|
|
diff --git a/test/escaping/gyptest-colon.py b/test/escaping/gyptest-colon.py
|
|
index f62f8dc65eaf..115199ee801a 100644
|
|
--- a/test/escaping/gyptest-colon.py
|
|
+++ b/test/escaping/gyptest-colon.py
|
|
@@ -9,8 +9,6 @@ Tests that filenames that contain colons are handled correctly.
|
|
(This is important for absolute paths on Windows.)
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import os
|
|
import sys
|
|
|
|
diff --git a/test/generator-output/gyptest-mac-bundle.py b/test/generator-output/gyptest-mac-bundle.py
|
|
index 14597d8de288..38f4f6fce260 100644
|
|
--- a/test/generator-output/gyptest-mac-bundle.py
|
|
+++ b/test/generator-output/gyptest-mac-bundle.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies mac bundles work with --generator-output.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import sys
|
|
diff --git a/test/ios/gyptest-extension.py b/test/ios/gyptest-extension.py
|
|
index bb239ae5b816..2a7da63a9933 100755
|
|
--- a/test/ios/gyptest-extension.py
|
|
+++ b/test/ios/gyptest-extension.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies that ios app extensions are built correctly.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
import TestMac
|
|
import subprocess
|
|
diff --git a/test/ios/gyptest-per-config-settings.py b/test/ios/gyptest-per-config-settings.py
|
|
index c3a22e05623a..75b76cc7fa0a 100644
|
|
--- a/test/ios/gyptest-per-config-settings.py
|
|
+++ b/test/ios/gyptest-per-config-settings.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies that device and simulator bundles are built correctly.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import plistlib
|
|
import TestGyp
|
|
import os
|
|
diff --git a/test/ios/gyptest-watch.py b/test/ios/gyptest-watch.py
|
|
index 39bab49bb0a4..885637421a15 100755
|
|
--- a/test/ios/gyptest-watch.py
|
|
+++ b/test/ios/gyptest-watch.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies that ios watch extensions and apps are built correctly.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
import TestMac
|
|
|
|
diff --git a/test/lib/TestCmd.py b/test/lib/TestCmd.py
|
|
index 1ec50933a4a8..39da97c212d3 100644
|
|
--- a/test/lib/TestCmd.py
|
|
+++ b/test/lib/TestCmd.py
|
|
@@ -218,106 +218,66 @@ version.
|
|
# AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
|
|
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
__author__ = "Steven Knight <knight at baldmt dot com>"
|
|
__revision__ = "TestCmd.py 0.37.D001 2010/01/11 16:55:50 knight"
|
|
__version__ = "0.37"
|
|
|
|
+from collections import UserList, UserString
|
|
+import atexit
|
|
+import difflib
|
|
import errno
|
|
import os
|
|
import os.path
|
|
import re
|
|
import shutil
|
|
import stat
|
|
+import subprocess
|
|
import sys
|
|
import tempfile
|
|
import time
|
|
import traceback
|
|
-try:
|
|
- from UserList import UserList
|
|
-except ImportError:
|
|
- from collections import UserList
|
|
|
|
__all__ = [
|
|
'diff_re',
|
|
'fail_test',
|
|
'no_result',
|
|
'pass_test',
|
|
'match_exact',
|
|
'match_re',
|
|
'match_re_dotall',
|
|
'python_executable',
|
|
+ 'simple_diff'
|
|
'TestCmd'
|
|
]
|
|
|
|
-try:
|
|
- import difflib
|
|
-except ImportError:
|
|
- __all__.append('simple_diff')
|
|
-
|
|
def is_List(e):
|
|
return (type(e) is list) or isinstance(e, UserList)
|
|
|
|
-try:
|
|
- from UserString import UserString
|
|
-except ImportError:
|
|
- try:
|
|
- from collections import UserString
|
|
- except ImportError:
|
|
- class UserString:
|
|
- pass
|
|
-
|
|
-try:
|
|
- # basestring was removed in python3.
|
|
- basestring
|
|
-except NameError:
|
|
- basestring = str
|
|
-
|
|
def is_String(e):
|
|
- return isinstance(e, basestring) or isinstance(e, UserString)
|
|
+ return isinstance(e, str) or isinstance(e, UserString)
|
|
|
|
tempfile.template = 'testcmd.'
|
|
if os.name in ('posix', 'nt'):
|
|
tempfile.template = 'testcmd.' + str(os.getpid()) + '.'
|
|
else:
|
|
tempfile.template = 'testcmd.'
|
|
|
|
-re_space = re.compile('\s')
|
|
+re_space = re.compile(r'\s')
|
|
|
|
_Cleanup = []
|
|
|
|
_chain_to_exitfunc = None
|
|
|
|
def _clean():
|
|
global _Cleanup
|
|
for test in reversed(_Cleanup):
|
|
if test:
|
|
test.cleanup()
|
|
del _Cleanup[:]
|
|
if _chain_to_exitfunc:
|
|
_chain_to_exitfunc()
|
|
|
|
-try:
|
|
- import atexit
|
|
-except ImportError:
|
|
- # TODO(1.5): atexit requires python 2.0, so chain sys.exitfunc
|
|
- try:
|
|
- _chain_to_exitfunc = sys.exitfunc
|
|
- except AttributeError:
|
|
- pass
|
|
- sys.exitfunc = _clean
|
|
-else:
|
|
- atexit.register(_clean)
|
|
-
|
|
-try:
|
|
- zip
|
|
-except NameError:
|
|
- def zip(*lists):
|
|
- result = []
|
|
- for i in range(min(map(len, lists))):
|
|
- result.append(tuple(map(lambda l, i=i: l[i], lists)))
|
|
- return result
|
|
+atexit.register(_clean)
|
|
|
|
class Collector:
|
|
def __init__(self, top):
|
|
@@ -464,35 +424,30 @@ def match_re_dotall(lines = None, res = None):
|
|
if expr.match(lines):
|
|
return 1
|
|
|
|
-try:
|
|
- import difflib
|
|
-except ImportError:
|
|
- pass
|
|
-else:
|
|
- def simple_diff(a, b, fromfile='', tofile='',
|
|
- fromfiledate='', tofiledate='', n=3, lineterm='\n'):
|
|
- """
|
|
- A function with the same calling signature as difflib.context_diff
|
|
- (diff -c) and difflib.unified_diff (diff -u) but which prints
|
|
- output like the simple, unadorned 'diff" command.
|
|
- """
|
|
- sm = difflib.SequenceMatcher(None, a, b)
|
|
- def comma(x1, x2):
|
|
- return x1+1 == x2 and str(x2) or '%s,%s' % (x1+1, x2)
|
|
- result = []
|
|
- for op, a1, a2, b1, b2 in sm.get_opcodes():
|
|
- if op == 'delete':
|
|
- result.append("%sd%d" % (comma(a1, a2), b1))
|
|
- result.extend(map(lambda l: '< ' + l, a[a1:a2]))
|
|
- elif op == 'insert':
|
|
- result.append("%da%s" % (a1, comma(b1, b2)))
|
|
- result.extend(map(lambda l: '> ' + l, b[b1:b2]))
|
|
- elif op == 'replace':
|
|
- result.append("%sc%s" % (comma(a1, a2), comma(b1, b2)))
|
|
- result.extend(map(lambda l: '< ' + l, a[a1:a2]))
|
|
- result.append('---')
|
|
- result.extend(map(lambda l: '> ' + l, b[b1:b2]))
|
|
- return result
|
|
+def simple_diff(a, b, fromfile='', tofile='',
|
|
+ fromfiledate='', tofiledate='', n=3, lineterm='\n'):
|
|
+ """
|
|
+ A function with the same calling signature as difflib.context_diff
|
|
+ (diff -c) and difflib.unified_diff (diff -u) but which prints
|
|
+ output like the simple, unadorned 'diff" command.
|
|
+ """
|
|
+ sm = difflib.SequenceMatcher(None, a, b)
|
|
+ def comma(x1, x2):
|
|
+ return x1+1 == x2 and str(x2) or '%s,%s' % (x1+1, x2)
|
|
+ result = []
|
|
+ for op, a1, a2, b1, b2 in sm.get_opcodes():
|
|
+ if op == 'delete':
|
|
+ result.append("%sd%d" % (comma(a1, a2), b1))
|
|
+ result.extend(map(lambda l: '< ' + l, a[a1:a2]))
|
|
+ elif op == 'insert':
|
|
+ result.append("%da%s" % (a1, comma(b1, b2)))
|
|
+ result.extend(map(lambda l: '> ' + l, b[b1:b2]))
|
|
+ elif op == 'replace':
|
|
+ result.append("%sc%s" % (comma(a1, a2), comma(b1, b2)))
|
|
+ result.extend(map(lambda l: '< ' + l, a[a1:a2]))
|
|
+ result.append('---')
|
|
+ result.extend(map(lambda l: '> ' + l, b[b1:b2]))
|
|
+ return result
|
|
|
|
def diff_re(a, b, fromfile='', tofile='',
|
|
fromfiledate='', tofiledate='', n=3, lineterm='\n'):
|
|
@@ -578,107 +533,6 @@ else:
|
|
|
|
default_sleep_seconds = 1
|
|
|
|
-
|
|
-
|
|
-try:
|
|
- import subprocess
|
|
-except ImportError:
|
|
- # The subprocess module doesn't exist in this version of Python,
|
|
- # so we're going to cobble up something that looks just enough
|
|
- # like its API for our purposes below.
|
|
- import new
|
|
-
|
|
- subprocess = new.module('subprocess')
|
|
-
|
|
- subprocess.PIPE = 'PIPE'
|
|
- subprocess.STDOUT = 'STDOUT'
|
|
- subprocess.mswindows = (sys.platform == 'win32')
|
|
-
|
|
- try:
|
|
- import popen2
|
|
- popen2.Popen3
|
|
- except AttributeError:
|
|
- class Popen3:
|
|
- universal_newlines = 1
|
|
- def __init__(self, command, **kw):
|
|
- if sys.platform == 'win32' and command[0] == '"':
|
|
- command = '"' + command + '"'
|
|
- (stdin, stdout, stderr) = os.popen3(' ' + command)
|
|
- self.stdin = stdin
|
|
- self.stdout = stdout
|
|
- self.stderr = stderr
|
|
- def close_output(self):
|
|
- self.stdout.close()
|
|
- self.resultcode = self.stderr.close()
|
|
- def wait(self):
|
|
- resultcode = self.resultcode
|
|
- if os.WIFEXITED(resultcode):
|
|
- return os.WEXITSTATUS(resultcode)
|
|
- elif os.WIFSIGNALED(resultcode):
|
|
- return os.WTERMSIG(resultcode)
|
|
- else:
|
|
- return None
|
|
-
|
|
- else:
|
|
- try:
|
|
- popen2.Popen4
|
|
- except AttributeError:
|
|
- # A cribbed Popen4 class, with some retrofitted code from
|
|
- # the Python 1.5 Popen3 class methods to do certain things
|
|
- # by hand.
|
|
- class Popen4(popen2.Popen3):
|
|
- childerr = None
|
|
-
|
|
- def __init__(self, cmd, bufsize=-1):
|
|
- p2cread, p2cwrite = os.pipe()
|
|
- c2pread, c2pwrite = os.pipe()
|
|
- self.pid = os.fork()
|
|
- if self.pid == 0:
|
|
- # Child
|
|
- os.dup2(p2cread, 0)
|
|
- os.dup2(c2pwrite, 1)
|
|
- os.dup2(c2pwrite, 2)
|
|
- for i in range(3, popen2.MAXFD):
|
|
- try:
|
|
- os.close(i)
|
|
- except: pass
|
|
- try:
|
|
- os.execvp(cmd[0], cmd)
|
|
- finally:
|
|
- os._exit(1)
|
|
- # Shouldn't come here, I guess
|
|
- os._exit(1)
|
|
- os.close(p2cread)
|
|
- self.tochild = os.fdopen(p2cwrite, 'w', bufsize)
|
|
- os.close(c2pwrite)
|
|
- self.fromchild = os.fdopen(c2pread, 'r', bufsize)
|
|
- popen2._active.append(self)
|
|
-
|
|
- popen2.Popen4 = Popen4
|
|
-
|
|
- class Popen3(popen2.Popen3, popen2.Popen4):
|
|
- universal_newlines = 1
|
|
- def __init__(self, command, **kw):
|
|
- if kw.get('stderr') == 'STDOUT':
|
|
- popen2.Popen4.__init__(self, command, 1)
|
|
- else:
|
|
- popen2.Popen3.__init__(self, command, 1)
|
|
- self.stdin = self.tochild
|
|
- self.stdout = self.fromchild
|
|
- self.stderr = self.childerr
|
|
- def wait(self, *args, **kw):
|
|
- resultcode = popen2.Popen3.wait(self, *args, **kw)
|
|
- if os.WIFEXITED(resultcode):
|
|
- return os.WEXITSTATUS(resultcode)
|
|
- elif os.WIFSIGNALED(resultcode):
|
|
- return os.WTERMSIG(resultcode)
|
|
- else:
|
|
- return None
|
|
-
|
|
- subprocess.Popen = Popen3
|
|
-
|
|
-
|
|
-
|
|
# From Josiah Carlson,
|
|
# ASPN : Python Cookbook : Module to allow Asynchronous subprocess use on Windows and Posix platforms
|
|
# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/440554
|
|
@@ -872,17 +726,12 @@ class TestCmd(object):
|
|
if diff is not None:
|
|
self.diff_function = diff
|
|
else:
|
|
- try:
|
|
- difflib
|
|
- except NameError:
|
|
- pass
|
|
- else:
|
|
- self.diff_function = simple_diff
|
|
- #self.diff_function = difflib.context_diff
|
|
- #self.diff_function = difflib.unified_diff
|
|
+ self.diff_function = simple_diff
|
|
+ #self.diff_function = difflib.context_diff
|
|
+ #self.diff_function = difflib.unified_diff
|
|
self._dirlist = []
|
|
self._preserve = {'pass_test': 0, 'fail_test': 0, 'no_result': 0}
|
|
- if 'PRESERVE' in os.environ and os.environ['PRESERVE'] is not '':
|
|
+ if 'PRESERVE' in os.environ and os.environ['PRESERVE'] != '':
|
|
self._preserve['pass_test'] = os.environ['PRESERVE']
|
|
self._preserve['fail_test'] = os.environ['PRESERVE']
|
|
self._preserve['no_result'] = os.environ['PRESERVE']
|
|
@@ -1024,21 +873,12 @@ class TestCmd(object):
|
|
"""
|
|
self.description = description
|
|
|
|
- try:
|
|
- difflib
|
|
- except NameError:
|
|
- def diff(self, a, b, name, *args, **kw):
|
|
- print(self.banner('Expected %s' % name))
|
|
- print(a)
|
|
- print(self.banner('Actual %s' % name))
|
|
- print(b)
|
|
- else:
|
|
- def diff(self, a, b, name, *args, **kw):
|
|
- print(self.banner(name))
|
|
- args = (a.splitlines(), b.splitlines()) + args
|
|
- lines = self.diff_function(*args, **kw)
|
|
- for l in lines:
|
|
- print(l)
|
|
+ def diff(self, a, b, name, *args, **kw):
|
|
+ print(self.banner(name))
|
|
+ args = (a.splitlines(), b.splitlines()) + args
|
|
+ lines = self.diff_function(*args, **kw)
|
|
+ for l in lines:
|
|
+ print(l)
|
|
|
|
def fail_test(self, condition = 1, function = None, skip = 0):
|
|
"""Cause the test to fail.
|
|
@@ -1103,7 +943,7 @@ class TestCmd(object):
|
|
the temporary working directories to be preserved for all
|
|
conditions.
|
|
"""
|
|
- if conditions is ():
|
|
+ if len(conditions) == 0:
|
|
conditions = ('pass_test', 'fail_test', 'no_result')
|
|
for cond in conditions:
|
|
self._preserve[cond] = 1
|
|
diff --git a/test/lib/TestCommon.py b/test/lib/TestCommon.py
|
|
index 6850ce9ada37..80527a29e660 100644
|
|
--- a/test/lib/TestCommon.py
|
|
+++ b/test/lib/TestCommon.py
|
|
@@ -92,21 +92,16 @@ The TestCommon module also provides the following variables
|
|
# AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
|
|
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
__author__ = "Steven Knight <knight at baldmt dot com>"
|
|
__revision__ = "TestCommon.py 0.37.D001 2010/01/11 16:55:50 knight"
|
|
__version__ = "0.37"
|
|
|
|
+from collections import UserList
|
|
import copy
|
|
import os
|
|
import os.path
|
|
import stat
|
|
import sys
|
|
-try:
|
|
- from UserList import UserList
|
|
-except ImportError:
|
|
- from collections import UserList
|
|
|
|
from TestCmd import *
|
|
from TestCmd import __all__
|
|
diff --git a/test/lib/TestGyp.py b/test/lib/TestGyp.py
|
|
index 2aa78684f517..deff3f21c511 100644
|
|
--- a/test/lib/TestGyp.py
|
|
+++ b/test/lib/TestGyp.py
|
|
@@ -5,21 +5,18 @@
|
|
"""
|
|
TestGyp.py: a testing framework for GYP integration tests.
|
|
"""
|
|
-from __future__ import print_function
|
|
-
|
|
+from collections.abc import Iterable
|
|
import errno
|
|
import itertools
|
|
import os
|
|
import re
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
import tempfile
|
|
|
|
from contextlib import contextmanager
|
|
|
|
-from six.moves import collections_abc
|
|
-
|
|
import TestCmd
|
|
import TestCommon
|
|
from TestCommon import __all__
|
|
@@ -497,7 +494,7 @@ class TestGypCMake(TestGypBase):
|
|
if status is None:
|
|
kw['status'] = None
|
|
else:
|
|
- if not isinstance(status, collections_abc.Iterable): status = (status,)
|
|
+ if not isinstance(status, Iterable): status = (status,)
|
|
kw['status'] = list(itertools.chain((0,), status))
|
|
self.cmake_build(gyp_file, target, **kw)
|
|
kw['status'] = status
|
|
@@ -743,7 +740,7 @@ def FindVisualStudioInstallation():
|
|
build_tool = None
|
|
if not build_tool:
|
|
args1 = ['reg', 'query',
|
|
- 'HKLM\Software\Microsoft\VisualStudio\SxS\VS7',
|
|
+ r'HKLM\Software\Microsoft\VisualStudio\SxS\VS7',
|
|
'/v', '15.0', '/reg:32']
|
|
build_tool = subprocess.check_output(args1).decode(
|
|
'utf-8', 'ignore').strip().split(b'\r\n').pop().split(b' ').pop()
|
|
diff --git a/test/lib/TestMac.py b/test/lib/TestMac.py
|
|
index d13afd5781f8..e92fbd14bcba 100644
|
|
--- a/test/lib/TestMac.py
|
|
+++ b/test/lib/TestMac.py
|
|
@@ -6,8 +6,6 @@
|
|
TestMac.py: a collection of helper function shared between test on Mac OS X.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import re
|
|
import subprocess
|
|
|
|
diff --git a/test/library/gyptest-shared-obj-install-path.py b/test/library/gyptest-shared-obj-install-path.py
|
|
index af335365f98e..021e340ab609 100755
|
|
--- a/test/library/gyptest-shared-obj-install-path.py
|
|
+++ b/test/library/gyptest-shared-obj-install-path.py
|
|
@@ -9,9 +9,6 @@ Verifies that .so files that are order only dependencies are specified by
|
|
their install location rather than by their alias.
|
|
"""
|
|
|
|
-# Python 2.5 needs this for the with statement.
|
|
-from __future__ import with_statement
|
|
-
|
|
import os
|
|
import TestGyp
|
|
|
|
diff --git a/test/linux/ldflags-duplicates/check-ldflags.py b/test/linux/ldflags-duplicates/check-ldflags.py
|
|
index ef1029529d51..ff783185c60e 100755
|
|
--- a/test/linux/ldflags-duplicates/check-ldflags.py
|
|
+++ b/test/linux/ldflags-duplicates/check-ldflags.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies duplicate ldflags are not removed.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import sys
|
|
|
|
def CheckContainsFlags(args, substring):
|
|
diff --git a/test/mac/gyptest-app-assets-catalog.py b/test/mac/gyptest-app-assets-catalog.py
|
|
index 7b1c0f67deeb..6834b22e6468 100755
|
|
--- a/test/mac/gyptest-app-assets-catalog.py
|
|
+++ b/test/mac/gyptest-app-assets-catalog.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies that app bundles are built correctly.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
import TestMac
|
|
|
|
diff --git a/test/mac/gyptest-app-error.py b/test/mac/gyptest-app-error.py
|
|
index df0781d45562..02bfa348b619 100755
|
|
--- a/test/mac/gyptest-app-error.py
|
|
+++ b/test/mac/gyptest-app-error.py
|
|
@@ -8,42 +8,41 @@
|
|
Verifies that invalid strings files cause the build to fail.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestCmd
|
|
import TestGyp
|
|
|
|
import sys
|
|
|
|
if sys.platform == 'darwin':
|
|
print("This test is currently disabled: https://crbug.com/483696.")
|
|
sys.exit(0)
|
|
|
|
expected_error = 'Old-style plist parser: missing semicolon in dictionary'
|
|
- saw_expected_error = [False] # Python2 has no "nonlocal" keyword.
|
|
+ saw_expected_error = False
|
|
def match(a, b):
|
|
+ nonlocal saw_expected_error
|
|
if a == b:
|
|
return True
|
|
if not TestCmd.is_List(a):
|
|
a = a.split('\n')
|
|
if not TestCmd.is_List(b):
|
|
b = b.split('\n')
|
|
if expected_error in '\n'.join(a) + '\n'.join(b):
|
|
- saw_expected_error[0] = True
|
|
+ saw_expected_error = True
|
|
return True
|
|
return False
|
|
test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode'], match=match)
|
|
|
|
test.run_gyp('test-error.gyp', chdir='app-bundle')
|
|
|
|
test.build('test-error.gyp', test.ALL, chdir='app-bundle')
|
|
|
|
# Ninja pipes stderr of subprocesses to stdout.
|
|
if test.format in ['ninja', 'xcode-ninja'] \
|
|
and expected_error in test.stdout():
|
|
- saw_expected_error[0] = True
|
|
+ saw_expected_error = True
|
|
|
|
- if saw_expected_error[0]:
|
|
+ if saw_expected_error:
|
|
test.pass_test()
|
|
else:
|
|
test.fail_test()
|
|
diff --git a/test/mac/gyptest-app.py b/test/mac/gyptest-app.py
|
|
index 16c96403733e..3754e5a3fd97 100755
|
|
--- a/test/mac/gyptest-app.py
|
|
+++ b/test/mac/gyptest-app.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies that app bundles are built correctly.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
import TestMac
|
|
|
|
diff --git a/test/mac/gyptest-bundle-resources.py b/test/mac/gyptest-bundle-resources.py
|
|
index 275cdbaa54a2..45b28f438dd0 100644
|
|
--- a/test/mac/gyptest-bundle-resources.py
|
|
+++ b/test/mac/gyptest-bundle-resources.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies things related to bundle resources.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import os
|
|
diff --git a/test/mac/gyptest-copies.py b/test/mac/gyptest-copies.py
|
|
index 838c62dc37b7..59156e5054f3 100755
|
|
--- a/test/mac/gyptest-copies.py
|
|
+++ b/test/mac/gyptest-copies.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies that 'copies' with app bundles are handled correctly.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import os
|
|
diff --git a/test/mac/gyptest-depend-on-bundle.py b/test/mac/gyptest-depend-on-bundle.py
|
|
index b8b06d4cc009..568f741034b9 100644
|
|
--- a/test/mac/gyptest-depend-on-bundle.py
|
|
+++ b/test/mac/gyptest-depend-on-bundle.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies that a dependency on a bundle causes the whole bundle to be built.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import sys
|
|
diff --git a/test/mac/gyptest-framework.py b/test/mac/gyptest-framework.py
|
|
index faf05cf31391..5b762aecd60d 100755
|
|
--- a/test/mac/gyptest-framework.py
|
|
+++ b/test/mac/gyptest-framework.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies that app bundles are built correctly.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import os
|
|
diff --git a/test/mac/gyptest-infoplist-process.py b/test/mac/gyptest-infoplist-process.py
|
|
index 24260e1c3498..dff099135673 100755
|
|
--- a/test/mac/gyptest-infoplist-process.py
|
|
+++ b/test/mac/gyptest-infoplist-process.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies the Info.plist preprocessor functionality.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import sys
|
|
diff --git a/test/mac/gyptest-installname.py b/test/mac/gyptest-installname.py
|
|
index 17831aeaf432..0cc80d920085 100644
|
|
--- a/test/mac/gyptest-installname.py
|
|
+++ b/test/mac/gyptest-installname.py
|
|
@@ -9,8 +9,6 @@ Verifies that LD_DYLIB_INSTALL_NAME and DYLIB_INSTALL_NAME_BASE are handled
|
|
correctly.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import re
|
|
diff --git a/test/mac/gyptest-ldflags-passed-to-libtool.py b/test/mac/gyptest-ldflags-passed-to-libtool.py
|
|
index e24e305d9fe5..5c9c17b3f4a9 100644
|
|
--- a/test/mac/gyptest-ldflags-passed-to-libtool.py
|
|
+++ b/test/mac/gyptest-ldflags-passed-to-libtool.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies that OTHER_LDFLAGS is passed to libtool.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import sys
|
|
diff --git a/test/mac/gyptest-loadable-module.py b/test/mac/gyptest-loadable-module.py
|
|
index 77dde1d6cd19..19242b040b5c 100755
|
|
--- a/test/mac/gyptest-loadable-module.py
|
|
+++ b/test/mac/gyptest-loadable-module.py
|
|
@@ -8,8 +8,6 @@
|
|
Tests that a loadable_module target is built correctly.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import os
|
|
diff --git a/test/mac/gyptest-missing-cfbundlesignature.py b/test/mac/gyptest-missing-cfbundlesignature.py
|
|
index be66492467c8..0289c92e3191 100644
|
|
--- a/test/mac/gyptest-missing-cfbundlesignature.py
|
|
+++ b/test/mac/gyptest-missing-cfbundlesignature.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies that an Info.plist with CFBundleSignature works.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import sys
|
|
diff --git a/test/mac/gyptest-non-strs-flattened-to-env.py b/test/mac/gyptest-non-strs-flattened-to-env.py
|
|
index cb42a939d4ca..571c12523b12 100644
|
|
--- a/test/mac/gyptest-non-strs-flattened-to-env.py
|
|
+++ b/test/mac/gyptest-non-strs-flattened-to-env.py
|
|
@@ -9,8 +9,6 @@ Verifies that list xcode_settings are flattened before being exported to the
|
|
environment.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import sys
|
|
diff --git a/test/mac/gyptest-postbuild-defaults.py b/test/mac/gyptest-postbuild-defaults.py
|
|
index 0f7d25bd89b7..f223e354a5c2 100644
|
|
--- a/test/mac/gyptest-postbuild-defaults.py
|
|
+++ b/test/mac/gyptest-postbuild-defaults.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies that a postbuild invoking |defaults| works.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import sys
|
|
diff --git a/test/mac/gyptest-postbuild-fail.py b/test/mac/gyptest-postbuild-fail.py
|
|
index 1a229df6955e..2369e2d0ff1d 100755
|
|
--- a/test/mac/gyptest-postbuild-fail.py
|
|
+++ b/test/mac/gyptest-postbuild-fail.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies that a failing postbuild step lets the build fail.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import sys
|
|
diff --git a/test/mac/gyptest-rebuild.py b/test/mac/gyptest-rebuild.py
|
|
index c7d8cad02d55..4473ce73511d 100755
|
|
--- a/test/mac/gyptest-rebuild.py
|
|
+++ b/test/mac/gyptest-rebuild.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies that app bundles are rebuilt correctly.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import sys
|
|
diff --git a/test/mac/gyptest-sdkroot.py b/test/mac/gyptest-sdkroot.py
|
|
index f8edbaa583de..38733d3f7787 100644
|
|
--- a/test/mac/gyptest-sdkroot.py
|
|
+++ b/test/mac/gyptest-sdkroot.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies that setting SDKROOT works.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import os
|
|
diff --git a/test/mac/gyptest-sourceless-module.py b/test/mac/gyptest-sourceless-module.py
|
|
index f2801c20aa23..a1280c97fe62 100644
|
|
--- a/test/mac/gyptest-sourceless-module.py
|
|
+++ b/test/mac/gyptest-sourceless-module.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies that bundles that have no 'sources' (pure resource containers) work.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import sys
|
|
diff --git a/test/mac/gyptest-strip-default.py b/test/mac/gyptest-strip-default.py
|
|
index b851782fd52d..aa997152cd43 100644
|
|
--- a/test/mac/gyptest-strip-default.py
|
|
+++ b/test/mac/gyptest-strip-default.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies that the default STRIP_STYLEs match between different generators.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import re
|
|
diff --git a/test/mac/gyptest-strip.py b/test/mac/gyptest-strip.py
|
|
index d4694834ac40..b5586f2f6739 100755
|
|
--- a/test/mac/gyptest-strip.py
|
|
+++ b/test/mac/gyptest-strip.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies that stripping works.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
import TestMac
|
|
|
|
diff --git a/test/mac/gyptest-swift-library.py b/test/mac/gyptest-swift-library.py
|
|
index d3433753fd07..961128a3756f 100644
|
|
--- a/test/mac/gyptest-swift-library.py
|
|
+++ b/test/mac/gyptest-swift-library.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies that a swift framework builds correctly.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
import TestMac
|
|
|
|
diff --git a/test/mac/gyptest-xcode-env-order.py b/test/mac/gyptest-xcode-env-order.py
|
|
index bda19988b2fc..9898c226ee29 100755
|
|
--- a/test/mac/gyptest-xcode-env-order.py
|
|
+++ b/test/mac/gyptest-xcode-env-order.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies that dependent Xcode settings are processed correctly.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
import TestMac
|
|
|
|
diff --git a/test/make/gyptest-noload.py b/test/make/gyptest-noload.py
|
|
index 1f5103315cfc..0a9a218d2316 100755
|
|
--- a/test/make/gyptest-noload.py
|
|
+++ b/test/make/gyptest-noload.py
|
|
@@ -9,9 +9,6 @@ Tests the use of the NO_LOAD flag which makes loading sub .mk files
|
|
optional.
|
|
"""
|
|
|
|
-# Python 2.5 needs this for the with statement.
|
|
-from __future__ import with_statement
|
|
-
|
|
import os
|
|
import TestGyp
|
|
|
|
diff --git a/test/make_global_settings/basics/gyptest-make_global_settings.py b/test/make_global_settings/basics/gyptest-make_global_settings.py
|
|
index 8f48875967d3..9df9ac15de63 100644
|
|
--- a/test/make_global_settings/basics/gyptest-make_global_settings.py
|
|
+++ b/test/make_global_settings/basics/gyptest-make_global_settings.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies make_global_settings.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import os
|
|
import sys
|
|
import TestGyp
|
|
diff --git a/test/make_global_settings/env-wrapper/gyptest-wrapper.py b/test/make_global_settings/env-wrapper/gyptest-wrapper.py
|
|
index 409799e315a1..f7549a8b7920 100644
|
|
--- a/test/make_global_settings/env-wrapper/gyptest-wrapper.py
|
|
+++ b/test/make_global_settings/env-wrapper/gyptest-wrapper.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies *_wrapper in environment.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import os
|
|
import sys
|
|
import TestGyp
|
|
diff --git a/test/make_global_settings/full-toolchain/gyptest-make_global_settings.py b/test/make_global_settings/full-toolchain/gyptest-make_global_settings.py
|
|
index 542fd631c249..def79a0c3ac9 100644
|
|
--- a/test/make_global_settings/full-toolchain/gyptest-make_global_settings.py
|
|
+++ b/test/make_global_settings/full-toolchain/gyptest-make_global_settings.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies make_global_settings works with the full toolchain.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import os
|
|
import sys
|
|
import TestGyp
|
|
diff --git a/test/make_global_settings/full-toolchain/my_nm.py b/test/make_global_settings/full-toolchain/my_nm.py
|
|
index 2c4e678110bb..578d680bc545 100755
|
|
--- a/test/make_global_settings/full-toolchain/my_nm.py
|
|
+++ b/test/make_global_settings/full-toolchain/my_nm.py
|
|
@@ -2,7 +2,6 @@
|
|
# Copyright (c) 2014 Google Inc. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
-from __future__ import print_function
|
|
import sys
|
|
print(sys.argv)
|
|
with open('RAN_MY_NM', 'w') as f:
|
|
diff --git a/test/make_global_settings/full-toolchain/my_readelf.py b/test/make_global_settings/full-toolchain/my_readelf.py
|
|
index 626665435e68..6ec7c9ea22b7 100755
|
|
--- a/test/make_global_settings/full-toolchain/my_readelf.py
|
|
+++ b/test/make_global_settings/full-toolchain/my_readelf.py
|
|
@@ -2,7 +2,6 @@
|
|
# Copyright (c) 2014 Google Inc. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
-from __future__ import print_function
|
|
import sys
|
|
print(sys.argv)
|
|
with open('RAN_MY_READELF', 'w') as f:
|
|
diff --git a/test/make_global_settings/wrapper/gyptest-wrapper.py b/test/make_global_settings/wrapper/gyptest-wrapper.py
|
|
index 7ef4314b3e8c..55a4f822f989 100644
|
|
--- a/test/make_global_settings/wrapper/gyptest-wrapper.py
|
|
+++ b/test/make_global_settings/wrapper/gyptest-wrapper.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies *_wrapper in make_global_settings.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import os
|
|
import sys
|
|
import TestGyp
|
|
diff --git a/test/many-actions/gyptest-many-actions-unsorted.py b/test/many-actions/gyptest-many-actions-unsorted.py
|
|
index 6927d1c7a750..47779fd4362f 100644
|
|
--- a/test/many-actions/gyptest-many-actions-unsorted.py
|
|
+++ b/test/many-actions/gyptest-many-actions-unsorted.py
|
|
@@ -9,8 +9,6 @@ Make sure lots of actions in the same target don't cause exceeding command
|
|
line length.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import sys
|
|
|
|
if sys.platform == 'win32':
|
|
diff --git a/test/many-actions/gyptest-many-actions.py b/test/many-actions/gyptest-many-actions.py
|
|
index 4a525d32d65d..aec9bedd8bc3 100644
|
|
--- a/test/many-actions/gyptest-many-actions.py
|
|
+++ b/test/many-actions/gyptest-many-actions.py
|
|
@@ -9,8 +9,6 @@ Make sure lots of actions in the same target don't cause exceeding command
|
|
line length.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import sys
|
|
|
|
if sys.platform == 'win32':
|
|
diff --git a/test/msvs/config_attrs/gyptest-config_attrs.py b/test/msvs/config_attrs/gyptest-config_attrs.py
|
|
index 29a8022bd4ee..b01f3c93110c 100644
|
|
--- a/test/msvs/config_attrs/gyptest-config_attrs.py
|
|
+++ b/test/msvs/config_attrs/gyptest-config_attrs.py
|
|
@@ -10,8 +10,6 @@ msbuild_configuration_attributes are applied by using
|
|
them to set the OutputDirectory.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
import os
|
|
|
|
diff --git a/test/msvs/rules_stdout_stderr/rule_stderr.py b/test/msvs/rules_stdout_stderr/rule_stderr.py
|
|
index 2081513ec883..fc1b04331c71 100644
|
|
--- a/test/msvs/rules_stdout_stderr/rule_stderr.py
|
|
+++ b/test/msvs/rules_stdout_stderr/rule_stderr.py
|
|
@@ -3,6 +3,5 @@
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
-from __future__ import print_function
|
|
import sys
|
|
print("This will go to stderr", file=sys.stderr)
|
|
diff --git a/test/msvs/rules_stdout_stderr/rule_stdout.py b/test/msvs/rules_stdout_stderr/rule_stdout.py
|
|
index 4c073ebc4537..0dd17dbad85c 100644
|
|
--- a/test/msvs/rules_stdout_stderr/rule_stdout.py
|
|
+++ b/test/msvs/rules_stdout_stderr/rule_stdout.py
|
|
@@ -3,5 +3,4 @@
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
-from __future__ import print_function
|
|
print("This will go to stdout")
|
|
diff --git a/test/ninja/action_dependencies/gyptest-action-dependencies.py b/test/ninja/action_dependencies/gyptest-action-dependencies.py
|
|
index 89813bab17e3..16556ef9a850 100755
|
|
--- a/test/ninja/action_dependencies/gyptest-action-dependencies.py
|
|
+++ b/test/ninja/action_dependencies/gyptest-action-dependencies.py
|
|
@@ -9,8 +9,6 @@ Verify that building an object file correctly depends on running actions in
|
|
dependent targets, but not the targets themselves.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import os
|
|
import sys
|
|
|
|
diff --git a/test/ninja/solibs_avoid_relinking/gyptest-solibs-avoid-relinking.py b/test/ninja/solibs_avoid_relinking/gyptest-solibs-avoid-relinking.py
|
|
index fd4470ac2378..b8277509deb3 100755
|
|
--- a/test/ninja/solibs_avoid_relinking/gyptest-solibs-avoid-relinking.py
|
|
+++ b/test/ninja/solibs_avoid_relinking/gyptest-solibs-avoid-relinking.py
|
|
@@ -9,8 +9,6 @@ Verify that relinking a solib doesn't relink a dependent executable if the
|
|
solib's public API hasn't changed.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import os
|
|
import sys
|
|
import TestCommon
|
|
diff --git a/test/rules-dirname/gyptest-dirname.py b/test/rules-dirname/gyptest-dirname.py
|
|
index da5429cbad4e..efe7b2eee7f1 100755
|
|
--- a/test/rules-dirname/gyptest-dirname.py
|
|
+++ b/test/rules-dirname/gyptest-dirname.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies simple rules when using an explicit build target of 'all'.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
import os
|
|
import sys
|
|
diff --git a/test/rules-variables/gyptest-rules-variables.py b/test/rules-variables/gyptest-rules-variables.py
|
|
index 16afc22ef9b7..c8a95704fe45 100755
|
|
--- a/test/rules-variables/gyptest-rules-variables.py
|
|
+++ b/test/rules-variables/gyptest-rules-variables.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies rules related variables are expanded.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import sys
|
|
|
|
if sys.platform == 'win32':
|
|
diff --git a/test/rules/gyptest-all.py b/test/rules/gyptest-all.py
|
|
index 0520c2f6a034..4aa925d5018e 100755
|
|
--- a/test/rules/gyptest-all.py
|
|
+++ b/test/rules/gyptest-all.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies simple rules when using an explicit build target of 'all'.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import sys
|
|
|
|
if sys.platform == 'win32':
|
|
diff --git a/test/rules/gyptest-default.py b/test/rules/gyptest-default.py
|
|
index 5d01094197bb..29c9ea97e664 100755
|
|
--- a/test/rules/gyptest-default.py
|
|
+++ b/test/rules/gyptest-default.py
|
|
@@ -8,8 +8,6 @@
|
|
Verifies simple rules when using an explicit build target of 'all'.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import sys
|
|
|
|
if sys.platform == 'win32':
|
|
diff --git a/test/standalone/gyptest-standalone.py b/test/standalone/gyptest-standalone.py
|
|
index 0581d5387954..423b97a4cb37 100644
|
|
--- a/test/standalone/gyptest-standalone.py
|
|
+++ b/test/standalone/gyptest-standalone.py
|
|
@@ -9,8 +9,6 @@ Verifies that a project hierarchy created with the --generator-output=
|
|
option can be built even when it's relocated to a different path.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
import os
|
|
|
|
diff --git a/test/variables/commands/gyptest-commands-ignore-env.py b/test/variables/commands/gyptest-commands-ignore-env.py
|
|
index 5470d5ce3645..6d1cdbd0cefc 100755
|
|
--- a/test/variables/commands/gyptest-commands-ignore-env.py
|
|
+++ b/test/variables/commands/gyptest-commands-ignore-env.py
|
|
@@ -9,7 +9,6 @@ Test that environment variables are ignored when --ignore-environment is
|
|
specified.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
import os
|
|
|
|
import TestGyp
|
|
diff --git a/test/variables/commands/gyptest-commands-repeated.py b/test/variables/commands/gyptest-commands-repeated.py
|
|
index fcf98ee02ad2..eb76542250e1 100755
|
|
--- a/test/variables/commands/gyptest-commands-repeated.py
|
|
+++ b/test/variables/commands/gyptest-commands-repeated.py
|
|
@@ -9,8 +9,6 @@ Test variable expansion of '<!()' syntax commands where they are evaluated
|
|
more then once..
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
test = TestGyp.TestGyp(format='gypd')
|
|
diff --git a/test/variables/commands/gyptest-commands.py b/test/variables/commands/gyptest-commands.py
|
|
index 3251120ff477..1b0d256eb00b 100755
|
|
--- a/test/variables/commands/gyptest-commands.py
|
|
+++ b/test/variables/commands/gyptest-commands.py
|
|
@@ -8,7 +8,6 @@
|
|
Test variable expansion of '<!()' syntax commands.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
import os
|
|
|
|
import TestGyp
|
|
diff --git a/test/variables/commands/repeated_multidir/print_cwd_basename.py b/test/variables/commands/repeated_multidir/print_cwd_basename.py
|
|
index 9b206bb3d431..52c99e0c8c3f 100755
|
|
--- a/test/variables/commands/repeated_multidir/print_cwd_basename.py
|
|
+++ b/test/variables/commands/repeated_multidir/print_cwd_basename.py
|
|
@@ -4,7 +4,6 @@
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
-from __future__ import print_function
|
|
import os
|
|
import os.path
|
|
|
|
diff --git a/test/variables/commands/test.py b/test/variables/commands/test.py
|
|
index eb64f953837f..854089696cd8 100644
|
|
--- a/test/variables/commands/test.py
|
|
+++ b/test/variables/commands/test.py
|
|
@@ -2,6 +2,4 @@
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
print("sample\\path\\foo.cpp")
|
|
diff --git a/test/variables/filelist/gyptest-filelist-golden.py b/test/variables/filelist/gyptest-filelist-golden.py
|
|
index 3ddc6698f8ac..7162043390ca 100644
|
|
--- a/test/variables/filelist/gyptest-filelist-golden.py
|
|
+++ b/test/variables/filelist/gyptest-filelist-golden.py
|
|
@@ -8,8 +8,6 @@
|
|
Test variable expansion of '<|(list.txt ...)' syntax commands.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import os
|
|
import sys
|
|
|
|
diff --git a/test/win/gyptest-cl-enable-enhanced-instruction-set.py b/test/win/gyptest-cl-enable-enhanced-instruction-set.py
|
|
index f34e67112527..c5ca9adbaf28 100644
|
|
--- a/test/win/gyptest-cl-enable-enhanced-instruction-set.py
|
|
+++ b/test/win/gyptest-cl-enable-enhanced-instruction-set.py
|
|
@@ -8,8 +8,6 @@
|
|
Test VCCLCompilerTool EnableEnhancedInstructionSet setting.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import os
|
|
diff --git a/test/win/gyptest-cl-function-level-linking.py b/test/win/gyptest-cl-function-level-linking.py
|
|
index 6ad7b8c48490..bcc03de59407 100644
|
|
--- a/test/win/gyptest-cl-function-level-linking.py
|
|
+++ b/test/win/gyptest-cl-function-level-linking.py
|
|
@@ -8,8 +8,6 @@
|
|
Make sure function-level linking setting is extracted properly.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import sys
|
|
diff --git a/test/win/gyptest-command-quote.py b/test/win/gyptest-command-quote.py
|
|
index 656a69da5302..1006cd6285e6 100644
|
|
--- a/test/win/gyptest-command-quote.py
|
|
+++ b/test/win/gyptest-command-quote.py
|
|
@@ -12,8 +12,6 @@ application in the path. Specifically, this means not quoting something like
|
|
than calling "x.bat".
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import sys
|
|
diff --git a/test/win/gyptest-link-defrelink.py b/test/win/gyptest-link-defrelink.py
|
|
index cb3f86bb0e51..5ca7277cd73e 100644
|
|
--- a/test/win/gyptest-link-defrelink.py
|
|
+++ b/test/win/gyptest-link-defrelink.py
|
|
@@ -8,8 +8,6 @@
|
|
Make sure a relink is performed when a .def file is touched.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import sys
|
|
diff --git a/test/win/gyptest-link-enable-uac.py b/test/win/gyptest-link-enable-uac.py
|
|
index 0ddbde5fa550..5749e1c341fa 100644
|
|
--- a/test/win/gyptest-link-enable-uac.py
|
|
+++ b/test/win/gyptest-link-enable-uac.py
|
|
@@ -68,36 +68,28 @@ if sys.platform == 'win32':
|
|
test.fail_test(len(execution_level) != 1)
|
|
execution_level = execution_level[0].attributes
|
|
|
|
- def _has_key(node, key):
|
|
- # 'in' doesn't work with the NamedNodeMap interface in Python2,
|
|
- # but 'has_key' was removed from it in Python3, so we need to
|
|
- # shim things :(.
|
|
- if hasattr(node, 'has_key'):
|
|
- return node.has_key(key)
|
|
- return key in node
|
|
-
|
|
test.fail_test(not (
|
|
- _has_key(execution_level, 'level') and
|
|
- _has_key(execution_level, 'uiAccess') and
|
|
+ 'level' in execution_level and
|
|
+ 'uiAccess' in execution_level and
|
|
execution_level['level'].nodeValue == 'asInvoker' and
|
|
execution_level['uiAccess'].nodeValue == 'false'))
|
|
|
|
# Verify that <requestedExecutionLevel> is not in the menifest.
|
|
manifest = parseString(extract_manifest(
|
|
test.built_file_path('enable_uac_no.exe', chdir=CHDIR), 1))
|
|
execution_level = manifest.getElementsByTagName('requestedExecutionLevel')
|
|
test.fail_test(len(execution_level) != 0)
|
|
|
|
# Verify that <requestedExecutionLevel level="requireAdministrator"
|
|
# uiAccess="true" /> is present.
|
|
manifest = parseString(extract_manifest(
|
|
test.built_file_path('enable_uac_admin.exe', chdir=CHDIR), 1))
|
|
execution_level = manifest.getElementsByTagName('requestedExecutionLevel')
|
|
test.fail_test(len(execution_level) != 1)
|
|
execution_level = execution_level[0].attributes
|
|
test.fail_test(not (
|
|
- _has_key(execution_level, 'level') and
|
|
- _has_key(execution_level, 'uiAccess') and
|
|
+ 'level' in execution_level and
|
|
+ 'uiAccess' in execution_level and
|
|
execution_level['level'].nodeValue == 'requireAdministrator' and
|
|
execution_level['uiAccess'].nodeValue == 'true'))
|
|
|
|
diff --git a/test/win/gyptest-link-enable-winrt-app-revision.py b/test/win/gyptest-link-enable-winrt-app-revision.py
|
|
index 45d86e1c69df..34a51dbdf5c9 100644
|
|
--- a/test/win/gyptest-link-enable-winrt-app-revision.py
|
|
+++ b/test/win/gyptest-link-enable-winrt-app-revision.py
|
|
@@ -8,8 +8,6 @@
|
|
Make sure msvs_application_type_revision works correctly.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import os
|
|
diff --git a/test/win/gyptest-link-enable-winrt-target-platform-version.py b/test/win/gyptest-link-enable-winrt-target-platform-version.py
|
|
index 877cb68f8ceb..87e51d2d3ad2 100644
|
|
--- a/test/win/gyptest-link-enable-winrt-target-platform-version.py
|
|
+++ b/test/win/gyptest-link-enable-winrt-target-platform-version.py
|
|
@@ -8,8 +8,6 @@
|
|
Make sure msvs_target_platform_version works correctly.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import os
|
|
diff --git a/test/win/gyptest-link-enable-winrt.py b/test/win/gyptest-link-enable-winrt.py
|
|
index 5e0493aade42..2b8844d54a77 100644
|
|
--- a/test/win/gyptest-link-enable-winrt.py
|
|
+++ b/test/win/gyptest-link-enable-winrt.py
|
|
@@ -8,8 +8,6 @@
|
|
Make sure msvs_enable_winrt works correctly.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import os
|
|
diff --git a/test/win/gyptest-link-large-pdb.py b/test/win/gyptest-link-large-pdb.py
|
|
index 1fb27b0ab716..b89ef1c13690 100644
|
|
--- a/test/win/gyptest-link-large-pdb.py
|
|
+++ b/test/win/gyptest-link-large-pdb.py
|
|
@@ -8,8 +8,6 @@
|
|
Make sure msvs_large_pdb works correctly.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import struct
|
|
diff --git a/test/win/gyptest-link-ordering.py b/test/win/gyptest-link-ordering.py
|
|
index ed8ee98c9e67..44f2889ab687 100644
|
|
--- a/test/win/gyptest-link-ordering.py
|
|
+++ b/test/win/gyptest-link-ordering.py
|
|
@@ -8,8 +8,6 @@
|
|
Make sure the link order of object files is the same between msvs and ninja.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import sys
|
|
diff --git a/test/win/gyptest-link-restat-importlib.py b/test/win/gyptest-link-restat-importlib.py
|
|
index d249e0a6bdca..5d1f6777e662 100644
|
|
--- a/test/win/gyptest-link-restat-importlib.py
|
|
+++ b/test/win/gyptest-link-restat-importlib.py
|
|
@@ -9,8 +9,6 @@ Make sure we don't cause unnecessary builds due to import libs appearing
|
|
to be out of date.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import os
|
|
diff --git a/test/win/gyptest-macro-targetfilename.py b/test/win/gyptest-macro-targetfilename.py
|
|
index 759e26c5669b..817e4fa88a90 100644
|
|
--- a/test/win/gyptest-macro-targetfilename.py
|
|
+++ b/test/win/gyptest-macro-targetfilename.py
|
|
@@ -8,8 +8,6 @@
|
|
Make sure macro expansion of $(TargetFileName) is handled.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import os
|
|
diff --git a/test/win/gyptest-rc-build.py b/test/win/gyptest-rc-build.py
|
|
index 4df33ab5d959..16bae51bf7f0 100644
|
|
--- a/test/win/gyptest-rc-build.py
|
|
+++ b/test/win/gyptest-rc-build.py
|
|
@@ -8,8 +8,6 @@
|
|
Make sure we build and include .rc files.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import TestGyp
|
|
|
|
import sys
|
|
diff --git a/test/win/vs-macros/as.py b/test/win/vs-macros/as.py
|
|
index 806c91d926cb..6b2739454551 100644
|
|
--- a/test/win/vs-macros/as.py
|
|
+++ b/test/win/vs-macros/as.py
|
|
@@ -4,8 +4,6 @@
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
from optparse import OptionParser
|
|
|
|
parser = OptionParser()
|
|
diff --git a/tools/graphviz.py b/tools/graphviz.py
|
|
index 538b059da4a7..99c5a5c6dc11 100755
|
|
--- a/tools/graphviz.py
|
|
+++ b/tools/graphviz.py
|
|
@@ -8,8 +8,6 @@
|
|
generate input suitable for graphviz to render a dependency graph of
|
|
targets."""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import collections
|
|
import json
|
|
import sys
|
|
diff --git a/tools/pretty_gyp.py b/tools/pretty_gyp.py
|
|
index 5060d1d9e29d..18981cea37be 100755
|
|
--- a/tools/pretty_gyp.py
|
|
+++ b/tools/pretty_gyp.py
|
|
@@ -6,8 +6,6 @@
|
|
|
|
"""Pretty-prints the contents of a GYP file."""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
import sys
|
|
import re
|
|
|
|
diff --git a/tools/pretty_sln.py b/tools/pretty_sln.py
|
|
index 12a6dadd1735..b1f5bda35725 100755
|
|
--- a/tools/pretty_sln.py
|
|
+++ b/tools/pretty_sln.py
|
|
@@ -12,8 +12,6 @@
|
|
Then it outputs a possible build order.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
__author__ = 'nsylvain (Nicolas Sylvain)'
|
|
|
|
import os
|
|
diff --git a/tools/pretty_vcproj.py b/tools/pretty_vcproj.py
|
|
index 4454d9b2b99d..b01b0b596919 100755
|
|
--- a/tools/pretty_vcproj.py
|
|
+++ b/tools/pretty_vcproj.py
|
|
@@ -12,59 +12,38 @@
|
|
It outputs the resulting xml to stdout.
|
|
"""
|
|
|
|
-from __future__ import print_function
|
|
-
|
|
__author__ = 'nsylvain (Nicolas Sylvain)'
|
|
|
|
import os
|
|
import sys
|
|
|
|
from xml.dom.minidom import parse
|
|
from xml.dom.minidom import Node
|
|
|
|
-try:
|
|
- # cmp was removed in python3.
|
|
- cmp
|
|
-except NameError:
|
|
- def cmp(a, b):
|
|
- return (a > b) - (a < b)
|
|
-
|
|
REPLACEMENTS = dict()
|
|
ARGUMENTS = None
|
|
|
|
|
|
-class CmpTuple(object):
|
|
- """Compare function between 2 tuple."""
|
|
- def __call__(self, x, y):
|
|
- return cmp(x[0], y[0])
|
|
+def get_string(node):
|
|
+ node_string = "node"
|
|
+ node_string += node.nodeName
|
|
+ if node.nodeValue:
|
|
+ node_string += node.nodeValue
|
|
|
|
+ if node.attributes:
|
|
+ # We first sort by name, if present.
|
|
+ node_string += node.getAttribute("Name")
|
|
|
|
-class CmpNode(object):
|
|
- """Compare function between 2 xml nodes."""
|
|
+ all_nodes = []
|
|
+ for (name, value) in node.attributes.items():
|
|
+ all_nodes.append((name, value))
|
|
|
|
- def __call__(self, x, y):
|
|
- def get_string(node):
|
|
- node_string = "node"
|
|
- node_string += node.nodeName
|
|
- if node.nodeValue:
|
|
- node_string += node.nodeValue
|
|
+ all_nodes.sort(key=(lambda attr: attr[0]))
|
|
+ for (name, value) in all_nodes:
|
|
+ node_string += name
|
|
+ node_string += value
|
|
|
|
- if node.attributes:
|
|
- # We first sort by name, if present.
|
|
- node_string += node.getAttribute("Name")
|
|
-
|
|
- all_nodes = []
|
|
- for (name, value) in node.attributes.items():
|
|
- all_nodes.append((name, value))
|
|
-
|
|
- all_nodes.sort(CmpTuple())
|
|
- for (name, value) in all_nodes:
|
|
- node_string += name
|
|
- node_string += value
|
|
-
|
|
- return node_string
|
|
-
|
|
- return cmp(get_string(x), get_string(y))
|
|
+ return node_string
|
|
|
|
|
|
def PrettyPrintNode(node, indent=0):
|
|
@@ -195,7 +174,7 @@ def CleanupVcproj(node):
|
|
|
|
|
|
# Sort the list.
|
|
- node_array.sort(CmpNode())
|
|
+ node_array.sort(key=get_string)
|
|
|
|
# Insert the nodes in the correct order.
|
|
for new_node in node_array:
|