#!/usr/bin/env python3
"""Mypyc command-line tool.

Usage:

    $ mypyc foo.py [...]
    $ python3 -c 'import foo'  # Uses compiled 'foo'


This is just a thin wrapper that generates a setup.py file that uses
mypycify, suitable for prototyping and testing.
"""

import os
import os.path
import subprocess
import sys
import tempfile
import time

base_path = os.path.join(os.path.dirname(__file__), '..')

setup_format = """\
from distutils.core import setup
from mypyc.build import mypycify

setup(name='mypyc_output',
      ext_modules=mypycify([], {}, {}),
)
"""

def main() -> None:
    build_dir = 'build'  # can this be overridden??
    try:
        os.mkdir(build_dir)
    except FileExistsError:
        pass

    opt_level = os.getenv("MYPYC_OPT_LEVEL", '')

    setup_file = os.path.join(build_dir, 'setup.py')
    with open(setup_file, 'w') as f:
        f.write(setup_format.format(sys.argv[1:], opt_level))

    # We don't use run_setup (like we do in the test suite) because it throws
    # away the error code from distutils, and we don't care about the slight
    # performance loss here.
    env = os.environ.copy()
    base_path = os.path.join(os.path.dirname(__file__), '..')
    env['PYTHONPATH'] = base_path + os.pathsep + env.get('PYTHONPATH', '')
    cmd = subprocess.run([sys.executable, setup_file, 'build_ext', '--inplace'], env=env)
    sys.exit(cmd.returncode)

if __name__ == '__main__':
    main()
