#!/usr/bin/env python """ compile_tests -- compile test patterns for the decompyle test suite This source is part of the decompyle test suite. decompyle is a Python byte-code decompiler See http://www.crazy-compilers.com/decompyle/ for for further information """ from __future__ import print_function import py_compile, os, sys, getopt from fnmatch import fnmatch work_dir = os.path.dirname(sys.argv[0]) src_dir = work_dir opts, args = getopt.getopt(sys.argv[1:], 's:w:') for opt, val in opts: if opt == '-s': src_dir = val if opt == '-w': work_dir = val else: raise "Unknown Option '%s'" % opt if args: raise 'This tool does not want any arguments' print("Using files in dir %s" % src_dir) print( "Compiling into dir %s" % work_dir) tests = {} tests['1.5'] = ["class", "del", "docstring", 'empty', "exec", "exceptions", "expressions", "functions", "global", "globals", "import", "integers", "lambda", "loops", "misc", "nested_elif", "prettyprint", "print", 'single_stmt', "slices", "tuple_params", 'tuples'] tests['1.6'] = ["applyEquiv", ] + tests['1.5'] tests['2.0'] = ["augmentedAssign", "extendedImport", "extendedPrint", "import_as", "listComprehensions", 'print_to'] + \ tests['1.6'] # [ "--extendedarg", ] tests['2.1'] = ['loops2', 'nested_scopes'] + tests['2.0'] tests['2.2'] = ['divide_future', 'divide_no_future', 'iterators', 'yield'] + tests['2.1'] tests['2.3'] = tests['2.2'] tests['2.5'] = tests['2.3'] # tests['2.7'] = ['mine'] + tests['2.6'] def file_matches(files, root, basenames, patterns): files.extend( [os.path.normpath(os.path.join(root, n)) for n in basenames for pat in patterns if fnmatch(n, pat)]) PY = ('*.py', ) files = ['simple_source'] simple_source = [] for root, dirs, basenames in os.walk('simple_source'): for basename in basenames: if basename.endswith('.py'): simple_source.append(os.path.join(root, basename)[0:-3]) pass tests['2.6'] = tests['2.7'] = tests['3.2'] = \ tests['3.3'] = tests['3.4'] = tests['3.5'] = simple_source total_tests = len(tests['2.7']) #tests['2.2'].sort(); print tests['2.2'] extension = '.py' + (__debug__ and 'c' or 'o') def compile(filename, target_dir): sfile = os.path.join(src_dir, '%s.py' % filename) cfile = os.path.join(target_dir, '%s%s' % (os.path.basename(filename), extension) ) py_compile.compile(sfile, cfile=cfile) def compile_for_version(version): target_dir = os.path.join(work_dir, 'bytecode_' + version) if not os.path.exists(target_dir): os.mkdir(target_dir) for filename in tests[version]: compile(filename, target_dir) try: version = '%i.%i' % sys.version_info[:2] except AttributeError: version = sys.version[:3] print('Compiling test files for Python', version) # print('(%i/%i files)' % (len(tests[version]), total_tests)) print('%i files' % len(tests[version])) compile_for_version(version) print('Done.')