svn commit: r553254 - in head/databases/mongodb36: . files
Kurt Jaeger
pi at FreeBSD.org
Sun Oct 25 10:49:47 UTC 2020
Author: pi
Date: Sun Oct 25 10:49:46 2020
New Revision: 553254
URL: https://svnweb.freebsd.org/changeset/ports/553254
Log:
databases/mongodb36: allow build with python 3
PR: 249597
Submitted by: mikael
Reported by: swills
Reviewed by: Ronald Klop <ronald-lists at klop.ws>
Approved by: dev at dudu.ro (maintainer)
Added:
head/databases/mongodb36/files/patch-python3 (contents, props changed)
Modified:
head/databases/mongodb36/Makefile
Modified: head/databases/mongodb36/Makefile
==============================================================================
--- head/databases/mongodb36/Makefile Sun Oct 25 10:47:14 2020 (r553253)
+++ head/databases/mongodb36/Makefile Sun Oct 25 10:49:46 2020 (r553254)
@@ -23,14 +23,14 @@ LICENSE_PERMS_SSPLv1= dist-mirror dist-sell pkg-mirror
ONLY_FOR_ARCHS= aarch64 amd64
ONLY_FOR_ARCHS_REASON= "Only supported on amd64 and aarch64 (i386 deprecated in v3)"
-BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}cheetah>=2.4.4:devel/py-cheetah@${PY_FLAVOR} \
+BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}cheetah3>0:devel/py-cheetah3@${PY_FLAVOR} \
${PY_TYPING} \
${PYTHON_PKGNAMEPREFIX}yaml>=3.11:devel/py-yaml@${PY_FLAVOR}
LIB_DEPENDS= libboost_system.so:devel/boost-libs \
libpcre.so:devel/pcre \
libsnappy.so:archivers/snappy
-USES= compiler:c++14-lang cpe python:2.7,build scons:python2 shebangfix
+USES= compiler:c++14-lang cpe python:3.5+,build scons shebangfix
USE_RC_SUBR= mongod
CONFLICTS_BUILD= mongo-cxx-driver
Added: head/databases/mongodb36/files/patch-python3
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/databases/mongodb36/files/patch-python3 Sun Oct 25 10:49:46 2020 (r553254)
@@ -0,0 +1,1977 @@
+From cbfdc41e1d05aa1bfc298b8bd1a2fae9b3477e87 Mon Sep 17 00:00:00 2001
+From: MikaelUrankar <mikael.urankar at gmail.com>
+Date: Sat, 3 Oct 2020 17:26:21 +0200
+Subject: [PATCH 01/24] Backport SConstruct patch
+
+---
+ SConstruct | 61 ++++++++++++++++++++++++++++--------------------------
+ 1 file changed, 32 insertions(+), 29 deletions(-)
+
+diff --git a/SConstruct b/SConstruct
+index cd4100e9..63f22862 100644
+--- SConstruct
++++ SConstruct
+@@ -28,8 +28,8 @@ import mongo.platform as mongo_platform
+ import mongo.toolchain as mongo_toolchain
+ import mongo.generators as mongo_generators
+
+-EnsurePythonVersion(2, 7)
+-EnsureSConsVersion(2, 5)
++EnsurePythonVersion(3, 5)
++EnsureSConsVersion(3, 0, 4)
+
+ from buildscripts import utils
+ from buildscripts import moduleconfig
+@@ -389,7 +389,7 @@ win_version_min_choices = {
+ }
+
+ add_option('win-version-min',
+- choices=win_version_min_choices.keys(),
++ choices=list(win_version_min_choices.keys()),
+ default=None,
+ help='minimum Windows version to support',
+ type='choice',
+@@ -482,7 +482,7 @@ try:
+ except IOError as e:
+ # If the file error wasn't because the file is missing, error out
+ if e.errno != errno.ENOENT:
+- print("Error opening version.json: {0}".format(e.strerror))
++ print(("Error opening version.json: {0}".format(e.strerror)))
+ Exit(1)
+
+ version_data = {
+@@ -491,14 +491,14 @@ except IOError as e:
+ }
+
+ except ValueError as e:
+- print("Error decoding version.json: {0}".format(e))
++ print(("Error decoding version.json: {0}".format(e)))
+ Exit(1)
+
+ # Setup the command-line variables
+ def variable_shlex_converter(val):
+ # If the argument is something other than a string, propogate
+ # it literally.
+- if not isinstance(val, basestring):
++ if not isinstance(val, str):
+ return val
+ parse_mode = get_option('variable-parse-mode')
+ if parse_mode == 'auto':
+@@ -563,7 +563,7 @@ def variable_distsrc_converter(val):
+
+ variables_files = variable_shlex_converter(get_option('variables-files'))
+ for file in variables_files:
+- print("Using variable customization file %s" % file)
++ print(("Using variable customization file %s" % file))
+
+ env_vars = Variables(
+ files=variables_files,
+@@ -572,7 +572,7 @@ env_vars = Variables(
+
+ sconsflags = os.environ.get('SCONSFLAGS', None)
+ if sconsflags:
+- print("Using SCONSFLAGS environment variable arguments: %s" % sconsflags)
++ print(("Using SCONSFLAGS environment variable arguments: %s" % sconsflags))
+
+ env_vars.Add('ABIDW',
+ help="Configures the path to the 'abidw' (a libabigail) utility")
+@@ -691,7 +691,7 @@ env_vars.Add('MONGO_DISTNAME',
+ def validate_mongo_version(key, val, env):
+ regex = r'^(\d+)\.(\d+)\.(\d+)-?((?:(rc)(\d+))?.*)?'
+ if not re.match(regex, val):
+- print("Invalid MONGO_VERSION '{}', or could not derive from version.json or git metadata. Please add a conforming MONGO_VERSION=x.y.z[-extra] as an argument to SCons".format(val))
++ print(("Invalid MONGO_VERSION '{}', or could not derive from version.json or git metadata. Please add a conforming MONGO_VERSION=x.y.z[-extra] as an argument to SCons".format(val)))
+ Exit(1)
+
+ env_vars.Add('MONGO_VERSION',
+@@ -822,12 +822,12 @@ if installDir[0] not in ['$', '#']:
+ Exit(1)
+
+ sconsDataDir = Dir(buildDir).Dir('scons')
+-SConsignFile(str(sconsDataDir.File('sconsign')))
++SConsignFile(str(sconsDataDir.File('sconsign.py3')))
+
+ def printLocalInfo():
+ import sys, SCons
+- print( "scons version: " + SCons.__version__ )
+- print( "python version: " + " ".join( [ `i` for i in sys.version_info ] ) )
++ print(( "scons version: " + SCons.__version__ ))
++ print(( "python version: " + " ".join( [ repr(i) for i in sys.version_info ] ) ))
+
+ printLocalInfo()
+
+@@ -904,12 +904,12 @@ env.AddMethod(mongo_platform.env_os_is_wrapper, 'TargetOSIs')
+ env.AddMethod(mongo_platform.env_get_os_name_wrapper, 'GetTargetOSName')
+
+ def fatal_error(env, msg, *args):
+- print(msg.format(*args))
++ print((msg.format(*args)))
+ Exit(1)
+
+ def conf_error(env, msg, *args):
+- print(msg.format(*args))
+- print("See {0} for details".format(env.File('$CONFIGURELOG').abspath))
++ print((msg.format(*args)))
++ print(("See {0} for details".format(env.File('$CONFIGURELOG').abspath)))
+ Exit(1)
+
+ env.AddMethod(fatal_error, 'FatalError')
+@@ -928,12 +928,12 @@ else:
+ env.AddMethod(lambda env: env['VERBOSE'], 'Verbose')
+
+ if has_option('variables-help'):
+- print(env_vars.GenerateHelpText(env))
++ print((env_vars.GenerateHelpText(env)))
+ Exit(0)
+
+ #unknown_vars = env_vars.UnknownVariables()
+ #if unknown_vars:
+-# env.FatalError("Unknown variables specified: {0}", ", ".join(unknown_vars.keys()))
++# env.FatalError("Unknown variables specified: {0}", ", ".join(list(unknown_vars.keys())))
+
+ def set_config_header_define(env, varname, varval = 1):
+ env['CONFIG_HEADER_DEFINES'][varname] = varval
+@@ -1018,7 +1018,7 @@ def CheckForProcessor(context, which_arch):
+ context.Result(ret)
+ return ret;
+
+- for k in processor_macros.keys():
++ for k in list(processor_macros.keys()):
+ ret = run_compile_check(k)
+ if ret:
+ context.Result('Detected a %s processor' % k)
+@@ -1136,7 +1136,7 @@ else:
+ env['TARGET_ARCH'] = detected_processor
+
+ if env['TARGET_OS'] not in os_macros:
+- print("No special config for [{0}] which probably means it won't work".format(env['TARGET_OS']))
++ print(("No special config for [{0}] which probably means it won't work".format(env['TARGET_OS'])))
+ elif not detectConf.CheckForOS(env['TARGET_OS']):
+ env.ConfError("TARGET_OS ({0}) is not supported by compiler", env['TARGET_OS'])
+
+@@ -1922,7 +1922,7 @@ def doConfigure(myenv):
+ # form -Wno-xxx (but not -Wno-error=xxx), we also add -Wxxx to the flags. GCC does
+ # warn on unknown -Wxxx style flags, so this lets us probe for availablity of
+ # -Wno-xxx.
+- for kw in test_mutation.keys():
++ for kw in list(test_mutation.keys()):
+ test_flags = test_mutation[kw]
+ for test_flag in test_flags:
+ if test_flag.startswith("-Wno-") and not test_flag.startswith("-Wno-error="):
+@@ -1936,7 +1936,7 @@ def doConfigure(myenv):
+ # to make them real errors.
+ cloned.Append(CCFLAGS=['-Werror'])
+ conf = Configure(cloned, help=False, custom_tests = {
+- 'CheckFlag' : lambda(ctx) : CheckFlagTest(ctx, tool, extension, flag)
++ 'CheckFlag' : lambda ctx : CheckFlagTest(ctx, tool, extension, flag)
+ })
+ available = conf.CheckFlag()
+ conf.Finish()
+@@ -2408,7 +2408,7 @@ def doConfigure(myenv):
+ "undefined" : myenv.File("#etc/ubsan.blacklist"),
+ }
+
+- blackfiles = set([v for (k, v) in blackfiles_map.iteritems() if k in sanitizer_list])
++ blackfiles = {v for (k, v) in blackfiles_map.items() if k in sanitizer_list}
+ blacklist_options=["-fsanitize-blacklist=%s" % blackfile
+ for blackfile in blackfiles
+ if os.stat(blackfile.path).st_size != 0]
+@@ -2420,7 +2420,7 @@ def doConfigure(myenv):
+ llvm_symbolizer = get_option('llvm-symbolizer')
+ if os.path.isabs(llvm_symbolizer):
+ if not myenv.File(llvm_symbolizer).exists():
+- print("WARNING: Specified symbolizer '%s' not found" % llvm_symbolizer)
++ print(("WARNING: Specified symbolizer '%s' not found" % llvm_symbolizer))
+ llvm_symbolizer = None
+ else:
+ llvm_symbolizer = myenv.WhereIs(llvm_symbolizer)
+@@ -2710,7 +2710,7 @@ def doConfigure(myenv):
+ files = ['ssleay32.dll', 'libeay32.dll']
+ for extra_file in files:
+ if not addOpenSslLibraryToDistArchive(extra_file):
+- print("WARNING: Cannot find SSL library '%s'" % extra_file)
++ print(("WARNING: Cannot find SSL library '%s'" % extra_file))
+
+ # Used to import system certificate keychains
+ if conf.env.TargetOSIs('darwin'):
+@@ -2738,7 +2738,7 @@ def doConfigure(myenv):
+ # TODO: If we could programmatically extract the paths from the info output
+ # we could give a better message here, but brew info's machine readable output
+ # doesn't seem to include the whole 'caveats' section.
+- message = subprocess.check_output([brew, "info", "openssl"])
++ message = subprocess.check_output([brew, "info", "openssl"]).decode('utf-8')
+ advice = textwrap.dedent(
+ """\
+ NOTE: HomeBrew installed to {0} appears to have OpenSSL installed.
+@@ -3114,7 +3114,7 @@ def doConfigure(myenv):
+
+ outputIndex = next((idx for idx in [0,1] if conf.CheckAltivecVbpermqOutput(idx)), None)
+ if outputIndex is not None:
+- conf.env.SetConfigHeaderDefine("MONGO_CONFIG_ALTIVEC_VEC_VBPERMQ_OUTPUT_INDEX", outputIndex)
++ conf.env.SetConfigHeaderDefine("MONGO_CONFIG_ALTIVEC_VEC_VBPERMQ_OUTPUT_INDEX", outputIndex)
+ else:
+ myenv.ConfError("Running on ppc64le, but can't find a correct vec_vbpermq output index. Compiler or platform not supported")
+
+@@ -3176,9 +3176,12 @@ def doLint( env , target , source ):
+ import buildscripts.pylinters
+ buildscripts.pylinters.lint_all(None, {}, [])
+
+- import buildscripts.lint
+- if not buildscripts.lint.run_lint( [ "src/mongo/" ] ):
+- raise Exception( "lint errors" )
++ env.Command(
++ target="#run_lint",
++ source=["buildscripts/lint.py", "src/mongo"],
++ action="$PYTHON $SOURCES[0] $SOURCES[1]",
++ )
++
+
+ env.Alias( "lint" , [] , [ doLint ] )
+ env.AlwaysBuild( "lint" )
+--
+2.28.0
+
+
+From 81abd3f9ba48ffb27919e574c8d518f4a1d8fbf3 Mon Sep 17 00:00:00 2001
+From: MikaelUrankar <mikael.urankar at gmail.com>
+Date: Sat, 3 Oct 2020 17:27:46 +0200
+Subject: [PATCH 02/24] Backport buildscripts/aggregate_tracefiles.py
+
+---
+ buildscripts/aggregate_tracefiles.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/buildscripts/aggregate_tracefiles.py b/buildscripts/aggregate_tracefiles.py
+index 8f1db785..0b4bfd24 100644
+--- buildscripts/aggregate_tracefiles.py
++++ buildscripts/aggregate_tracefiles.py
+@@ -16,7 +16,7 @@ def aggregate(inputs, output):
+
+ args += ['-o', output]
+
+- print ' '.join(args)
++ print(' '.join(args))
+
+ return subprocess.call(args)
+
+--
+2.28.0
+
+
+From 035a04745cb159c2a971180d1d76bca51de9245c Mon Sep 17 00:00:00 2001
+From: MikaelUrankar <mikael.urankar at gmail.com>
+Date: Sat, 3 Oct 2020 17:32:28 +0200
+Subject: [PATCH 03/24] Backport buildscripts/aws_ec2.py
+
+---
+ buildscripts/aws_ec2.py | 83 ++++++++++++++++++-----------------------
+ 1 file changed, 37 insertions(+), 46 deletions(-)
+
+diff --git a/buildscripts/aws_ec2.py b/buildscripts/aws_ec2.py
+index bc467d6e..f2e033a4 100755
+--- buildscripts/aws_ec2.py
++++ buildscripts/aws_ec2.py
+@@ -2,7 +2,7 @@
+
+ """AWS EC2 instance launcher and controller."""
+
+-from __future__ import print_function
++
+
+ import base64
+ import collections
+@@ -94,12 +94,13 @@ class AwsEc2(object):
+ if reached_state:
+ print(" Instance {}!".format(instance.state["Name"]), file=sys.stdout)
+ else:
+- print(" Instance in state '{}', failed to reach state '{}'{}!".format(
+- instance.state["Name"], state, client_error), file=sys.stdout)
++ print(
++ " Instance in state '{}', failed to reach state '{}'{}!".format(
++ instance.state["Name"], state, client_error), file=sys.stdout)
+ sys.stdout.flush()
+ return 0 if reached_state else 1
+
+- def control_instance( #pylint: disable=too-many-arguments,too-many-branches
++ def control_instance( #pylint: disable=too-many-arguments,too-many-branches,too-many-locals
+ self, mode, image_id, wait_time_secs=0, show_progress=False, console_output_file=None,
+ console_screenshot_file=None):
+ """Control an AMI instance. Returns 0 & status information, if successful."""
+@@ -257,40 +258,34 @@ def main():
+ create_options = optparse.OptionGroup(parser, "Create options")
+ status_options = optparse.OptionGroup(parser, "Status options")
+
+- parser.add_option("--mode",
+- dest="mode",
+- choices=_MODES,
+- default="status",
+- help="Operations to perform on an EC2 instance, choose one of"
+- " '{}', defaults to '%default'.".format(", ".join(_MODES)))
++ parser.add_option(
++ "--mode", dest="mode", choices=_MODES, default="status",
++ help=("Operations to perform on an EC2 instance, choose one of"
++ " '{}', defaults to '%default'.".format(", ".join(_MODES))))
+
+ control_options.add_option("--imageId",
+ dest="image_id",
+ default=None,
+ help="EC2 image_id to perform operation on [REQUIRED for control].")
+
+- control_options.add_option("--waitTimeSecs",
+- dest="wait_time_secs",
+- type=int,
+- default=5 * 60,
+- help="Time to wait for EC2 instance to reach it's new state,"
+- " defaults to '%default'.")
++ control_options.add_option(
++ "--waitTimeSecs", dest="wait_time_secs", type=int, default=5 * 60,
++ help=("Time to wait for EC2 instance to reach it's new state,"
++ " defaults to '%default'."))
++
+
+ create_options.add_option("--ami",
+ dest="ami",
+ default=None,
+ help="EC2 AMI to launch [REQUIRED for create].")
+
+- create_options.add_option("--blockDevice",
+- dest="block_devices",
+- metavar="DEVICE-NAME DEVICE-SIZE-GB",
+- action="append",
+- default=[],
+- nargs=2,
+- help="EBS device name and volume size in GiB."
+- " More than one device can be attached, by specifying"
+- " this option more than once."
+- " The device will be deleted on termination of the instance.")
++ create_options.add_option(
++ "--blockDevice", dest="block_devices", metavar="DEVICE-NAME DEVICE-SIZE-GB",
++ action="append", default=[], nargs=2,
++ help=("EBS device name and volume size in GiB."
++ " More than one device can be attached, by specifying"
++ " this option more than once."
++ " The device will be deleted on termination of the instance."))
+
+ create_options.add_option("--instanceType",
+ dest="instance_type",
+@@ -302,19 +297,15 @@ def main():
+ default=None,
+ help="EC2 key name [REQUIRED for create].")
+
+- create_options.add_option("--securityGroupIds",
+- dest="security_group_ids",
+- action="append",
+- default=[],
+- help="EC2 security group ids. More than one security group id can be"
+- " added, by specifying this option more than once.")
++ create_options.add_option(
++ "--securityGroupIds", dest="security_group_ids", action="append", default=[],
++ help=("EC2 security group ids. More than one security group id can be"
++ " added, by specifying this option more than once."))
+
+- create_options.add_option("--securityGroup",
+- dest="security_groups",
+- action="append",
+- default=[],
+- help="EC2 security group. More than one security group can be added,"
+- " by specifying this option more than once.")
++ create_options.add_option(
++ "--securityGroup", dest="security_groups", action="append", default=[],
++ help=("EC2 security group. More than one security group can be added,"
++ " by specifying this option more than once."))
+
+ create_options.add_option("--subnetId",
+ dest="subnet_id",
+@@ -350,14 +341,15 @@ def main():
+ default=None,
+ help="Save the status into the specified YAML file.")
+
+- status_options.add_option("--consoleOutputFile", dest="console_output_file", default=None,
+- help="Save the console output into the specified file, if"
+- " available.")
++ status_options.add_option(
++ "--consoleOutputFile", dest="console_output_file", default=None,
++ help="Save the console output into the specified file, if"
++ " available.")
+
+- status_options.add_option("--consoleScreenshotFile", dest="console_screenshot_file",
+- default=None,
+- help="Save the console screenshot (JPG format) into the specified"
+- " file, if available.")
++ status_options.add_option(
++ "--consoleScreenshotFile", dest="console_screenshot_file", default=None,
++ help="Save the console screenshot (JPG format) into the specified"
++ " file, if available.")
+
+ parser.add_option_group(control_options)
+ parser.add_option_group(create_options)
+@@ -382,7 +374,6 @@ def main():
+ parser.error("Block size must be an integer")
+ block_devices[device_name] = device_size
+
+- # The 'expire-on' key is a UTC time.
+ expire_dt = datetime.datetime.utcnow() + datetime.timedelta(hours=options.tag_expire_hours)
+ tags = [{"Key": "expire-on", "Value": expire_dt.strftime("%Y-%m-%d %H:%M:%S")},
+ {"Key": "Name", "Value": options.tag_name},
+--
+2.28.0
+
+
+From b6f97aeb89868c62c3c01f7f2e6f47ecda846d94 Mon Sep 17 00:00:00 2001
+From: MikaelUrankar <mikael.urankar at gmail.com>
+Date: Sat, 3 Oct 2020 17:33:44 +0200
+Subject: [PATCH 04/24] backport site_scons/mongo/__init__.py
+
+---
+ site_scons/mongo/__init__.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/site_scons/mongo/__init__.py b/site_scons/mongo/__init__.py
+index 510bd7bc..f7747809 100644
+--- site_scons/mongo/__init__.py
++++ site_scons/mongo/__init__.py
+@@ -5,4 +5,4 @@
+ def print_build_failures():
+ from SCons.Script import GetBuildFailures
+ for bf in GetBuildFailures():
+- print "%s failed: %s" % (bf.node, bf.errstr)
++ print("%s failed: %s" % (bf.node, bf.errstr))
+--
+2.28.0
+
+
+From 054ba812f02c54663a76b7092aa0c1eeeaf9925e Mon Sep 17 00:00:00 2001
+From: MikaelUrankar <mikael.urankar at gmail.com>
+Date: Sat, 3 Oct 2020 17:35:06 +0200
+Subject: [PATCH 05/24] backport site_scons/mongo/generators.py
+
+---
+ site_scons/mongo/generators.py | 75 +++++++++++++++++++++++++++-------
+ 1 file changed, 61 insertions(+), 14 deletions(-)
+
+diff --git a/site_scons/mongo/generators.py b/site_scons/mongo/generators.py
+index c07e86a4..052f18d3 100644
+--- site_scons/mongo/generators.py
++++ site_scons/mongo/generators.py
+@@ -1,6 +1,6 @@
+ # -*- mode: python; -*-
+
+-import md5
++import hashlib
+
+ # Default and alternative generator definitions go here.
+
+@@ -15,22 +15,69 @@ import md5
+ # want to define them.
+ def default_buildinfo_environment_data():
+ return (
+- ('distmod', '$MONGO_DISTMOD', True, True,),
+- ('distarch', '$MONGO_DISTARCH', True, True,),
+- ('cc', '$CC_VERSION', True, False,),
+- ('ccflags', '$CCFLAGS', True, False,),
+- ('cxx', '$CXX_VERSION', True, False,),
+- ('cxxflags', '$CXXFLAGS', True, False,),
+- ('linkflags', '$LINKFLAGS', True, False,),
+- ('target_arch', '$TARGET_ARCH', True, True,),
+- ('target_os', '$TARGET_OS', True, False,),
++ (
++ 'distmod',
++ '$MONGO_DISTMOD',
++ True,
++ True,
++ ),
++ (
++ 'distarch',
++ '$MONGO_DISTARCH',
++ True,
++ True,
++ ),
++ (
++ 'cc',
++ '$CC_VERSION',
++ True,
++ False,
++ ),
++ (
++ 'ccflags',
++ '$CCFLAGS',
++ True,
++ False,
++ ),
++ (
++ 'cxx',
++ '$CXX_VERSION',
++ True,
++ False,
++ ),
++ (
++ 'cxxflags',
++ '$CXXFLAGS',
++ True,
++ False,
++ ),
++ (
++ 'linkflags',
++ '$LINKFLAGS',
++ True,
++ False,
++ ),
++ (
++ 'target_arch',
++ '$TARGET_ARCH',
++ True,
++ True,
++ ),
++ (
++ 'target_os',
++ '$TARGET_OS',
++ True,
++ False,
++ ),
+ )
+
++
+ # If you want buildInfo and --version to be relatively empty, set
+ # MONGO_BUILDINFO_ENVIRONMENT_DATA = empty_buildinfo_environment_data()
+ def empty_buildinfo_environment_data():
+ return ()
+
++
+ def default_variant_dir_generator(target, source, env, for_signature):
+
+ if env.GetOption('cache') != None:
+@@ -44,11 +91,11 @@ def default_variant_dir_generator(target, source, env, for_signature):
+
+ # Hash the named options and their values, and take the first 8 characters of the hash as
+ # the variant name
+- hasher = md5.md5()
++ hasher = hashlib.md5()
+ for option in variant_options:
+- hasher.update(option)
+- hasher.update(str(env.GetOption(option)))
+- variant_dir = hasher.hexdigest()[0:8]
++ hasher.update(option.encode('utf-8'))
++ hasher.update(str(env.GetOption(option)).encode('utf-8'))
++ variant_dir = str(hasher.hexdigest()[0:8])
+
+ # If our option hash yields a well known hash, replace it with its name.
+ known_variant_hashes = {
+--
+2.28.0
+
+
+From 83a4ac06adfa2d7adfb6dedeb6fb258130ab3015 Mon Sep 17 00:00:00 2001
+From: MikaelUrankar <mikael.urankar at gmail.com>
+Date: Sat, 3 Oct 2020 17:36:14 +0200
+Subject: [PATCH 06/24] backport buildscripts/utils.py
+
+---
+ buildscripts/utils.py | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/buildscripts/utils.py b/buildscripts/utils.py
+index 69a78921..1c08bdf8 100644
+--- buildscripts/utils.py
++++ buildscripts/utils.py
+@@ -107,7 +107,7 @@ def getGitDescribe():
+ stderr=devnull,
+ stdin=devnull,
+ shell=True)
+- return proc.communicate()[0].strip()
++ return proc.communicate()[0].strip().decode('utf-8')
+
+ def execsys( args ):
+ import subprocess
+@@ -122,7 +122,7 @@ def getprocesslist():
+ raw = ""
+ try:
+ raw = execsys( "/bin/ps axww" )[0]
+- except Exception,e:
++ except Exception as e:
+ print( "can't get processlist: " + str( e ) )
+
+ r = re.compile( "[\r\n]+" )
+@@ -176,7 +176,7 @@ def didMongodStart( port=27017 , timeout=20 ):
+ try:
+ checkMongoPort( port )
+ return True
+- except Exception,e:
++ except Exception as e:
+ print( e )
+ timeout = timeout - 1
+ return False
+--
+2.28.0
+
+
+From f38206bde5a4e7cf14a7e17b67ccf074b222c9a6 Mon Sep 17 00:00:00 2001
+From: MikaelUrankar <mikael.urankar at gmail.com>
+Date: Sat, 3 Oct 2020 17:48:44 +0200
+Subject: [PATCH 07/24] backport site_scons/libdeps.py
+
+---
+ site_scons/libdeps.py | 46 ++++++++++++++++++++++++++-----------------
+ 1 file changed, 28 insertions(+), 18 deletions(-)
+
+diff --git a/site_scons/libdeps.py b/site_scons/libdeps.py
+index 632ed29b..62272052 100644
+--- site_scons/libdeps.py
++++ site_scons/libdeps.py
+@@ -61,7 +61,7 @@ syslibdeps_env_var = 'SYSLIBDEPS'
+ missing_syslibdep = 'MISSING_LIBDEP_'
+
+ class dependency(object):
+- Public, Private, Interface = range(3)
++ Public, Private, Interface = list(range(3))
+
+ def __init__(self, value, dynamic, deptype):
+ self.target_node = value
+@@ -74,7 +74,7 @@ class dependency(object):
+ class DependencyCycleError(SCons.Errors.UserError):
+ """Exception representing a cycle discovered in library dependencies."""
+
+- def __init__(self, first_node ):
++ def __init__(self, first_node):
+ super(DependencyCycleError, self).__init__()
+ self.cycle_nodes = [first_node]
+
+@@ -89,8 +89,8 @@ def __get_sorted_direct_libdeps(node):
+ setattr(node.attributes, "libdeps_direct_sorted", direct_sorted)
+ return direct_sorted
+
+-def __get_libdeps(node):
+
++def __get_libdeps(node):
+ """Given a SCons Node, return its library dependencies, topologically sorted.
+
+ Computes the dependencies if they're not already cached.
+@@ -122,7 +122,7 @@ def __get_libdeps(node):
+ marked.add(n.target_node)
+ tsorted.append(n.target_node)
+
+- except DependencyCycleError, e:
++ except DependencyCycleError as e:
+ if len(e.cycle_nodes) == 1 or e.cycle_nodes[0] != e.cycle_nodes[-1]:
+ e.cycle_nodes.insert(0, n.target_node)
+ raise
+@@ -139,6 +139,7 @@ def __get_libdeps(node):
+
+ return tsorted
+
++
+ def __get_syslibdeps(node):
+ """ Given a SCons Node, return its system library dependencies.
+
+@@ -150,11 +151,11 @@ def __get_syslibdeps(node):
+ for lib in __get_libdeps(node):
+ for syslib in node.get_env().Flatten(lib.get_env().get(syslibdeps_env_var, [])):
+ if syslib:
+- if type(syslib) in (str, unicode) and syslib.startswith(missing_syslibdep):
+- print("Target '%s' depends on the availability of a "
++ if type(syslib) is str and syslib.startswith(missing_syslibdep):
++ print(("Target '%s' depends on the availability of a "
+ "system provided library for '%s', "
+ "but no suitable library was found during configuration." %
+- (str(node), syslib[len(missing_syslibdep):]))
++ (str(node), syslib[len(missing_syslibdep):])))
+ node.get_env().Exit(1)
+ syslibdeps.append(syslib)
+ setattr(node.attributes, cached_var_name, syslibdeps)
+@@ -170,17 +171,20 @@ def update_scanner(builder):
+
+ if old_scanner:
+ path_function = old_scanner.path_function
++
+ def new_scanner(node, env, path=()):
+ result = old_scanner.function(node, env, path)
+ result.extend(__get_libdeps(node))
+ return result
+ else:
+ path_function = None
++
+ def new_scanner(node, env, path=()):
+ return __get_libdeps(node)
+
+ builder.target_scanner = SCons.Scanner.Scanner(function=new_scanner,
+- path_function=path_function)
++ path_function=path_function)
++
+
+ def get_libdeps(source, target, env, for_signature):
+ """Implementation of the special _LIBDEPS environment variable.
+@@ -191,6 +195,7 @@ def get_libdeps(source, target, env, for_signature):
+ target = env.Flatten([target])
+ return __get_libdeps(target[0])
+
++
+ def get_libdeps_objs(source, target, env, for_signature):
+ objs = []
+ for lib in get_libdeps(source, target, env, for_signature):
+@@ -198,6 +203,7 @@ def get_libdeps_objs(source, target, env, for_signature):
+ objs.extend(lib.sources)
+ return objs
+
++
+ def get_syslibdeps(source, target, env, for_signature):
+ deps = __get_syslibdeps(target[0])
+ lib_link_prefix = env.subst('$LIBLINKPREFIX')
+@@ -209,7 +215,7 @@ def get_syslibdeps(source, target, env, for_signature):
+ # they're believed to represent library short names, that should be prefixed with -l
+ # or the compiler-specific equivalent. I.e., 'm' becomes '-lm', but 'File("m.a") is passed
+ # through whole cloth.
+- if type(d) in (str, unicode):
++ if type(d) is str:
+ result.append('%s%s%s' % (lib_link_prefix, d, lib_link_suffix))
+ else:
+ result.append(d)
+@@ -252,8 +258,8 @@ def libdeps_emitter(target, source, env):
+ prereqs.extend(dependency(l, False, dependency.Private) for l in env.get(libdeps_env_var + '_PRIVATE', []) if l)
+
+ for prereq in prereqs:
+- prereqWithIxes = SCons.Util.adjustixes(
+- prereq.target_node, lib_builder.get_prefix(env), lib_builder.get_suffix(env))
++ prereqWithIxes = SCons.Util.adjustixes(prereq.target_node, lib_builder.get_prefix(env),
++ lib_builder.get_suffix(env))
+ prereq.target_node = lib_node_factory(prereqWithIxes)
+
+ for t in target:
+@@ -264,16 +270,16 @@ def libdeps_emitter(target, source, env):
+ for dependent in env.get('LIBDEPS_DEPENDENTS', []):
+ if dependent is None:
+ continue
+- dependentWithIxes = SCons.Util.adjustixes(
+- dependent, lib_builder.get_prefix(env), lib_builder.get_suffix(env))
++ dependentWithIxes = SCons.Util.adjustixes(dependent, lib_builder.get_prefix(env),
++ lib_builder.get_suffix(env))
+ dependentNode = lib_node_factory(dependentWithIxes)
+ __append_direct_libdeps(dependentNode, [dependency(target[0], False, dependency.Public)])
+
+ for dependent in env.get('PROGDEPS_DEPENDENTS', []):
+ if dependent is None:
+ continue
+- dependentWithIxes = SCons.Util.adjustixes(
+- dependent, prog_builder.get_prefix(env), prog_builder.get_suffix(env))
++ dependentWithIxes = SCons.Util.adjustixes(dependent, prog_builder.get_prefix(env),
++ prog_builder.get_suffix(env))
+ dependentNode = prog_node_factory(dependentWithIxes)
+ __append_direct_libdeps(dependentNode, [dependency(target[0], False, dependency.Public)])
+
+@@ -372,9 +378,11 @@ def setup_environment(env, emitting_shared=False):
+ if 'init-no-global-side-effects' in env.Entry(lib).get_env().get('LIBDEPS_TAGS', []):
+ result.append(str(lib))
+ else:
+- result.extend(env.subst('$LINK_WHOLE_ARCHIVE_LIB_START'
+- '$TARGET'
+- '$LINK_WHOLE_ARCHIVE_LIB_END', target=lib).split())
++ result.extend(
++ env.subst(
++ '$LINK_WHOLE_ARCHIVE_LIB_START'
++ '$TARGET'
++ '$LINK_WHOLE_ARCHIVE_LIB_END', target=lib).split())
+ return result
+
+ env['_LIBDEPS_LIBS_WITH_TAGS'] = expand_libdeps_with_extraction_flags
+@@ -394,6 +402,7 @@ def setup_environment(env, emitting_shared=False):
+ except KeyError:
+ pass
+
++
+ def setup_conftests(conf):
+ def FindSysLibDep(context, name, libs, **kwargs):
+ var = "LIBDEPS_" + name.upper() + "_SYSLIBDEP"
+@@ -406,4 +415,5 @@ def setup_conftests(conf):
+ return context.Result(result)
+ context.env[var] = __missing_syslib(name)
+ return context.Result(result)
++
+ conf.AddTest('FindSysLibDep', FindSysLibDep)
+--
+2.28.0
+
+
+From 2bc91392ab7dba6a09aa4100a9e8666a82dd7941 Mon Sep 17 00:00:00 2001
+From: MikaelUrankar <mikael.urankar at gmail.com>
+Date: Sat, 3 Oct 2020 17:49:45 +0200
+Subject: [PATCH 08/24] backport site_scons/site_tools/distsrc.py
+
+---
+ site_scons/site_tools/distsrc.py | 25 ++++++++++++++-----------
+ 1 file changed, 14 insertions(+), 11 deletions(-)
+
+diff --git a/site_scons/site_tools/distsrc.py b/site_scons/site_tools/distsrc.py
+index 861f5d9e..cc72c065 100644
+--- site_scons/site_tools/distsrc.py
++++ site_scons/site_tools/distsrc.py
+@@ -20,7 +20,7 @@ import shutil
+ import tarfile
+ import time
+ import zipfile
+-import StringIO
++import io
+
+ from distutils.spawn import find_executable
+
+@@ -28,7 +28,7 @@ __distsrc_callbacks = []
+
+ class DistSrcFile:
+ def __init__(self, **kwargs):
+- [ setattr(self, key, val) for (key, val) in kwargs.items() ]
++ [ setattr(self, key, val) for (key, val) in list(kwargs.items()) ]
+
+ def __str__(self):
+ return self.name
+@@ -60,6 +60,7 @@ class DistSrcArchive:
+ def close(self):
+ self.archive_file.close()
+
++
+ class DistSrcTarArchive(DistSrcArchive):
+ def __iter__(self):
+ file_list = self.archive_file.getnames()
+@@ -82,7 +83,7 @@ class DistSrcTarArchive(DistSrcArchive):
+
+ def append_file_contents(self, filename, file_contents,
+ mtime=time.time(),
+- mode=0644,
++ mode=0o644,
+ uname="root",
+ gname="root"):
+ file_metadata = tarfile.TarInfo(name=filename)
+@@ -91,7 +92,7 @@ class DistSrcTarArchive(DistSrcArchive):
+ file_metadata.uname = uname
+ file_metadata.gname = gname
+ file_metadata.size = len(file_contents)
+- file_buf = StringIO.StringIO(file_contents)
++ file_buf = io.BytesIO(file_contents.encode('utf-8'))
+ if self.archive_mode == 'r':
+ self.archive_file.close()
+ self.archive_file = tarfile.open(
+@@ -105,6 +106,7 @@ class DistSrcTarArchive(DistSrcArchive):
+ def append_file(self, filename, localfile):
+ self.archive_file.add(localfile, arcname=filename)
+
++
+ class DistSrcZipArchive(DistSrcArchive):
+ def __iter__(self):
+ file_list = self.archive_file.namelist()
+@@ -119,7 +121,7 @@ class DistSrcZipArchive(DistSrcArchive):
+ name=key,
+ size=item_data.file_size,
+ mtime=time.mktime(fixed_time),
+- mode=0775 if is_dir else 0664,
++ mode=0o775 if is_dir else 0o664,
+ type=tarfile.DIRTYPE if is_dir else tarfile.REGTYPE,
+ uid=0,
+ gid=0,
+@@ -129,7 +131,7 @@ class DistSrcZipArchive(DistSrcArchive):
+
+ def append_file_contents(self, filename, file_contents,
+ mtime=time.time(),
+- mode=0644,
++ mode=0o644,
+ uname="root",
+ gname="root"):
+ self.archive_file.writestr(filename, file_contents)
+@@ -139,7 +141,7 @@ class DistSrcZipArchive(DistSrcArchive):
+
+ def build_error_action(msg):
+ def error_stub(target=None, source=None, env=None):
+- print msg
++ print(msg)
+ env.Exit(1)
+ return [ error_stub ]
+
+@@ -162,7 +164,7 @@ def distsrc_action_generator(source, target, env, for_signature):
+
+ target_ext = str(target[0])[-3:]
+ if not target_ext in [ 'zip', 'tar' ]:
+- print "Invalid file format for distsrc. Must be tar or zip file"
++ print("Invalid file format for distsrc. Must be tar or zip file")
+ env.Exit(1)
+
+ git_cmd = "\"%s\" archive --format %s --output %s --prefix ${MONGO_DIST_SRC_PREFIX} HEAD" % (
+@@ -173,14 +175,14 @@ def distsrc_action_generator(source, target, env, for_signature):
+ SCons.Action.Action(run_distsrc_callbacks, "Running distsrc callbacks for $TARGET")
+ ]
+
++
+ def add_callback(env, fn):
+ __distsrc_callbacks.append(fn)
+
++
+ def generate(env, **kwargs):
+ env.AddMethod(add_callback, 'AddDistSrcCallback')
+- env['BUILDERS']['__DISTSRC'] = SCons.Builder.Builder(
+- generator=distsrc_action_generator,
+- )
++ env['BUILDERS']['__DISTSRC'] = SCons.Builder.Builder(generator=distsrc_action_generator, )
+
+ def DistSrc(env, target):
+ result = env.__DISTSRC(target=target, source=[])
+@@ -190,5 +192,6 @@ def generate(env, **kwargs):
+
+ env.AddMethod(DistSrc, 'DistSrc')
+
++
+ def exists(env):
+ return True
+--
+2.28.0
+
+
+From b27a4fc533e5290495f3b2d2bc78ea208d607bf5 Mon Sep 17 00:00:00 2001
+From: MikaelUrankar <mikael.urankar at gmail.com>
+Date: Sat, 3 Oct 2020 17:50:41 +0200
+Subject: [PATCH 09/24] backport site_scons/site_tools/mongo_benchmark.py
+
+---
+ site_scons/site_tools/mongo_benchmark.py | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/site_scons/site_tools/mongo_benchmark.py b/site_scons/site_tools/mongo_benchmark.py
+index 7c12627b..f3f84d73 100644
+--- site_scons/site_tools/mongo_benchmark.py
++++ site_scons/site_tools/mongo_benchmark.py
+@@ -11,10 +11,10 @@ def register_benchmark(env, test):
+ env.Alias('$BENCHMARK_ALIAS', test)
+
+ def benchmark_list_builder_action(env, target, source):
+- ofile = open(str(target[0]), 'wb')
++ ofile = open(str(target[0]), 'w')
+ try:
+ for s in _benchmarks:
+- print '\t' + str(s)
++ print('\t' + str(s))
+ ofile.write('%s\n' % s)
+ finally:
+ ofile.close()
+@@ -37,9 +37,10 @@ def build_benchmark(env, target, source, **kwargs):
+ bmEnv.Install("#/build/benchmark/", result[0])
+ return result
+
++
+ def generate(env):
+ env.Command('$BENCHMARK_LIST', env.Value(_benchmarks),
+- Action(benchmark_list_builder_action, "Generating $TARGET"))
++ Action(benchmark_list_builder_action, "Generating $TARGET"))
+ env.AddMethod(register_benchmark, 'RegisterBenchmark')
+ env.AddMethod(build_benchmark, 'Benchmark')
+ env.Alias('$BENCHMARK_ALIAS', '$BENCHMARK_LIST')
+--
+2.28.0
+
+
+From 2059bb295d0d440a615241a834094dba3c840d6f Mon Sep 17 00:00:00 2001
+From: MikaelUrankar <mikael.urankar at gmail.com>
+Date: Sat, 3 Oct 2020 17:51:30 +0200
+Subject: [PATCH 10/24] backport site_scons/site_tools/mongo_integrationtest.py
+
+---
+ site_scons/site_tools/mongo_integrationtest.py | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/site_scons/site_tools/mongo_integrationtest.py b/site_scons/site_tools/mongo_integrationtest.py
+index ff9a5f45..324cac63 100644
+--- site_scons/site_tools/mongo_integrationtest.py
++++ site_scons/site_tools/mongo_integrationtest.py
+@@ -12,10 +12,10 @@ def register_integration_test(env, test):
+ env.Alias('$INTEGRATION_TEST_ALIAS', installed_test)
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-ports-all
mailing list