Projects
Extra
mongodb
mongo-src-3.6.8-python3.patch
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File mongo-src-3.6.8-python3.patch of Package mongodb
Index: mongodb-src-r3.6.8/buildscripts/aggregate_tracefiles.py =================================================================== --- mongodb-src-r3.6.8.orig/buildscripts/aggregate_tracefiles.py +++ mongodb-src-r3.6.8/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) Index: mongodb-src-r3.6.8/buildscripts/burn_in_tests.py =================================================================== --- mongodb-src-r3.6.8.orig/buildscripts/burn_in_tests.py +++ mongodb-src-r3.6.8/buildscripts/burn_in_tests.py @@ -161,7 +161,7 @@ def find_changed_tests(branch_name, base # commit among 'revs_to_check' that's been activated in Evergreen. We handle this by # only considering tests changed in the current commit. last_activated = "HEAD" - print "Comparing current branch against", last_activated + print("Comparing current branch against", last_activated) revisions = callo(["git", "rev-list", base_commit + "..." + last_activated]).splitlines() base_commit = last_activated else: @@ -169,10 +169,10 @@ def find_changed_tests(branch_name, base revision_count = len(revisions) if revision_count > max_revisions: - print "There are too many revisions included (%d)." % revision_count, \ + print("There are too many revisions included (%d)." % revision_count, \ "This is likely because your base branch is not " + branch_name + ".", \ "You can allow us to review more than 25 revisions by using", \ - "the --maxRevisions option." + "the --maxRevisions option.") return changed_tests changed_files = callo(["git", "diff", "--name-only", base_commit]).splitlines() @@ -279,7 +279,7 @@ def create_task_list(evergreen_conf, bui evg_buildvariant = evergreen_conf.get_variant(buildvariant) if not evg_buildvariant: - print "Buildvariant", buildvariant, "not found in", evergreen_conf.path + print("Buildvariant", buildvariant, "not found in", evergreen_conf.path) sys.exit(1) # Find all the buildvariant task's resmoke_args. @@ -366,9 +366,9 @@ def main(): evergreen_conf = evergreen.EvergreenProjectConfig(values.evergreen_file) if values.buildvariant is None: - print "Option buildVariant must be specified to find changed tests.\n", \ + print("Option buildVariant must be specified to find changed tests.\n", \ "Select from the following: \n" \ - "\t", "\n\t".join(sorted(evergreen_conf.variant_names)) + "\t", "\n\t".join(sorted(evergreen_conf.variant_names))) sys.exit(1) changed_tests = find_changed_tests(values.branch, @@ -380,7 +380,7 @@ def main(): changed_tests = filter_tests(changed_tests, exclude_tests) # If there are no changed tests, exit cleanly. if not changed_tests: - print "No new or modified tests found." + print("No new or modified tests found.") _write_report_file({}, values.test_list_outfile) sys.exit(0) suites = resmokelib.parser.get_suites(values, changed_tests) @@ -403,7 +403,7 @@ def main(): try: subprocess.check_call(resmoke_cmd, shell=False) except subprocess.CalledProcessError as err: - print "Resmoke returned an error with task:", task + print("Resmoke returned an error with task:", task) _save_report_data(test_results, values.report_file, task) _write_report_file(test_results, values.report_file) sys.exit(err.returncode) Index: mongodb-src-r3.6.8/buildscripts/cleanbb.py =================================================================== --- mongodb-src-r3.6.8.orig/buildscripts/cleanbb.py +++ mongodb-src-r3.6.8/buildscripts/cleanbb.py @@ -79,7 +79,7 @@ def tryToRemove(path): def cleanup( root , nokill ): if nokill: - print "nokill requested, not killing anybody" + print("nokill requested, not killing anybody") else: if killprocs( root=root ) > 0: time.sleep(3) Index: mongodb-src-r3.6.8/buildscripts/errorcodes.py =================================================================== --- mongodb-src-r3.6.8.orig/buildscripts/errorcodes.py +++ mongodb-src-r3.6.8/buildscripts/errorcodes.py @@ -9,7 +9,7 @@ Optionally replaces zero codes in source import bisect import os import sys -import utils +from . import utils from collections import defaultdict, namedtuple from optparse import OptionParser @@ -66,9 +66,9 @@ def parseSourceFiles( callback ): for sourceFile in utils.getAllSourceFiles(prefix='src/mongo/'): if list_files: - print 'scanning file: ' + sourceFile + print('scanning file: ' + sourceFile) - with open(sourceFile) as f: + with open(sourceFile,encoding="utf-8") as f: text = f.read() if not any([zz in text for zz in quick]): @@ -159,7 +159,7 @@ def readErrorCodes(): parseSourceFiles( checkDups ) - if seen.has_key("0"): + if "0" in seen: code = "0" bad = seen[code] errors.append( bad ) @@ -189,19 +189,19 @@ def replaceBadCodes( errors, nextCode ): for loc in skip_errors: line, col = getLineAndColumnForPosition(loc) - print ("SKIPPING NONZERO code=%s: %s:%d:%d" + print( "SKIPPING NONZERO code=%s: %s:%d:%d" % (loc.code, loc.sourceFile, line, col)) # Dedupe, sort, and reverse so we don't have to update offsets as we go. for assertLoc in reversed(sorted(set(zero_errors))): (sourceFile, byteOffset, lines, code) = assertLoc lineNum, _ = getLineAndColumnForPosition(assertLoc) - print "UPDATING_FILE: %s:%s" % (sourceFile, lineNum) + print("UPDATING_FILE: %s:%s" % (sourceFile, lineNum)) ln = lineNum - 1 with open(sourceFile, 'r+') as f: - print "LINE_%d_BEFORE:%s" % (lineNum, f.readlines()[ln].rstrip()) + print("LINE_%d_BEFORE:%s" % (lineNum, f.readlines()[ln].rstrip())) f.seek(0) text = f.read() @@ -212,7 +212,7 @@ def replaceBadCodes( errors, nextCode ): f.write(text[byteOffset+1:]) f.seek(0) - print "LINE_%d_AFTER :%s" % (lineNum, f.readlines()[ln].rstrip()) + print("LINE_%d_AFTER :%s" % (lineNum, f.readlines()[ln].rstrip())) nextCode += 1 @@ -281,7 +281,7 @@ def main(): elif options.replace: replaceBadCodes(errors, next) else: - print ERROR_HELP + print(ERROR_HELP) sys.exit(1) Index: mongodb-src-r3.6.8/buildscripts/idl/idl/syntax.py =================================================================== --- mongodb-src-r3.6.8.orig/buildscripts/idl/idl/syntax.py +++ mongodb-src-r3.6.8/buildscripts/idl/idl/syntax.py @@ -82,8 +82,7 @@ def _item_and_type(dic): # type: (Dict[Any, List[Any]]) -> Iterator[Tuple[Any, Any]] """Return an Iterator of (key, value) pairs from a dictionary.""" return itertools.chain.from_iterable((_zip_scalar(value, key) - for (key, value) in dic.viewitems())) - + for (key, value) in dic.items())) class SymbolTable(object): """ Index: mongodb-src-r3.6.8/buildscripts/make_archive.py =================================================================== --- mongodb-src-r3.6.8.orig/buildscripts/make_archive.py +++ mongodb-src-r3.6.8/buildscripts/make_archive.py @@ -95,14 +95,14 @@ def make_tar_archive(opts): enclosing_file_directory = os.path.dirname(temp_file_location) if not os.path.exists(enclosing_file_directory): os.makedirs(enclosing_file_directory) - print "copying %s => %s" % (input_filename, temp_file_location) + print("copying %s => %s" % (input_filename, temp_file_location)) if os.path.isdir(input_filename): shutil.copytree(input_filename, temp_file_location) else: shutil.copy2(input_filename, temp_file_location) tar_command.append(preferred_filename) - print " ".join(tar_command) + print(" ".join(tar_command)) # execute the full tar command run_directory = os.path.join(os.getcwd(), enclosing_archive_directory) proc = Popen(tar_command, stdout=PIPE, stderr=STDOUT, bufsize=0, cwd=run_directory) Index: mongodb-src-r3.6.8/buildscripts/make_vcxproj.py =================================================================== --- mongodb-src-r3.6.8.orig/buildscripts/make_vcxproj.py +++ mongodb-src-r3.6.8/buildscripts/make_vcxproj.py @@ -241,7 +241,7 @@ class ProjFileGenerator(object): def main(): if len(sys.argv) != 2: - print r"Usage: python buildscripts\make_vcxproj.py FILE_NAME" + print(r"Usage: python buildscripts\make_vcxproj.py FILE_NAME") return with ProjFileGenerator(sys.argv[1]) as projfile: Index: mongodb-src-r3.6.8/buildscripts/msitrim.py =================================================================== --- mongodb-src-r3.6.8.orig/buildscripts/msitrim.py +++ mongodb-src-r3.6.8/buildscripts/msitrim.py @@ -29,7 +29,7 @@ def exec_update(query, column, value): view.Close() -print "Trimming MSI" +print("Trimming MSI") db = msilib.OpenDatabase(args.file.name, msilib.MSIDBOPEN_DIRECT) Index: mongodb-src-r3.6.8/buildscripts/packager-enterprise.py =================================================================== --- mongodb-src-r3.6.8.orig/buildscripts/packager-enterprise.py +++ mongodb-src-r3.6.8/buildscripts/packager-enterprise.py @@ -153,7 +153,7 @@ def main(argv): if prefix is None: prefix=tempfile.mkdtemp() - print "Working in directory %s" % prefix + print("Working in directory %s" % prefix) os.chdir(prefix) try: @@ -226,7 +226,7 @@ def make_package(distro, build_os, arch, # directory, so the debian directory is needed in all cases (and # innocuous in the debianoids' sdirs). for pkgdir in ["debian", "rpm"]: - print "Copying packaging files from %s to %s" % ("%s/%s" % (srcdir, pkgdir), sdir) + print("Copying packaging files from %s to %s" % ("%s/%s" % (srcdir, pkgdir), sdir)) # FIXME: sh-dash-cee is bad. See if tarfile can do this. packager.sysassert(["sh", "-c", "(cd \"%s\" && git archive %s %s/ ) | (cd \"%s\" && tar xvf -)" % (srcdir, spec.metadata_gitspec(), pkgdir, sdir)]) # Splat the binaries and snmp files under sdir. The "build" stages of the Index: mongodb-src-r3.6.8/buildscripts/packager.py =================================================================== --- mongodb-src-r3.6.8.orig/buildscripts/packager.py +++ mongodb-src-r3.6.8/buildscripts/packager.py @@ -343,7 +343,7 @@ def main(argv): prefix = args.prefix if prefix is None: prefix = tempfile.mkdtemp() - print "Working in directory %s" % prefix + print("Working in directory %s" % prefix) os.chdir(prefix) try: @@ -382,14 +382,14 @@ def crossproduct(*seqs): def sysassert(argv): """Run argv and assert that it exited with status 0.""" - print "In %s, running %s" % (os.getcwd(), " ".join(argv)) + print("In %s, running %s" % (os.getcwd(), " ".join(argv))) sys.stdout.flush() sys.stderr.flush() assert(subprocess.Popen(argv).wait()==0) def backtick(argv): """Run argv and return its output string.""" - print "In %s, running %s" % (os.getcwd(), " ".join(argv)) + print("In %s, running %s" % (os.getcwd(), " ".join(argv))) sys.stdout.flush() sys.stderr.flush() return subprocess.Popen(argv, stdout=subprocess.PIPE).communicate()[0] @@ -421,7 +421,7 @@ def unpack_binaries_into(build_os, arch, sysassert(["tar", "xvzf", rootdir+"/"+tarfile(build_os, arch, spec)]) release_dir = glob('mongodb-linux-*')[0] for releasefile in "bin", "GNU-AGPL-3.0", "README", "THIRD-PARTY-NOTICES", "MPL-2": - print "moving file: %s/%s" % (release_dir, releasefile) + print("moving file: %s/%s" % (release_dir, releasefile)) os.rename("%s/%s" % (release_dir, releasefile), releasefile) os.rmdir(release_dir) except Exception: @@ -441,7 +441,7 @@ def make_package(distro, build_os, arch, # directory, so the debian directory is needed in all cases (and # innocuous in the debianoids' sdirs). for pkgdir in ["debian", "rpm"]: - print "Copying packaging files from %s to %s" % ("%s/%s" % (srcdir, pkgdir), sdir) + print("Copying packaging files from %s to %s" % ("%s/%s" % (srcdir, pkgdir), sdir)) # FIXME: sh-dash-cee is bad. See if tarfile can do this. sysassert(["sh", "-c", "(cd \"%s\" && git archive %s %s/ ) | (cd \"%s\" && tar xvf -)" % (srcdir, spec.metadata_gitspec(), pkgdir, sdir)]) # Splat the binaries under sdir. The "build" stages of the Index: mongodb-src-r3.6.8/buildscripts/resmokelib/core/process.py =================================================================== --- mongodb-src-r3.6.8.orig/buildscripts/resmokelib/core/process.py +++ mongodb-src-r3.6.8/buildscripts/resmokelib/core/process.py @@ -196,8 +196,8 @@ class Process(object): finally: win32api.CloseHandle(mongo_signal_handle) - print "Failed to cleanly exit the program, calling TerminateProcess() on PID: " +\ - str(self._process.pid) + print("Failed to cleanly exit the program, calling TerminateProcess() on PID: " +\ + str(self._process.pid)) # Adapted from implementation of Popen.terminate() in subprocess.py of Python 2.7 # because earlier versions do not catch exceptions. Index: mongodb-src-r3.6.8/buildscripts/smoke.py =================================================================== --- mongodb-src-r3.6.8.orig/buildscripts/smoke.py +++ mongodb-src-r3.6.8/buildscripts/smoke.py @@ -133,17 +133,17 @@ class NullMongod(object): def dump_stacks(signal, frame): - print "======================================" - print "DUMPING STACKS due to SIGUSR1 signal" - print "======================================" + print("======================================") + print("DUMPING STACKS due to SIGUSR1 signal") + print("======================================") threads = threading.enumerate(); - print "Total Threads: " + str(len(threads)) + print("Total Threads: " + str(len(threads))) for id, stack in sys._current_frames().items(): - print "Thread %d" % (id) - print "".join(traceback.format_stack(stack)) - print "======================================" + print("Thread %d" % (id)) + print("".join(traceback.format_stack(stack))) + print("======================================") def buildlogger(cmd, is_global=False): @@ -196,8 +196,8 @@ class mongod(NullMongod): try: self.check_mongo_port(int(port)) return True - except Exception,e: - print >> sys.stderr, e + except Exception as e: + print(e, file=sys.stderr) return False def did_mongod_start(self, port=mongod_port, timeout=300): @@ -207,14 +207,14 @@ class mongod(NullMongod): if is_up: return True timeout = timeout - 1 - print >> sys.stderr, "timeout starting mongod" + print( "timeout starting mongod", file=sys.stderr) return False def start(self): global mongod_port global mongod if self.proc: - print >> sys.stderr, "probable bug: self.proc already set in start()" + print( "probable bug: self.proc already set in start()", file=sys.stderr) return self.ensure_test_dirs() dir_name = smoke_db_prefix + "/data/db/sconsTests/" @@ -270,7 +270,7 @@ class mongod(NullMongod): '--sslAllowConnectionsWithoutCertificates'] if self.kwargs.get('rlp_path'): argv += ['--basisTechRootDirectory', self.kwargs.get('rlp_path')] - print "running " + " ".join(argv) + print( "running " + " ".join(argv)) self.proc = self._start(buildlogger(argv, is_global=True)) # If the mongod process is spawned under buildlogger.py, then the first line of output @@ -352,7 +352,7 @@ class mongod(NullMongod): def stop(self): if not self.proc: - print >> sys.stderr, "probable bug: self.proc unset in stop()" + print("probable bug: self.proc unset in stop()", file=sys.stderr) return try: if os.sys.platform == "win32" and self.job_object is not None: @@ -407,9 +407,9 @@ class mongod(NullMongod): self.proc.terminate() else: os.kill(self.proc.pid, 15) - except Exception, e: - print >> sys.stderr, "error shutting down mongod" - print >> sys.stderr, e + except Exception as e: + print( "error shutting down mongod", file=sys.stderr) + print(e, file=sys.stderr) self.proc.wait() if self._stdout_pipe is not None: @@ -427,9 +427,9 @@ class mongod(NullMongod): raise(Exception('mongod process exited with non-zero code %d' % retcode)) def wait_for_repl(self): - print "Awaiting replicated (w:2, wtimeout:5min) insert (port:" + str(self.port) + ")" + print( "Awaiting replicated (w:2, wtimeout:5min) insert (port:" + str(self.port) + ")") MongoClient(port=self.port).testing.smokeWait.insert({}, w=2, wtimeout=5*60*1000) - print "Replicated write completed -- done wait_for_repl" + print("Replicated write completed -- done wait_for_repl") class Bug(Exception): def __str__(self): @@ -506,7 +506,7 @@ def check_db_hashes(master, slave): mOplog = mTestDB.connection.local[oplog]; oplog_entries = list(mOplog.find({"$or": [{"ns":mTestDB[coll].full_name}, \ {"op":"c"}]}).sort("$natural", 1)) - print "oplog for %s" % mTestDB[coll].full_name + print("oplog for %s" % mTestDB[coll].full_name) for doc in oplog_entries: pprint.pprint(doc, width=200) @@ -745,7 +745,7 @@ def runTest(test, result): is_mongod_still_up = test_mongod.is_mongod_up(mongod_port) if start_mongod and not is_mongod_still_up: - print "mongod is not running after test" + print("mongod is not running after test") result["mongod_running_at_end"] = is_mongod_still_up; raise TestServerFailure(path) @@ -754,7 +754,7 @@ def runTest(test, result): if r != 0: raise TestExitFailure(path, r) - print "" + print("") def run_tests(tests): # FIXME: some suites of tests start their own mongod, so don't @@ -825,7 +825,7 @@ def run_tests(tests): result = primary.admin.command("ismaster"); ismaster = result["ismaster"] if not ismaster: - print "waiting for primary to be available ..." + print("waiting for primary to be available ...") time.sleep(.2) secondaryUp = False @@ -835,7 +835,7 @@ def run_tests(tests): result = sConn.admin.command("ismaster"); secondaryUp = result["secondary"] if not secondaryUp: - print "waiting for secondary to be available ..." + print("waiting for secondary to be available ...") time.sleep(.2) if small_oplog or small_oplog_rs: @@ -857,7 +857,7 @@ def run_tests(tests): if skipTest(test_path): test_result["status"] = "skip" - print "skipping " + test_path + print("skipping " + test_path) else: fails.append(test) runTest(test, test_result) @@ -904,7 +904,7 @@ def run_tests(tests): test_result["status"] = "fail" test_report["results"].append( test_result ) try: - print f + print(f) # Record the failing test and re-raise. losers[f.path] = f.status raise f @@ -925,51 +925,51 @@ def run_tests(tests): def check_and_report_replication_dbhashes(): def missing(lst, src, dst): if lst: - print """The following collections were present in the %s but not the %s -at the end of testing:""" % (src, dst) + print("""The following collections were present in the %s but not the %s +at the end of testing:""" % (src, dst)) for db in lst: - print db + print(db) missing(lost_in_slave, "master", "slave") missing(lost_in_master, "slave", "master") if screwy_in_slave: - print """The following collections have different hashes in the master and slave:""" + print("""The following collections have different hashes in the master and slave:""") for coll in screwy_in_slave.keys(): stats = screwy_in_slave[coll] # Counts are "approx" because they are collected after the dbhash runs and may not # reflect the states of the collections that were hashed. If the hashes differ, one # possibility is that a test exited with writes still in-flight. - print "collection: %s\t (master/slave) hashes: %s/%s counts (approx): %i/%i" % (coll, stats['hashes']['master'], stats['hashes']['slave'], stats['counts']['master'], stats['counts']['slave']) + print("collection: %s\t (master/slave) hashes: %s/%s counts (approx): %i/%i" % (coll, stats['hashes']['master'], stats['hashes']['slave'], stats['counts']['master'], stats['counts']['slave'])) if "docs" in stats: if (("master" in stats["docs"] and len(stats["docs"]["master"]) == 0) and ("slave" in stats["docs"] and len(stats["docs"]["slave"]) == 0)): - print "All docs matched!" + print("All docs matched!") else: - print "Different Docs" - print "Master docs:" + print("Different Docs") + print("Master docs:") pprint.pprint(stats["docs"]["master"], indent=2) - print "Slave docs:" + print("Slave docs:") pprint.pprint(stats["docs"]["slave"], indent=2) if "error-docs" in stats: - print "Error getting docs to diff:" + print("Error getting docs to diff:") pprint.pprint(stats["error-docs"]) return True if (small_oplog or small_oplog_rs) and not (lost_in_master or lost_in_slave or screwy_in_slave): - print "replication ok for %d collections" % (len(replicated_collections)) + print("replication ok for %d collections" % (len(replicated_collections))) return False def report(): - print "%d tests succeeded" % len(winners) + print("%d tests succeeded" % len(winners)) num_missed = len(tests) - (len(winners) + len(losers.keys())) if num_missed: - print "%d tests didn't get run" % num_missed + print("%d tests didn't get run" % num_missed) if losers: - print "The following tests failed (with exit code):" + print("The following tests failed (with exit code):") for loser in losers: - print "%s\t%d" % (loser, losers[loser]) + print("%s\t%d" % (loser, losers[loser])) test_result = { "start": time.time() } if check_and_report_replication_dbhashes(): @@ -1244,7 +1244,7 @@ def run_old_fails(): return # This counts as passing so we will run all tests if ('version' not in state or state['version'] != file_version()): - print "warning: old version of failfile.smoke detected. skipping recent fails" + print("warning: old version of failfile.smoke detected. skipping recent fails") clear_failfile() return @@ -1308,7 +1308,7 @@ def main(): try: signal.signal(signal.SIGUSR1, dump_stacks) except AttributeError: - print "Cannot catch signals on Windows" + print("Cannot catch signals on Windows") parser = OptionParser(usage="usage: smoke.py [OPTIONS] ARGS*") parser.add_option('--mode', dest='mode', default='suite', @@ -1450,11 +1450,11 @@ def main(): if options.ignore_files != None : ignore_patt = re.compile( options.ignore_files ) - print "Ignoring files with pattern: ", ignore_patt + print("Ignoring files with pattern: ", ignore_patt) def ignore_test( test ): if ignore_patt.search( test[0] ) != None: - print "Ignoring test ", test[0] + print("Ignoring test ", test[0]) return False else: return True @@ -1462,7 +1462,7 @@ def main(): tests = filter( ignore_test, tests ) if not tests: - print "warning: no tests specified" + print("warning: no tests specified") return if options.with_cleanbb: Index: mongodb-src-r3.6.8/buildscripts/utils.py =================================================================== --- mongodb-src-r3.6.8.orig/buildscripts/utils.py +++ mongodb-src-r3.6.8/buildscripts/utils.py @@ -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 try: checkMongoPort( port ) return True - except Exception,e: + except Exception as e: print( e ) timeout = timeout - 1 return False Index: mongodb-src-r3.6.8/SConstruct =================================================================== --- mongodb-src-r3.6.8.orig/SConstruct +++ mongodb-src-r3.6.8/SConstruct @@ -388,7 +388,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', @@ -497,7 +497,7 @@ except ValueError as e: 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': @@ -751,7 +751,8 @@ env_vars.Add('TOOLS', env_vars.Add('VARIANT_DIR', help='Sets the name (or generator function) for the variant directory', - default=mongo_generators.default_variant_dir_generator, +# default=mongo_generators.default_variant_dir_generator, + default="blah", ) env_vars.Add('VERBOSE', @@ -826,7 +827,7 @@ SConsignFile(str(sconsDataDir.File('scon def printLocalInfo(): import sys, SCons print( "scons version: " + SCons.__version__ ) - print( "python version: " + " ".join( [ `i` for i in sys.version_info ] ) ) + print( "python version: " + " ".join( [ str(i) for i in sys.version_info ] ) ) printLocalInfo() @@ -1938,7 +1939,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() Index: mongodb-src-r3.6.8/site_scons/libdeps.py =================================================================== --- mongodb-src-r3.6.8.orig/site_scons/libdeps.py +++ mongodb-src-r3.6.8/site_scons/libdeps.py @@ -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 @@ -150,7 +150,7 @@ 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): + if type(syslib) in (bytes, 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." % @@ -209,7 +209,7 @@ def get_syslibdeps(source, target, env, # 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) in (bytes, str): result.append('%s%s%s' % (lib_link_prefix, d, lib_link_suffix)) else: result.append(d) Index: mongodb-src-r3.6.8/site_scons/mongo/generators.py =================================================================== --- mongodb-src-r3.6.8.orig/site_scons/mongo/generators.py +++ mongodb-src-r3.6.8/site_scons/mongo/generators.py @@ -1,6 +1,6 @@ # -*- mode: python; -*- -import md5 +from hashlib import md5 # Default and alternative generator definitions go here. @@ -44,7 +44,7 @@ def default_variant_dir_generator(target # Hash the named options and their values, and take the first 8 characters of the hash as # the variant name - hasher = md5.md5() + hasher = md5() for option in variant_options: hasher.update(option) hasher.update(str(env.GetOption(option))) Index: mongodb-src-r3.6.8/site_scons/mongo/__init__.py =================================================================== --- mongodb-src-r3.6.8.orig/site_scons/mongo/__init__.py +++ mongodb-src-r3.6.8/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)) Index: mongodb-src-r3.6.8/site_scons/site_tools/distsrc.py =================================================================== --- mongodb-src-r3.6.8.orig/site_scons/site_tools/distsrc.py +++ mongodb-src-r3.6.8/site_scons/site_tools/distsrc.py @@ -20,7 +20,10 @@ import shutil import tarfile import time import zipfile -import StringIO +try: + import StringIO +except ImportError: + from io import StringIO from distutils.spawn import find_executable @@ -82,7 +85,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) @@ -119,7 +122,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 +132,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 +142,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 +165,7 @@ def distsrc_action_generator(source, tar 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" % ( Index: mongodb-src-r3.6.8/site_scons/site_tools/idl_tool.py =================================================================== --- mongodb-src-r3.6.8.orig/site_scons/site_tools/idl_tool.py +++ mongodb-src-r3.6.8/site_scons/site_tools/idl_tool.py @@ -47,7 +47,8 @@ def idl_scanner(node, env, path): deps_list = deps_str.splitlines() - nodes_deps_list = [ env.File(d) for d in deps_list] + # scons likes ascii encoded "files" so lets provide one to it... + nodes_deps_list = [ env.File(d.decode("ascii", "ignore")) for d in deps_list] nodes_deps_list.extend(env.Glob('#buildscripts/idl/*.py')) nodes_deps_list.extend(env.Glob('#buildscripts/idl/idl/*.py')) Index: mongodb-src-r3.6.8/site_scons/site_tools/jstoh.py =================================================================== --- mongodb-src-r3.6.8.orig/site_scons/site_tools/jstoh.py +++ mongodb-src-r3.6.8/site_scons/site_tools/jstoh.py @@ -39,17 +39,17 @@ def jsToHeader(target, source): text = '\n'.join(h) - print "writing: %s" % outFile + print( "writing: %s" % outFile) with open(outFile, 'wb') as out: try: - out.write(text) + out.write(text.encode(encoding='utf_8',errors='strict')) finally: out.close() if __name__ == "__main__": if len(sys.argv) < 3: - print "Must specify [target] [source] " + print("Must specify [target] [source] ") sys.exit(1) jsToHeader(sys.argv[1], sys.argv[2:]) Index: mongodb-src-r3.6.8/site_scons/site_tools/mongo_integrationtest.py =================================================================== --- mongodb-src-r3.6.8.orig/site_scons/site_tools/mongo_integrationtest.py +++ mongodb-src-r3.6.8/site_scons/site_tools/mongo_integrationtest.py @@ -15,7 +15,7 @@ def integration_test_list_builder_action ofile = open(str(target[0]), 'wb') try: for s in _integration_tests: - print '\t' + str(s) + print('\t' + str(s)) ofile.write('%s\n' % s) finally: ofile.close() Index: mongodb-src-r3.6.8/site_scons/site_tools/mongo_unittest.py =================================================================== --- mongodb-src-r3.6.8.orig/site_scons/site_tools/mongo_unittest.py +++ mongodb-src-r3.6.8/site_scons/site_tools/mongo_unittest.py @@ -14,7 +14,7 @@ def unit_test_list_builder_action(env, t ofile = open(str(target[0]), 'wb') try: for s in _unittests: - print '\t' + str(s) + print('\t' + str(s)) ofile.write('%s\n' % s) finally: ofile.close() Index: mongodb-src-r3.6.8/site_scons/site_tools/thin_archive.py =================================================================== --- mongodb-src-r3.6.8.orig/site_scons/site_tools/thin_archive.py +++ mongodb-src-r3.6.8/site_scons/site_tools/thin_archive.py @@ -41,7 +41,7 @@ def exists(env): for line in pipe.stdout: if isgnu: continue # consume all data - isgnu = re.search(r'^GNU ar', line) + isgnu = re.search(r'^GNU ar', str(line)) return bool(isgnu) Index: mongodb-src-r3.6.8/src/mongo/base/generate_error_codes.py =================================================================== --- mongodb-src-r3.6.8.orig/src/mongo/base/generate_error_codes.py +++ mongodb-src-r3.6.8/src/mongo/base/generate_error_codes.py @@ -94,7 +94,7 @@ def main(argv): ) with open(output, 'wb') as outfile: - outfile.write(text) + outfile.write(bytes(text,encoding='utf-8')) def die(message=None): sys.stderr.write(message or "Fatal error\n") Index: mongodb-src-r3.6.8/src/mongo/db/auth/generate_action_types.py =================================================================== --- mongodb-src-r3.6.8.orig/src/mongo/db/auth/generate_action_types.py +++ mongodb-src-r3.6.8/src/mongo/db/auth/generate_action_types.py @@ -227,7 +227,7 @@ def hasDuplicateActionTypes(actionTypes) prevActionType = sortedActionTypes[0] for actionType in sortedActionTypes[1:]: if actionType == prevActionType: - print 'Duplicate actionType %s\n' % actionType + print('Duplicate actionType %s\n' % actionType) didFail = True prevActionType = actionType @@ -240,7 +240,7 @@ def parseActionTypesFromFile(actionTypes if __name__ == "__main__": if len(sys.argv) != 4: - print "Usage: generate_action_types.py <path to action_types.txt> <header file path> <source file path>" + print("Usage: generate_action_types.py <path to action_types.txt> <header file path> <source file path>") sys.exit(-1) actionTypes = parseActionTypesFromFile(sys.argv[1]) Index: mongodb-src-r3.6.8/src/mongo/db/fts/generate_stop_words.py =================================================================== --- mongodb-src-r3.6.8.orig/src/mongo/db/fts/generate_stop_words.py +++ mongodb-src-r3.6.8/src/mongo/db/fts/generate_stop_words.py @@ -19,39 +19,47 @@ namespace fts { void loadStopWordMap( StringMap< std::set< std::string > >* m ); } } -""" ) +""".encode(encoding='utf_8',errors='strict') ) out.close() out = open( source, "wb" ) - out.write( '#include "%s"' % header.rpartition( "/" )[2].rpartition( "\\" )[2] ) + tmp_buf = '#include "%s"' % header.rpartition( "/" )[2].rpartition( "\\" )[2] + out.write( tmp_buf.encode(encoding='utf_8',errors='strict') ) + + out.write( """ namespace mongo { namespace fts { void loadStopWordMap( StringMap< std::set< std::string > >* m ) { - -""" ) +""".encode(encoding='utf_8',errors='strict') ) for l_file in language_files: l = l_file.rpartition( "_" )[2].partition( "." )[0] - out.write( ' // %s\n' % l_file ) - out.write( ' {\n' ) - out.write( ' const char* const words[] = {\n' ) + tmp_buf = """ // %s + { + const char* const words[] = { +""" % l_file + out.write( tmp_buf.encode(encoding='utf_8',errors='strict') ) for word in open( l_file, "rb" ): - out.write( ' "%s",\n' % word.strip() ) - out.write( ' };\n' ) - out.write( ' const size_t wordcnt = sizeof(words) / sizeof(words[0]);\n' ) - out.write( ' std::set< std::string >& l = (*m)["%s"];\n' % l ) - out.write( ' l.insert(&words[0], &words[wordcnt]);\n' ) - out.write( ' }\n' ) + out.write( ' "%s",\n'.encode(encoding='utf_8',errors='strict') % word.strip() ) + tmp_buf=""" + }; + const size_t wordcnt = sizeof(words) / sizeof(words[0]); + std::set< std::string >& l = (*m)["%s"]; + l.insert(&words[0], &words[wordcnt]); + } + +""" % l + out.write( tmp_buf.encode(encoding='utf_8',errors='strict') ) out.write( """ } } // namespace fts } // namespace mongo -""" ) +""".encode(encoding='utf_8',errors='strict') ) if __name__ == "__main__": Index: mongodb-src-r3.6.8/src/mongo/db/fts/unicode/gen_casefold_map.py =================================================================== --- mongodb-src-r3.6.8.orig/src/mongo/db/fts/unicode/gen_casefold_map.py +++ mongodb-src-r3.6.8/src/mongo/db/fts/unicode/gen_casefold_map.py @@ -22,7 +22,7 @@ def generate(unicode_casefold_file, targ case_mappings = {} - cf_file = open(unicode_casefold_file, 'rU') + cf_file = open(unicode_casefold_file, 'rU',encoding="utf-8") for line in cf_file: # Filter out blank lines and lines that start with # Index: mongodb-src-r3.6.8/src/mongo/db/query/collation/generate_icu_init_cpp.py =================================================================== --- mongodb-src-r3.6.8.orig/src/mongo/db/query/collation/generate_icu_init_cpp.py +++ mongodb-src-r3.6.8/src/mongo/db/query/collation/generate_icu_init_cpp.py @@ -83,8 +83,8 @@ def generate_cpp_file(data_file_path, cp #include "mongo/base/init.h" #include "mongo/util/assert_util.h" -namespace mongo { -namespace { +namespace mongo {{ +namespace {{ // alignas() is used here to ensure 16-alignment of ICU data. See the following excerpt from the // ICU user guide (<http://userguide.icu-project.org/icudata#TOC-Alignment>): @@ -95,24 +95,23 @@ namespace { // n-alignment of types of size n bytes (and crash on unaligned reads), other CPUs usually operate // faster on data that is aligned properly. Some of the ICU code explicitly checks for proper // alignment." -alignas(16) const uint8_t kRawData[] = {%(decimal_encoded_data)s}; +alignas(16) const uint8_t kRawData[] = {{ {decimal_encoded_data} }}; +}} // namespace -} // namespace - -MONGO_INITIALIZER(LoadICUData)(InitializerContext* context) { +MONGO_INITIALIZER(LoadICUData)(InitializerContext* context) {{ UErrorCode status = U_ZERO_ERROR; udata_setCommonData(kRawData, &status); fassert(40088, U_SUCCESS(status)); return Status::OK(); -} +}} -} // namespace mongo +}} // namespace mongo ''' decimal_encoded_data = '' with open(data_file_path, 'rb') as data_file: - decimal_encoded_data = ','.join([str(ord(byte)) for byte in data_file.read()]) + decimal_encoded_data = ','.join([str(byte) for byte in data_file.read()]) with open(cpp_file_path, 'wb') as cpp_file: - cpp_file.write(source_template % dict(decimal_encoded_data=decimal_encoded_data)) - + tmp_buf = source_template.format(decimal_encoded_data=decimal_encoded_data) + cpp_file.write(tmp_buf.encode(encoding='utf_8',errors='strict')) if __name__ == '__main__': main(sys.argv) Index: mongodb-src-r3.6.8/src/mongo/SConscript =================================================================== --- mongodb-src-r3.6.8.orig/src/mongo/SConscript +++ mongodb-src-r3.6.8/src/mongo/SConscript @@ -157,7 +157,7 @@ js_engine_ver = get_option("js-engine") # On windows, we need to escape the backslashes in the command-line # so that windows paths look okay. -cmd_line = " ".join(sys.argv).encode('string-escape') +cmd_line = " ".join(sys.argv).encode('unicode_escape') if env.TargetOSIs('windows'): cmd_line = cmd_line.replace('\\', r'\\') @@ -604,7 +604,7 @@ env.Append(MODULE_BANNERS = [distsrc.Fil distsrc.File('MPL-2')]) # If no module has introduced a file named LICENSE.txt, then inject the AGPL. -if sum(itertools.imap(lambda x: x.name == "LICENSE.txt", env['MODULE_BANNERS'])) == 0: +if sum(map(lambda x: x.name == "LICENSE.txt", env['MODULE_BANNERS'])) == 0: env.Append(MODULE_BANNERS = [distsrc.File('GNU-AGPL-3.0')]) # All module banners get staged to the top level of the tarfile, so we Index: mongodb-src-r3.6.8/src/mongo/SConscript.orig =================================================================== --- /dev/null +++ mongodb-src-r3.6.8/src/mongo/SConscript.orig @@ -0,0 +1,706 @@ +# -*- mode: python; -*- + +# This SConscript describes build rules for the "mongo" project. + +import itertools +import os +import re +import sys +from buildscripts import utils + +Import("env") +Import("has_option") +Import("get_option") +Import("usemozjs") +Import("use_system_version_of_library") + +env = env.Clone() + +env.InjectMongoIncludePaths() + +env.SConscript( + dirs=[ + 'base', + 'bson', + 'client', + 'crypto', + 'db', + 'dbtests', + 'executor', + 'idl', + 'installer', + 'logger', + 'platform', + 'rpc', + 's', + 'scripting', + 'shell', + 'tools', + 'transport', + 'unittest', + 'util', + ], + exports=[ + 'env', + ], +) + +# NOTE: This library does not really belong here. Its presence here is +# temporary. Do not add to this library, do not remove from it, and do +# not declare other libraries in this file. + +baseSource=[ + 'base/data_range.cpp', + 'base/data_range_cursor.cpp', + 'base/data_type.cpp', + 'base/data_type_string_data.cpp', + 'base/data_type_terminated.cpp', + 'base/error_codes.cpp', + 'base/global_initializer.cpp', + 'base/global_initializer_registerer.cpp', + 'base/init.cpp', + 'base/initializer.cpp', + 'base/initializer_context.cpp', + 'base/initializer_dependency_graph.cpp', + 'base/make_string_vector.cpp', + 'base/parse_number.cpp', + 'base/simple_string_data_comparator.cpp', + 'base/status.cpp', + 'base/string_data.cpp', + 'base/validate_locale.cpp', + 'bson/bson_comparator_interface_base.cpp', + 'bson/bson_depth.cpp', + 'bson/bson_validate.cpp', + 'bson/bsonelement.cpp', + 'bson/bsonmisc.cpp', + 'bson/bsonobj.cpp', + 'bson/bsonobjbuilder.cpp', + 'bson/bsontypes.cpp', + 'bson/json.cpp', + 'bson/oid.cpp', + 'bson/simple_bsonelement_comparator.cpp', + 'bson/simple_bsonobj_comparator.cpp', + 'bson/timestamp.cpp', + 'logger/component_message_log_domain.cpp', + 'logger/console.cpp', + 'logger/log_component.cpp', + 'logger/log_component_settings.cpp', + 'logger/log_manager.cpp', + 'logger/log_severity.cpp', + 'logger/logger.cpp', + 'logger/logstream_builder.cpp', + 'logger/max_log_size.cpp', + 'logger/message_event_utf8_encoder.cpp', + 'logger/message_log_domain.cpp', + 'logger/ramlog.cpp', + 'logger/redaction.cpp', + 'logger/rotatable_file_manager.cpp', + 'logger/rotatable_file_writer.cpp', + 'platform/decimal128.cpp', + 'platform/posix_fadvise.cpp', + 'platform/process_id.cpp', + 'platform/random.cpp', + 'platform/shared_library.cpp', + 'platform/shared_library_${TARGET_OS_FAMILY}.cpp', + 'platform/stack_locator.cpp', + 'platform/stack_locator_${TARGET_OS}.cpp', + 'platform/strcasestr.cpp', + 'platform/strnlen.cpp', + 'util/allocator.cpp', + 'util/assert_util.cpp', + 'util/base64.cpp', + 'util/concurrency/idle_thread_block.cpp', + 'util/concurrency/thread_name.cpp', + 'util/duration.cpp', + 'util/errno_util.cpp', + 'util/exception_filter_win32.cpp', + 'util/exit.cpp', + 'util/file.cpp', + 'util/hex.cpp', + 'util/itoa.cpp', + 'util/log.cpp', + 'util/platform_init.cpp', + 'util/signal_handlers_synchronous.cpp', + 'util/stacktrace.cpp', + 'util/stacktrace_${TARGET_OS_FAMILY}.cpp', + 'util/startup_test.cpp', + 'util/stringutils.cpp', + 'util/system_clock_source.cpp', + 'util/system_tick_source.cpp', + 'util/text.cpp', + 'util/time_support.cpp', + 'util/timer.cpp', + 'util/version.cpp', +] + +baseLibDeps=[ + # NOTE: This library *must not* depend on any libraries than + # the ones declared here. Do not add to this list. + '$BUILD_DIR/third_party/murmurhash3/murmurhash3', + '$BUILD_DIR/third_party/shim_allocator', + '$BUILD_DIR/third_party/shim_boost', + '$BUILD_DIR/third_party/shim_intel_decimal128', + '$BUILD_DIR/third_party/shim_pcrecpp', + '$BUILD_DIR/third_party/shim_tz', + 'util/debugger', + 'util/quick_exit', +] + +env.Library( + target='base', + source=baseSource, + LIBDEPS=baseLibDeps, +) + +js_engine_ver = get_option("js-engine") if get_option("server-js") == "on" else "none" + +# On windows, we need to escape the backslashes in the command-line +# so that windows paths look okay. +cmd_line = " ".join(sys.argv).encode('string-escape') +if env.TargetOSIs('windows'): + cmd_line = cmd_line.replace('\\', r'\\') + +module_list = '{ %s }' % ', '.join([ '"{0}"'.format(x) for x in env['MONGO_MODULES'] ]) + +# This generates a numeric representation of the version string so that +# you can easily compare versions of MongoDB without having to parse +# the version string. +# +# The rules for this are +# {major}{minor}{release}{pre/rc/final} +# If the version is pre-release and not an rc, the final number is 0 +# If the version is an RC, the final number of 1 + rc number +# If the version is pre-release between RC's, the final number is 1 + rc number +# If the version is a final release, the final number is 99 +# +# Examples: +# 3.1.1-123 = 3010100 +# 3.1.1-rc2 = 3010103 +# 3.1.1-rc2-123 = 3010103 +# 3.1.1 = 3010199 +# +version_parts = [ x for x in re.match(r'^(\d+)\.(\d+)\.(\d+)-?((?:(rc)(\d+))?.*)?', + env['MONGO_VERSION']).groups() ] +version_extra = version_parts[3] if version_parts[3] else "" +if version_parts[4] == 'rc': + version_parts[3] = int(version_parts[5]) + -50 +elif version_parts[3]: + version_parts[2] = int(version_parts[2]) + 1 + version_parts[3] = -100 +else: + version_parts[3] = 0 +version_parts = [ int(x) for x in version_parts[:4]] + +# This turns the MONGO_BUILDINFO_ENVIRONMENT_DATA tuples into a std::vector of +# std::tuple<string, string, bool, bool>. +buildInfoInitializer = [] +for tup in env['MONGO_BUILDINFO_ENVIRONMENT_DATA']: + def pyToCXXBool(val): + return "true" if val else "false" + def wrapInQuotes(val): + return '"{0}"'.format(val) + buildInfoInitializer.append( + 'std::make_tuple({0})'.format(', '.join( + ( + wrapInQuotes(tup[0]), + wrapInQuotes(env.subst(tup[1])), + pyToCXXBool(tup[2]), + pyToCXXBool(tup[3]), + ) + )) + ) +buildInfoInitializer = '{{ {0} }}'.format(', '.join(buildInfoInitializer)) + +generatedVersionFile = env.Substfile( + 'util/version_constants.h.in', + SUBST_DICT=[ + ('@mongo_version@', env['MONGO_VERSION']), + ('@mongo_version_major@', version_parts[0]), + ('@mongo_version_minor@', version_parts[1]), + ('@mongo_version_patch@', version_parts[2]), + ('@mongo_version_extra@', version_parts[3]), + ('@mongo_version_extra_str@', version_extra), + ('@mongo_git_hash@', env['MONGO_GIT_HASH']), + ('@buildinfo_js_engine@', js_engine_ver), + ('@buildinfo_allocator@', env['MONGO_ALLOCATOR']), + ('@buildinfo_modules@', module_list), + ('@buildinfo_environment_data@', buildInfoInitializer), + ]) +env.Alias('generated-sources', generatedVersionFile) + +if env.TargetOSIs('windows'): + enterpriseEnv = env.Clone().InjectModule("enterprise") + generatedResourceConstantFile = enterpriseEnv.Substfile( + 'util/resource_constants.h.in', + SUBST_DICT=[ + ('@mongo_version@', env['MONGO_VERSION']), + ('@mongo_version_major@', version_parts[0]), + ('@mongo_version_minor@', version_parts[1]), + ('@mongo_version_patch@', version_parts[2]), + ('@mongo_git_hash@', env['MONGO_GIT_HASH']), + ]) + env.Alias('generated-sources', generatedResourceConstantFile) + +config_header_substs = ( + ('@mongo_config_byte_order@', 'MONGO_CONFIG_BYTE_ORDER'), + ('@mongo_config_debug_build@', 'MONGO_CONFIG_DEBUG_BUILD'), + ('@mongo_config_have_execinfo_backtrace@', 'MONGO_CONFIG_HAVE_EXECINFO_BACKTRACE'), + ('@mongo_config_have_fips_mode_set@', 'MONGO_CONFIG_HAVE_FIPS_MODE_SET'), + ('@mongo_config_have_header_unistd_h@', 'MONGO_CONFIG_HAVE_HEADER_UNISTD_H'), + ('@mongo_config_have_memset_s@', 'MONGO_CONFIG_HAVE_MEMSET_S'), + ('@mongo_config_have_posix_monotonic_clock@', 'MONGO_CONFIG_HAVE_POSIX_MONOTONIC_CLOCK'), + ('@mongo_config_have_pthread_setname_np@', 'MONGO_CONFIG_HAVE_PTHREAD_SETNAME_NP'), + ('@mongo_config_have_std_enable_if_t@', 'MONGO_CONFIG_HAVE_STD_ENABLE_IF_T'), + ('@mongo_config_have_std_make_unique@', 'MONGO_CONFIG_HAVE_STD_MAKE_UNIQUE'), + ('@mongo_config_have_strnlen@', 'MONGO_CONFIG_HAVE_STRNLEN'), + ('@mongo_config_max_extended_alignment@', 'MONGO_CONFIG_MAX_EXTENDED_ALIGNMENT'), + ('@mongo_config_optimized_build@', 'MONGO_CONFIG_OPTIMIZED_BUILD'), + ('@mongo_config_ssl@', 'MONGO_CONFIG_SSL'), + ('@mongo_config_ssl_has_asn1_any_definitions@', 'MONGO_CONFIG_HAVE_ASN1_ANY_DEFINITIONS'), + ('@mongo_config_has_ssl_set_ecdh_auto@', 'MONGO_CONFIG_HAS_SSL_SET_ECDH_AUTO'), + ('@mongo_config_wiredtiger_enabled@', 'MONGO_CONFIG_WIREDTIGER_ENABLED'), +) + +def makeConfigHeaderDefine(self, key): + val = "// #undef {0}".format(key) + if key in self['CONFIG_HEADER_DEFINES']: + val = "#define {0} {1}".format(key, self['CONFIG_HEADER_DEFINES'][key]) + return val +env.AddMethod(makeConfigHeaderDefine) + +generateConfigHeaderFile = env.Substfile( + 'config.h.in', + SUBST_DICT=[(k, env.makeConfigHeaderDefine(v)) for (k, v) in config_header_substs] +) +env.Alias('generated-sources', generateConfigHeaderFile) + +env.Library( + target="mongodmain", + source=[ + "db/db.cpp", + "db/mongod_options_init.cpp", + ], + LIBDEPS=[ + 'db/clientcursor', + 'db/commands/core', + 'db/conn_pool_options', + 'db/dbdirectclient', + 'db/ftdc/ftdc_mongod', + 'db/generic_cursor_mongod', + 'db/index_d', + 'db/initialize_snmp', + 'db/keys_collection_manager_direct', + 'db/kill_sessions_local', + 'db/logical_session_cache_factory_mongod', + 'db/mongod_options', + 'db/mongodandmongos', + 'db/op_observer_d', + 'db/repair_database', + 'db/repl/repl_set_commands', + 'db/repl/storage_interface_impl', + 'db/repl/topology_coordinator', + 'db/s/balancer', + 'db/serveronly', + 'db/service_context_d', + 'db/startup_warnings_mongod', + 'db/system_index', + 'db/ttl_d', + 'executor/network_interface_factory', + 'rpc/rpc', + 's/catalog/sharding_catalog_manager', + 's/commands/shared_cluster_commands', + 'transport/service_entry_point', + 'transport/transport_layer_manager', + 'util/clock_sources', + 'util/fail_point', + 'util/ntservice', + 'util/options_parser/options_parser_init', + 'util/periodic_runner_factory', + 'util/version_impl', + ], +) + + +if env.TargetOSIs('windows'): + generatedDbManifest = env.Substfile( + 'db/db.manifest.in', + SUBST_DICT=[ + ('@mongo_version_major@', version_parts[0]), + ('@mongo_version_minor@', version_parts[1]), + ('@mongo_version_patch@', version_parts[2]), + ('@mongo_version_extra@', version_parts[3]), + ('@mongo_version_extra_str@', version_extra), + ]) + + env.Alias('generated-sources', generatedDbManifest) + env.Depends("db/db.res", generatedDbManifest) + +mongod = env.Program( + target="mongod", + source=[ + "db/dbmain.cpp", + ] + env.WindowsResourceFile("db/db.rc"), + LIBDEPS=[ + 'mongodmain', + ], +) +env.Default(env.Install('#/', mongod)) + +# tools +rewrittenTools = [ "mongodump", "mongorestore", "mongoexport", "mongoimport", "mongostat", "mongotop", "bsondump", "mongofiles" ] + +# mongoperf +env.Install( + '#/', + [ + env.Program("mongoperf", + [ + "client/examples/mongoperf.cpp", + ] + env.WindowsResourceFile("client/examples/mongoperf.rc"), + LIBDEPS=[ + "db/serveronly", + ]), + ]) + +if env.TargetOSIs('windows'): + generatedServerManifest = env.Substfile( + 's/server.manifest.in', + SUBST_DICT=[ + ('@mongo_version_major@', version_parts[0]), + ('@mongo_version_minor@', version_parts[1]), + ('@mongo_version_patch@', version_parts[2]), + ('@mongo_version_extra@', version_parts[3]), + ('@mongo_version_extra_str@', version_extra), + ]) + + env.Alias('generated-sources', generatedServerManifest) + env.Depends("s/server.res", generatedServerManifest) + +# mongos +env.Install( + '#/', + env.Program( + target='mongos', + source=[ + 's/cluster_cursor_stats.cpp', + 's/mongos_options.cpp', + 's/mongos_options_init.cpp', + 's/s_sharding_server_status.cpp', + 's/server.cpp', + 's/service_entry_point_mongos.cpp', + 's/sharding_uptime_reporter.cpp', + 's/version_mongos.cpp', + ] + env.WindowsResourceFile("s/server.rc"), + LIBDEPS=[ + 'db/commands/core', + 'db/commands/server_status', + 'db/conn_pool_options', + 'db/ftdc/ftdc_mongos', + 'db/generic_cursor_mongos', + 'db/logical_time_metadata_hook', + 'db/mongodandmongos', + 'db/server_options', + 'db/stats/counters', + 's/client/sharding_connection_hook', + 's/commands/cluster_commands', + 's/commands/shared_cluster_commands', + 's/coreshard', + 's/is_mongos', + 's/sharding_egress_metadata_hook_for_mongos', + 's/sharding_initialization', + 'transport/service_entry_point', + 'transport/transport_layer_manager', + 'util/clock_sources', + 'util/fail_point', + 'util/ntservice', + 'util/options_parser/options_parser_init', + 'util/version_impl', + ])) + +env.Library("linenoise_utf8", + source=[ + "shell/linenoise_utf8.cpp", + ]) + +# --- shell --- + +if not has_option('noshell') and usemozjs: + shell_core_env = env.Clone() + if has_option("safeshell"): + shell_core_env.Append(CPPDEFINES=["MONGO_SAFE_SHELL"]) + shell_core_env.Library("shell_core", + source=[ + "shell/bench.cpp", + "shell/linenoise.cpp", + "shell/mk_wcwidth.cpp", + "shell/mongo-server.cpp", + "shell/shell_options.cpp", + "shell/shell_options_init.cpp", + "shell/shell_utils.cpp", + "shell/shell_utils_extended.cpp", + "shell/shell_utils_launcher.cpp", + ], + LIBDEPS=[ + 'db/logical_session_id_helpers', + 'db/catalog/index_key_validate', + 'db/query/command_request_response', + 'db/query/query_request', + 'db/server_options_core', + 'linenoise_utf8', + 'rpc/protocol', + 'scripting/scripting', + 'shell/mongojs', + 'transport/message_compressor', + 'util/net/network', + 'util/options_parser/options_parser_init', + 'util/processinfo', + 'util/signal_handlers', + 'util/version_impl', + 'executor/thread_pool_task_executor', + 'executor/network_interface_thread_pool', + 'executor/network_interface_factory' + ], + # Because `::environ` is resolved in `/usr/lib/crt1.o` on FreeBSD, this library + # needs to be marked `incomplete` on FreeBSD. + LIBDEPS_TAGS=[] if not env.TargetOSIs('freebsd') else [ + 'illegal_cyclic_or_unresolved_dependencies_whitelisted', + ], + ) + + shellEnv = env.Clone() + if env.TargetOSIs('windows'): + shellEnv.Append(LIBS=["winmm.lib"]) + + generatedMongoManifest = shellEnv.Substfile( + 'shell/shell.manifest.in', + SUBST_DICT=[ + ('@mongo_version_major@', version_parts[0]), + ('@mongo_version_minor@', version_parts[1]), + ('@mongo_version_patch@', version_parts[2]), + ('@mongo_version_extra@', version_parts[3]), + ('@mongo_version_extra_str@', version_extra), + ]) + shellEnv.Alias('generated-sources', generatedMongoManifest) + shellEnv.Depends("shell/shell.res", generatedMongoManifest) + + mongo_shell = shellEnv.Program( + "mongo", + ["shell/dbshell.cpp"] + env.WindowsResourceFile("shell/shell.rc"), + LIBDEPS=[ + "$BUILD_DIR/third_party/shim_pcrecpp", + "shell_core", + "db/server_options_core", + "client/clientdriver", + "$BUILD_DIR/mongo/util/password", + ], + LIBDEPS_PRIVATE=[ + "$BUILD_DIR/mongo/client/connection_string", + ] + ) + + shellEnv.Install( '#/', mongo_shell ) +else: + shellEnv = None + +# ---- INSTALL ------- + +# binaries + +distBinaries = [] +distDebugSymbols = [] + +def add_exe( v ): + return "${PROGPREFIX}%s${PROGSUFFIX}" % v + +def failMissingObjCopy(env, target, source): + env.FatalError("Generating debug symbols requires objcopy, please set the OBJCOPY variable.") + +def installBinary( e, name ): + debug_sym_name = name + name = add_exe( name ) + + debug_sym_cmd = None + if e.TargetOSIs('linux', 'solaris'): + if 'OBJCOPY' not in e: + debug_sym_cmd = failMissingObjCopy + else: + debug_sym_cmd = '${OBJCOPY} --only-keep-debug ${SOURCE} ${TARGET}' + debug_sym_name += '.debug' + elif e.TargetOSIs('darwin'): + debug_sym_name += '.dSYM' + debug_sym_cmd = 'dsymutil -o ${TARGET} ${SOURCE}' + elif e.ToolchainIs('msvc'): + debug_sym_name += '.pdb' + distBinaries.append(debug_sym_name) + distDebugSymbols.append(debug_sym_name) + + if debug_sym_cmd: + debug_sym = e.Command( + debug_sym_name, + name, + debug_sym_cmd + ) + e.Install("#/", debug_sym) + e.Alias('debugsymbols', debug_sym) + distDebugSymbols.append(debug_sym) + + if env.TargetOSIs('linux', 'solaris') and (not has_option("nostrip")): + strip_cmd = e.Command( + 'stripped/%s' % name, + [name, debug_sym], + '${OBJCOPY} --strip-debug --add-gnu-debuglink ${SOURCES[1]} ${SOURCES[0]} $TARGET' + ) + distBinaries.append('stripped/%s' % name) + else: + distBinaries.append(name) + + inst = e.Install( "$INSTALL_DIR/bin", name ) + + if env.TargetOSIs('posix'): + e.AddPostAction( inst, 'chmod 755 $TARGET' ) + +def installExternalBinary( e, name_str ): + name = env.File("#/%s" % add_exe(name_str)) + if not name.isfile(): + env.FatalError("ERROR: external binary not found: {0}", name) + + distBinaries.append(name) + inst = e.Install( "$INSTALL_DIR/bin", name ) + + if env.TargetOSIs('posix'): + e.AddPostAction( inst, 'chmod 755 $TARGET' ) + + +# "--use-new-tools" adds dependencies for rewritten (Go) tools +# It is required for "dist" but optional for "install" +if has_option("use-new-tools"): + toolsRoot = "src/mongo-tools" + for t in rewrittenTools: + installExternalBinary(env, "%s/%s" % (toolsRoot, t)) + if has_option("build-mongoreplay") and get_option("build-mongoreplay") == "true": + installExternalBinary(env, "%s/%s" % (toolsRoot, "mongoreplay")) + +# legacy tools +installBinary(env, "mongoperf") +env.Alias("tools", '#/' + add_exe("mongoperf")) + +env.Alias("tools", "#/" + add_exe("mongobridge")) + +installBinary( env, "mongod" ) +installBinary( env, "mongos" ) + +if shellEnv is not None: + installBinary( shellEnv, "mongo" ) + env.Alias( "core", [ '#/%s' % b for b in [ add_exe( "mongo" ) ] ] ) + +env.Alias( "core", [ '#/%s' % b for b in [ add_exe( "mongod" ), add_exe( "mongos" ) ] ] ) + +# Stage the top-level mongodb banners +distsrc = env.Dir('#distsrc') +env.Append(MODULE_BANNERS = [distsrc.File('README'), + distsrc.File('THIRD-PARTY-NOTICES'), + distsrc.File('MPL-2')]) + +# If no module has introduced a file named LICENSE.txt, then inject the AGPL. +if sum(itertools.imap(lambda x: x.name == "LICENSE.txt", env['MODULE_BANNERS'])) == 0: + env.Append(MODULE_BANNERS = [distsrc.File('GNU-AGPL-3.0')]) + +# All module banners get staged to the top level of the tarfile, so we +# need to fail if we are going to have a name collision. +module_banner_filenames = set([f.name for f in env['MODULE_BANNERS']]) +if not len(module_banner_filenames) == len(env['MODULE_BANNERS']): + # TODO: Be nice and identify conflicts in error. + env.FatalError("ERROR: Filename conflicts exist in module banners.") + +# Build a set of directories containing module banners, and use that +# to build a --transform option for each directory so that the files +# are tar'ed up to the proper location. +module_banner_dirs = set([Dir('#').rel_path(f.get_dir()) for f in env['MODULE_BANNERS']]) +module_banner_transforms = ["--transform %s=$SERVER_DIST_BASENAME" % d for d in module_banner_dirs] + +# Allow modules to map original file name directories to subdirectories +# within the archive (e.g. { "src/mongo/db/modules/enterprise/docs": "snmp"}) +archive_addition_transforms = [] +for full_dir, archive_dir in env["ARCHIVE_ADDITION_DIR_MAP"].items(): + archive_addition_transforms.append("--transform \"%s=$SERVER_DIST_BASENAME/%s\"" % + (full_dir, archive_dir)) + +for target in env["DIST_BINARIES"]: + installBinary(env, "db/modules/" + target) + +# Set the download url to the right place +compass_type = 'compass-community' +if 'enterprise' in env['MONGO_MODULES']: + compass_type = 'compass' + +compass_script = "install_compass" +if env.TargetOSIs('windows'): + # On windows the .in needs to be explicitly added to the file. + compass_script = "Install-Compass.ps1.in" + +compass_python_interpreter = '/usr/bin/env python2' +if env.TargetOSIs('darwin'): + compass_python_interpreter = '/usr/bin/env python' + +compass_installer = env.Substfile('#/src/mongo/installer/compass/' + compass_script, + SUBST_DICT=[ + ('@compass_type@', compass_type), + ('@python_interpreter@', compass_python_interpreter), + ]) +distBinaries.append(compass_installer) + +compass_script_installer = env.Install("$INSTALL_DIR/bin", compass_installer) + +if env.TargetOSIs('posix'): + env.AddPostAction( compass_script_installer, 'chmod 755 $TARGET' ) + env.AddPostAction( compass_installer, 'chmod 755 $TARGET' ) + +# "dist" target is valid only when --use-new-tools is specified +# Attempts to build release artifacts without tools must fail +if has_option("use-new-tools"): + env.Command( + target='#/${SERVER_ARCHIVE}', + source=['#buildscripts/make_archive.py'] + env["MODULE_BANNERS"] + env["ARCHIVE_ADDITIONS"] + distBinaries, + action=' '.join( + ['$PYTHON ${SOURCES[0]} -o $TARGET'] + + archive_addition_transforms + + module_banner_transforms + + [ + '--transform $BUILD_DIR/mongo/db/modules/enterprise=$SERVER_DIST_BASENAME/bin', + '--transform $BUILD_DIR/mongo/stripped/db/modules/enterprise=$SERVER_DIST_BASENAME/bin', + '--transform $BUILD_DIR/mongo/stripped=$SERVER_DIST_BASENAME/bin', + '--transform $BUILD_DIR/mongo=$SERVER_DIST_BASENAME/bin', + '--transform $BUILD_DIR/mongo/stripped/src/mongo-tools=$SERVER_DIST_BASENAME/bin', + '--transform src/mongo-tools=$SERVER_DIST_BASENAME/bin', + '--transform src/mongo/installer/compass=$SERVER_DIST_BASENAME/bin', + '${TEMPFILE(SOURCES[1:])}' + ], + ), + BUILD_DIR=env.Dir('$BUILD_DIR').path + ) + + env.Alias("dist", source='#/${SERVER_ARCHIVE}') +else: + def failDist(env, target, source): + env.FatalError("ERROR: 'dist' target only valid with --use-new-tools.") + env.Alias("dist", [], [ failDist ] ) + env.AlwaysBuild("dist") + +debug_symbols_dist = env.Command( + target='#/${SERVER_DIST_BASENAME}-debugsymbols${DIST_ARCHIVE_SUFFIX}', + source=['#buildscripts/make_archive.py'] + distDebugSymbols, + action=' '.join( + [ + '$PYTHON ${SOURCES[0]} -o $TARGET', + '--transform $BUILD_DIR/mongo/db/modules/enterprise=$SERVER_DIST_BASENAME', + '--transform $BUILD_DIR/mongo=$SERVER_DIST_BASENAME', + '${TEMPFILE(SOURCES[1:])}', + ] + ), + BUILD_DIR=env.Dir('$BUILD_DIR').path +) + +env.Alias('dist-debugsymbols', debug_symbols_dist) + +#final alias +env.Alias( "install", "$INSTALL_DIR" ) Index: mongodb-src-r3.6.8/src/third_party/wiredtiger/SConstruct =================================================================== --- mongodb-src-r3.6.8.orig/src/third_party/wiredtiger/SConstruct +++ mongodb-src-r3.6.8/src/third_party/wiredtiger/SConstruct @@ -11,7 +11,7 @@ import distutils.sysconfig EnsureSConsVersion( 2, 0, 0 ) if not os.sys.platform == "win32": - print ("SConstruct is only supported for Windows, use build_posix for other platforms") + print("SConstruct is only supported for Windows, use build_posix for other platforms") Exit(1) # Command line options @@ -118,7 +118,7 @@ wtlibs = [] conf = Configure(env) if not conf.CheckCHeader('stdlib.h'): - print 'stdlib.h must be installed!' + print('stdlib.h must be installed!') Exit(1) if useZlib: @@ -128,7 +128,7 @@ if useZlib: conf.env.Append(CPPDEFINES=["HAVE_BUILTIN_EXTENSION_ZLIB"]) wtlibs.append("zlib") else: - print 'zlib.h must be installed!' + print('zlib.h must be installed!') Exit(1) if useSnappy: @@ -138,7 +138,7 @@ if useSnappy: conf.env.Append(CPPDEFINES=['HAVE_BUILTIN_EXTENSION_SNAPPY']) wtlibs.append("snappy") else: - print 'snappy-c.h must be installed!' + print('snappy-c.h must be installed!') Exit(1) if useLz4: @@ -148,14 +148,14 @@ if useLz4: conf.env.Append(CPPDEFINES=['HAVE_BUILTIN_EXTENSION_LZ4']) wtlibs.append("lz4") else: - print 'lz4.h must be installed!' + print('lz4.h must be installed!') Exit(1) if useBdb: conf.env.Append(CPPPATH=[useBdb+ "/include"]) conf.env.Append(LIBPATH=[useBdb+ "/lib"]) if not conf.CheckCHeader('db.h'): - print 'db.h must be installed!' + print('db.h must be installed!') Exit(1) if useTcmalloc: @@ -166,7 +166,7 @@ if useTcmalloc: conf.env.Append(CPPDEFINES=['HAVE_LIBTCMALLOC']) conf.env.Append(CPPDEFINES=['HAVE_POSIX_MEMALIGN']) else: - print 'tcmalloc.h must be installed!' + print('tcmalloc.h must be installed!') Exit(1) env = conf.Finish() @@ -202,7 +202,7 @@ if (VERSION_MAJOR == None or VERSION_MINOR == None or VERSION_PATCH == None or VERSION_STRING == None): - print "Failed to find version variables in " + version_file + print("Failed to find version variables in " + version_file) Exit(1) wiredtiger_includes = """ @@ -322,7 +322,7 @@ if GetOption("lang-python"): # Check that this version of python is 64-bit # if sys.maxsize < 2**32: - print "The Python Interpreter must be 64-bit in order to build the python bindings" + print("The Python Interpreter must be 64-bit in order to build the python bindings") Exit(1) pythonEnv = env.Clone() @@ -436,7 +436,7 @@ examples = [ # WiredTiger Smoke Test support # Runs each test in a custom temporary directory def run_smoke_test(x): - print "Running Smoke Test: " + x + print("Running Smoke Test: " + x) # Make temp dir temp_dir = tempfile.mkdtemp(prefix="wt_home") Index: mongodb-src-r3.6.8/site_scons/site_tools/mongo_benchmark.py =================================================================== --- mongodb-src-r3.6.8.orig/site_scons/site_tools/mongo_benchmark.py +++ mongodb-src-r3.6.8/site_scons/site_tools/mongo_benchmark.py @@ -14,7 +14,7 @@ def benchmark_list_builder_action(env, t ofile = open(str(target[0]), 'wb') try: for s in _benchmarks: - print '\t' + str(s) + print('\t' + str(s)) ofile.write('%s\n' % s) finally: ofile.close()
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.