diff options
Diffstat (limited to 'scripts/install_custom_python.py')
-rw-r--r-- | scripts/install_custom_python.py | 175 |
1 files changed, 0 insertions, 175 deletions
diff --git a/scripts/install_custom_python.py b/scripts/install_custom_python.py deleted file mode 100644 index b67f063e3958..000000000000 --- a/scripts/install_custom_python.py +++ /dev/null @@ -1,175 +0,0 @@ -""" Copies the build output of a custom python interpreter to a directory - structure that mirrors that of an official Python distribution. - - -------------------------------------------------------------------------- - File: install_custom_python.py - - Overview: Most users build LLDB by linking against the standard - Python distribution installed on their system. Occasionally - a user may want to build their own version of Python, and on - platforms such as Windows this is a hard requirement. This - script will take the build output of a custom interpreter and - install it into a canonical structure that mirrors that of an - official Python distribution, thus allowing PYTHONHOME to be - set appropriately. - - Gotchas: None. - - Copyright: None. - -------------------------------------------------------------------------- - -""" - -import argparse -import itertools -import os -import shutil -import sys - - -def copy_one_file(dest_dir, source_dir, filename): - source_path = os.path.join(source_dir, filename) - dest_path = os.path.join(dest_dir, filename) - print 'Copying file %s ==> %s...' % (source_path, dest_path) - shutil.copyfile(source_path, dest_path) - - -def copy_named_files( - dest_dir, - source_dir, - files, - extensions, - copy_debug_suffix_also): - for (file, ext) in itertools.product(files, extensions): - copy_one_file(dest_dir, source_dir, file + '.' + ext) - if copy_debug_suffix_also: - copy_one_file(dest_dir, source_dir, file + '_d.' + ext) - - -def copy_subdirectory(dest_dir, source_dir, subdir): - dest_dir = os.path.join(dest_dir, subdir) - source_dir = os.path.join(source_dir, subdir) - print 'Copying directory %s ==> %s...' % (source_dir, dest_dir) - shutil.copytree(source_dir, dest_dir) - - -def copy_distro(dest_dir, dest_subdir, source_dir, source_prefix): - dest_dir = os.path.join(dest_dir, dest_subdir) - - print 'Copying distribution %s ==> %s' % (source_dir, dest_dir) - - os.mkdir(dest_dir) - PCbuild_dir = os.path.join(source_dir, 'PCbuild') - if source_prefix: - PCbuild_dir = os.path.join(PCbuild_dir, source_prefix) - # First copy the files that go into the root of the new distribution. This - # includes the Python executables, python27(_d).dll, and relevant PDB - # files. - print 'Copying Python executables...' - copy_named_files( - dest_dir, PCbuild_dir, ['w9xpopen'], [ - 'exe', 'pdb'], False) - copy_named_files( - dest_dir, PCbuild_dir, [ - 'python_d', 'pythonw_d'], ['exe'], False) - copy_named_files( - dest_dir, PCbuild_dir, [ - 'python', 'pythonw'], [ - 'exe', 'pdb'], False) - copy_named_files(dest_dir, PCbuild_dir, ['python27'], ['dll', 'pdb'], True) - - # Next copy everything in the Include directory. - print 'Copying Python include directory' - copy_subdirectory(dest_dir, source_dir, 'Include') - - # Copy Lib folder (builtin Python modules) - print 'Copying Python Lib directory' - copy_subdirectory(dest_dir, source_dir, 'Lib') - - # Copy tools folder. These are probably not necessary, but we copy them anyway to - # match an official distribution as closely as possible. Note that we don't just copy - # the subdirectory recursively. The source distribution ships with many more tools - # than what you get by installing python regularly. We only copy the tools that appear - # in an installed distribution. - tools_dest_dir = os.path.join(dest_dir, 'Tools') - tools_source_dir = os.path.join(source_dir, 'Tools') - os.mkdir(tools_dest_dir) - copy_subdirectory(tools_dest_dir, tools_source_dir, 'i18n') - copy_subdirectory(tools_dest_dir, tools_source_dir, 'pynche') - copy_subdirectory(tools_dest_dir, tools_source_dir, 'scripts') - copy_subdirectory(tools_dest_dir, tools_source_dir, 'versioncheck') - copy_subdirectory(tools_dest_dir, tools_source_dir, 'webchecker') - - pyd_names = [ - '_ctypes', - '_ctypes_test', - '_elementtree', - '_multiprocessing', - '_socket', - '_testcapi', - 'pyexpat', - 'select', - 'unicodedata', - 'winsound'] - - # Copy builtin extension modules (pyd files) - dlls_dir = os.path.join(dest_dir, 'DLLs') - os.mkdir(dlls_dir) - print 'Copying DLLs directory' - copy_named_files(dlls_dir, PCbuild_dir, pyd_names, ['pyd', 'pdb'], True) - - # Copy libs folder (implibs for the pyd files) - libs_dir = os.path.join(dest_dir, 'libs') - os.mkdir(libs_dir) - print 'Copying libs directory' - copy_named_files(libs_dir, PCbuild_dir, pyd_names, ['lib'], False) - copy_named_files(libs_dir, PCbuild_dir, ['python27'], ['lib'], True) - - -parser = argparse.ArgumentParser( - description='Install a custom Python distribution') -parser.add_argument( - '--source', - required=True, - help='The root of the source tree where Python is built.') -parser.add_argument( - '--dest', - required=True, - help='The location to install the Python distributions.') -parser.add_argument( - '--overwrite', - default=False, - action='store_true', - help='If the destination directory already exists, destroys its contents first.') -parser.add_argument( - '--silent', - default=False, - action='store_true', - help='If --overwite was specified, suppress confirmation before deleting a directory tree.') - -args = parser.parse_args() - -args.source = os.path.normpath(args.source) -args.dest = os.path.normpath(args.dest) - -if not os.path.exists(args.source): - print 'The source directory %s does not exist. Exiting...' - sys.exit(1) - -if os.path.exists(args.dest): - if not args.overwrite: - print 'The destination directory \'%s\' already exists and --overwrite was not specified. Exiting...' % args.dest - sys.exit(1) - while not args.silent: - print 'Ok to recursively delete \'%s\' and all contents (Y/N)? Choosing Y will permanently delete the contents.' % args.dest - result = str.upper(sys.stdin.read(1)) - if result == 'N': - print 'Unable to copy files to the destination. The destination already exists.' - sys.exit(1) - elif result == 'Y': - break - shutil.rmtree(args.dest) - -os.mkdir(args.dest) -copy_distro(args.dest, 'x86', args.source, None) -copy_distro(args.dest, 'x64', args.source, 'amd64') |