import Cython
import Cython.Compiler.Code
import Cython.Compiler.FlowControl
import Cython.Compiler.Lexicon
import Cython.Compiler.Parsing
import Cython.Compiler.Scanning
import Cython.Compiler.Visitor
import Cython.Plex.Actions
import Cython.Plex.Scanners
#import Cython.Runtime.refnanny

import sys
import os
import subprocess
from pprint import pprint
from os.path import isfile

print('sys.executable: %r' % sys.executable)
print('sys.prefix: %r' % sys.prefix)
print('sys.version: %r' % sys.version)
print('PATH: %r' % os.environ['PATH'])
print('CWD: %r' % os.getcwd())

from distutils.sysconfig import get_config_var
from distutils.spawn import find_executable
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

if find_executable('gcc'):
    test_path = os.path.dirname(os.path.abspath(__file__))
    fib_path = os.path.join(test_path, "fib.pyx")
    output_file = os.path.join(test_path, "fib" + get_config_var('EXT_SUFFIX'))

    # SAT-4307: handle cases when directory is read-only
    if os.access(test_path, os.X_OK | os.W_OK):
        sys.argv[1:] = ['build_ext', '--inplace']
        setup(name='fib',
              cmdclass={'build_ext': build_ext},
              ext_modules=[Extension("fib", [fib_path])])

        try:
            import fib
            assert fib.fib(10) == 55
        except ImportError:
            cmd = [sys.executable, '-c', 'import fib; print(fib.fib(10))']
            out = subprocess.check_output(cmd)
            assert out.decode('utf-8').strip() == '55'
        finally:
            os.remove(output_file)
