import os from .compilation import compile_run_strings from .util import CompilerNotFoundError def has_fortran(): if not hasattr(has_fortran, 'result'): try: (stdout, stderr), info = compile_run_strings( [('main.f90', ( 'program foo\n' 'print *, "hello world"\n' 'end program' ))], clean=True ) except CompilerNotFoundError: has_fortran.result = False if os.environ.get('SYMPY_STRICT_COMPILER_CHECKS', '0') == '1': raise else: if info['exit_status'] != os.EX_OK or 'hello world' not in stdout: if os.environ.get('SYMPY_STRICT_COMPILER_CHECKS', '0') == '1': raise ValueError("Failed to compile test program:\n%s\n%s\n" % (stdout, stderr)) has_fortran.result = False else: has_fortran.result = True return has_fortran.result def has_c(): if not hasattr(has_c, 'result'): try: (stdout, stderr), info = compile_run_strings( [('main.c', ( '#include \n' 'int main(){\n' 'printf("hello world\\n");\n' 'return 0;\n' '}' ))], clean=True ) except CompilerNotFoundError: has_c.result = False if os.environ.get('SYMPY_STRICT_COMPILER_CHECKS', '0') == '1': raise else: if info['exit_status'] != os.EX_OK or 'hello world' not in stdout: if os.environ.get('SYMPY_STRICT_COMPILER_CHECKS', '0') == '1': raise ValueError("Failed to compile test program:\n%s\n%s\n" % (stdout, stderr)) has_c.result = False else: has_c.result = True return has_c.result def has_cxx(): if not hasattr(has_cxx, 'result'): try: (stdout, stderr), info = compile_run_strings( [('main.cxx', ( '#include \n' 'int main(){\n' 'std::cout << "hello world" << std::endl;\n' '}' ))], clean=True ) except CompilerNotFoundError: has_cxx.result = False if os.environ.get('SYMPY_STRICT_COMPILER_CHECKS', '0') == '1': raise else: if info['exit_status'] != os.EX_OK or 'hello world' not in stdout: if os.environ.get('SYMPY_STRICT_COMPILER_CHECKS', '0') == '1': raise ValueError("Failed to compile test program:\n%s\n%s\n" % (stdout, stderr)) has_cxx.result = False else: has_cxx.result = True return has_cxx.result