|
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 <stdio.h>\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 <iostream>\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 |
|
|