#!/usr/bin/env python
from __future__ import print_function
"""Run the Python regression test using the compiler

This test runs the standard Python test suite using bytecode generated
by this compiler instead of by the builtin compiler.

The regression test is run with the interpreter in verbose mode so
that import problems can be observed easily.
"""

from compiler import compileFile

import os
import sys
import test
import tempfile

def copy_test_suite():
    dest = tempfile.mkdtemp()
    os.system("cp -r %s/* %s" % (test.__path__[0], dest))
    print("Creating copy of test suite in", dest)
    return dest

def copy_library():
    dest = tempfile.mkdtemp()
    libdir = os.path.split(test.__path__[0])[0]
    print("Found standard library in", libdir)
    print("Creating copy of standard library in", dest)
    os.system("cp -r %s/* %s" % (libdir, dest))
    return dest

def compile_files(dir):
    print("Compiling", dir, "\n\t", end=' ')
    line_len = 10
    for file in os.listdir(dir):
        base, ext = os.path.splitext(file)
        if ext == '.py':
            source = os.path.join(dir, file)
            line_len = line_len + len(file) + 1
            if line_len > 75:
                print("\n\t", end=' ')
                line_len = len(source) + 9
            print(file, end=' ')
            try:
                compileFile(source)
            except SyntaxError as err:
                print(err)
                continue
            # make sure the .pyc file is not over-written
            os.chmod(source + "c", 444)
        elif file == 'CVS':
            pass
        else:
            path = os.path.join(dir, file)
            if os.path.isdir(path):
                print()
                print()
                compile_files(path)
                print("\t", end=' ')
                line_len = 10
    print()

def run_regrtest(lib_dir):
    test_dir = os.path.join(lib_dir, "test")
    os.chdir(test_dir)
    os.system("PYTHONPATH=%s %s -v regrtest.py" % (lib_dir, sys.executable))

def cleanup(dir):
    os.system("rm -rf %s" % dir)

def main():
    lib_dir = copy_library()
    compile_files(lib_dir)
    run_regrtest(lib_dir)
    input("Cleanup?")
    cleanup(lib_dir)

if __name__ == "__main__":
    main()
