Make our Python scripts Python-3-compatible.
They still need to be Python-2-compatible until I figure out how to
switch the version used in the CI.
I've left out make_curve25519_tables.py because it's some bytes vs
unicode mess I don't care to figure out. We should just rewrite that in
Go which should also be much faster anyway.
Change-Id: I4446641815315a84c2979b1be1e1949f88cbacf8
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/46884
Reviewed-by: Adam Langley <agl@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
diff --git a/crypto/hpke/translate_test_vectors.py b/crypto/hpke/translate_test_vectors.py
index 1fa6cbc..edc86c3 100755
--- a/crypto/hpke/translate_test_vectors.py
+++ b/crypto/hpke/translate_test_vectors.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# coding=utf-8
# Copyright (c) 2020, Google Inc.
#
diff --git a/util/bot/go/env.py b/util/bot/go/env.py
index 91eace0..b9c33e2 100755
--- a/util/bot/go/env.py
+++ b/util/bot/go/env.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
diff --git a/util/bot/update_clang.py b/util/bot/update_clang.py
index f959280..5e9c0c2 100644
--- a/util/bot/update_clang.py
+++ b/util/bot/update_clang.py
@@ -1,10 +1,13 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""This script is used to download prebuilt clang binaries."""
+from __future__ import division
+from __future__ import print_function
+
import os
import shutil
import subprocess
@@ -13,7 +16,13 @@
import tarfile
import tempfile
import time
-import urllib2
+
+try:
+ # Python 3.0 or later
+ from urllib.error import HTTPError, URLError
+ from urllib.request import urlopen
+except ImportError:
+ from urllib2 import urlopen, HTTPError, URLError
# CLANG_REVISION and CLANG_SUB_REVISION determine the build of clang
@@ -45,8 +54,8 @@
try:
sys.stdout.write('Downloading %s ' % url)
sys.stdout.flush()
- response = urllib2.urlopen(url)
- total_size = int(response.info().getheader('Content-Length').strip())
+ response = urlopen(url)
+ total_size = int(response.headers.get('Content-Length').strip())
bytes_done = 0
dots_printed = 0
while True:
@@ -55,29 +64,28 @@
break
output_file.write(chunk)
bytes_done += len(chunk)
- num_dots = TOTAL_DOTS * bytes_done / total_size
+ num_dots = TOTAL_DOTS * bytes_done // total_size
sys.stdout.write('.' * (num_dots - dots_printed))
sys.stdout.flush()
dots_printed = num_dots
if bytes_done != total_size:
- raise urllib2.URLError("only got %d of %d bytes" %
- (bytes_done, total_size))
- print ' Done.'
+ raise URLError("only got %d of %d bytes" % (bytes_done, total_size))
+ print(' Done.')
return
- except urllib2.URLError as e:
+ except URLError as e:
sys.stdout.write('\n')
- print e
- if num_retries == 0 or isinstance(e, urllib2.HTTPError) and e.code == 404:
+ print(e)
+ if num_retries == 0 or isinstance(e, HTTPError) and e.code == 404:
raise e
num_retries -= 1
- print 'Retrying in %d s ...' % retry_wait_s
+ print('Retrying in %d s ...' % retry_wait_s)
time.sleep(retry_wait_s)
retry_wait_s *= 2
def EnsureDirExists(path):
if not os.path.exists(path):
- print "Creating directory %s" % path
+ print("Creating directory %s" % path)
os.makedirs(path)
@@ -120,7 +128,7 @@
def CopyFile(src, dst):
"""Copy a file from src to dst."""
- print "Copying %s to %s" % (src, dst)
+ print("Copying %s to %s" % (src, dst))
shutil.copy(src, dst)
@@ -133,32 +141,30 @@
else:
return 0
- print 'Updating Clang to %s...' % PACKAGE_VERSION
+ print('Updating Clang to %s...' % PACKAGE_VERSION)
if ReadStampFile() == PACKAGE_VERSION:
- print 'Clang is already up to date.'
+ print('Clang is already up to date.')
return 0
# Reset the stamp file in case the build is unsuccessful.
WriteStampFile('')
- print 'Downloading prebuilt clang'
+ print('Downloading prebuilt clang')
if os.path.exists(LLVM_BUILD_DIR):
RmTree(LLVM_BUILD_DIR)
try:
DownloadAndUnpack(cds_full_url, LLVM_BUILD_DIR)
- print 'clang %s unpacked' % PACKAGE_VERSION
+ print('clang %s unpacked' % PACKAGE_VERSION)
WriteStampFile(PACKAGE_VERSION)
return 0
- except urllib2.URLError:
- print 'Failed to download prebuilt clang %s' % cds_file
- print 'Exiting.'
+ except URLError:
+ print('Failed to download prebuilt clang %s' % cds_file)
+ print('Exiting.')
return 1
def main():
- # Don't buffer stdout, so that print statements are immediately flushed.
- sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
return UpdateClang()
diff --git a/util/bot/vs_env.py b/util/bot/vs_env.py
index 13217ca..cbbdd43 100644
--- a/util/bot/vs_env.py
+++ b/util/bot/vs_env.py
@@ -12,13 +12,15 @@
# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+from __future__ import print_function
+
import subprocess
import sys
import vs_toolchain
if len(sys.argv) < 2:
- print >>sys.stderr, "Usage: vs_env.py TARGET_ARCH CMD..."
+ print("Usage: vs_env.py TARGET_ARCH CMD...", file=sys.stderr)
sys.exit(1)
target_arch = sys.argv[1]
diff --git a/util/bot/vs_toolchain.py b/util/bot/vs_toolchain.py
index 954b670..051d78b 100644
--- a/util/bot/vs_toolchain.py
+++ b/util/bot/vs_toolchain.py
@@ -2,6 +2,8 @@
# 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 json
import os
import os.path
@@ -96,7 +98,7 @@
'update': Update,
}
if len(sys.argv) < 2 or sys.argv[1] not in commands:
- print >>sys.stderr, 'Expected one of: %s' % ', '.join(commands)
+ print('Expected one of: %s' % ', '.join(commands), file=sys.stderr)
return 1
return commands[sys.argv[1]](*sys.argv[2:])