aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/tools/python/lib/bootstrap.py
diff options
context:
space:
mode:
authorthegeorg <thegeorg@yandex-team.com>2024-03-15 23:28:02 +0300
committerthegeorg <thegeorg@yandex-team.com>2024-03-15 23:38:24 +0300
commit6635e51dd2fc4c8fbc3e510cd31c9c9102b7cfda (patch)
treed51d048d3eb5d7a24ec6e4302b589513a3b97de3 /contrib/tools/python/lib/bootstrap.py
parente894914751eea93bb23102a533c8d481b80c2560 (diff)
downloadydb-6635e51dd2fc4c8fbc3e510cd31c9c9102b7cfda.tar.gz
Store generated list of frozen modules for contrib/tools/python
a94357bf8071b16879eeabac1f52f54e278c03ed
Diffstat (limited to 'contrib/tools/python/lib/bootstrap.py')
-rw-r--r--contrib/tools/python/lib/bootstrap.py148
1 files changed, 0 insertions, 148 deletions
diff --git a/contrib/tools/python/lib/bootstrap.py b/contrib/tools/python/lib/bootstrap.py
deleted file mode 100644
index 31d3f69fb69..00000000000
--- a/contrib/tools/python/lib/bootstrap.py
+++ /dev/null
@@ -1,148 +0,0 @@
-import os
-import sys
-
-
-_SOURCE_ROOT = None
-
-
-def truncate_path(path):
- path = os.path.normpath(path)
- if _SOURCE_ROOT and path.startswith(_SOURCE_ROOT):
- return os.path.relpath(path, _SOURCE_ROOT)
- return os.path.basename(path)
-
-
-def module_load(name, path = None):
- import imp
-
- module_name = name
- module_dot = name.find(".")
- if module_dot >= 0:
- module_name = module_name[:module_dot]
-
- fileobject, pathname, description = imp.find_module(module_name, path and [path])
-
- if os.path.isdir(pathname):
- pathname = os.path.join(pathname, "")
-
- if module_dot >= 0:
- return module_load(name[module_dot + 1:], pathname)
- return module_load("__init__", pathname)
-
- return pathname, fileobject, name == "__init__"
-
-
-def list_modules():
- import pydoc
-
- modules = []
-
- def module_callback(path, name, description):
- modules.append(name)
-
- module_scanner = pydoc.ModuleScanner()
- module_scanner.run(module_callback)
- return modules
-
-
-def make_path_directories(path):
- path_directory = os.path.dirname(path)
- if not os.path.exists(path_directory):
- os.makedirs(path_directory)
- return path
-
-
-def module_blob_compile(module_file, module_path):
- import marshal
- module_code = compile(module_file.read(), truncate_path(module_path), "exec")
- return marshal.dumps(module_code)
-
-
-def module_blob_write(module_blob, module_blob_name, module_blob_file):
- if EXTERN:
- if _SOURCE_ROOT and _SOURCE_ROOT in module_blob:
- raise Exception('Unable to add module %s because the blob contains the source root %s' % (module_blob_name, _SOURCE_ROOT))
- if os.getcwd() in module_blob:
- raise Exception('Unable to add module %s because the blob contains the build root %s' % (module_blob_name, os.getcwd()))
-
- module_blob_file.write(module_blob)
- return
-
- module_blob_file.write(STATIC + "unsigned char %s[] = {" % module_blob_name)
- for module_blob_byte in module_blob:
- module_blob_file.write("%d," % ord(module_blob_byte))
- module_blob_file.write("};\n\n")
-
-
-def module_table_write(module_blobs, module_table_file):
- if EXTERN:
- off = 0
- module_table_file.write('extern unsigned char %s[];\n\n' % EXTERN)
- for module_name, module_blob_name, module_blob_size in module_blobs:
- if module_blob_size < 0:
- module_blob_size = -module_blob_size
- module_table_file.write("#define %s (%s + %d)\n" % (module_blob_name, EXTERN, off))
- off += module_blob_size
-
- module_table_file.write("""\n#include "Python.h"\n""")
- module_table_file.write("\nstatic struct _frozen _PyImport_FrozenModules[] = {\n")
-
- for module_name, module_blob_name, module_blob_size in module_blobs:
- module_table_file.write("""\t{"%s", %s, %d},\n""" % (module_name, module_blob_name, module_blob_size))
-
- module_table_file.write("\t{0, 0, 0}\n};\n")
- module_table_file.write("\nstruct _frozen *PyImport_FrozenModules = _PyImport_FrozenModules;\n")
-
-
-def load_module_list(module_list_path):
- return [line.strip() for line in open(module_list_path)]
-
-
-if len(sys.argv) == 4:
- module_blob_path = make_path_directories(sys.argv[1])
- module_table_path = make_path_directories(sys.argv[2])
- modules_enabled = load_module_list(sys.argv[3])
- mode2 = 'w'
- STATIC = ''
- EXTERN = os.path.basename(module_blob_path)[:-7]
-else:
- module_blob_path = make_path_directories(sys.argv[1])
- module_table_path = make_path_directories(sys.argv[1])
- modules_enabled = load_module_list(sys.argv[2])
- mode2 = 'a'
- STATIC = 'static '
- EXTERN = False
-
-
-#modules = list_modules()
-
-if 'ARCADIA_ROOT_DISTBUILD' in os.environ:
- _SOURCE_ROOT = os.path.normpath(os.environ['ARCADIA_ROOT_DISTBUILD'])
-
-module_blobs = []
-
-with open(module_blob_path, "wb") as module_blob_file:
- for module_name in modules_enabled:
- #if module_name not in modules: continue
-
- try:
- module_path, module_file, module_is_package = module_load(module_name)
- except ImportError as e:
- print e
- continue
-
- if module_file and module_path != __file__:
- module_blob_name = "M_" + "__".join(module_name.split("."))
-
- module_blob = module_blob_compile(module_file, module_path)
- module_blob_write(module_blob, module_blob_name, module_blob_file)
- module_blob_size = len(module_blob)
-
- if module_is_package:
- module_blob_size = -module_blob_size
-
- module_blobs.append((module_name, module_blob_name, module_blob_size))
-
-
-with open(module_table_path, mode2) as module_table_file:
- module_table_write(module_blobs, module_table_file)