| |
|
| | from numpy.testing import IS_WASM
|
| | import textwrap
|
| | import shutil
|
| | import tempfile
|
| | import os
|
| | import re
|
| | import subprocess
|
| | import sys
|
| |
|
| |
|
| |
|
| |
|
| |
|
| | _compiler_status = None
|
| |
|
| |
|
| | def _get_compiler_status():
|
| | global _compiler_status
|
| | if _compiler_status is not None:
|
| | return _compiler_status
|
| |
|
| | _compiler_status = (False, False, False)
|
| | if IS_WASM:
|
| |
|
| | return _compiler_status
|
| |
|
| |
|
| |
|
| | code = textwrap.dedent(
|
| | f"""\
|
| | import os
|
| | import sys
|
| | sys.path = {repr(sys.path)}
|
| |
|
| | def configuration(parent_name='',top_path=None):
|
| | global config
|
| | from numpy.distutils.misc_util import Configuration
|
| | config = Configuration('', parent_name, top_path)
|
| | return config
|
| |
|
| | from numpy.distutils.core import setup
|
| | setup(configuration=configuration)
|
| |
|
| | config_cmd = config.get_config_cmd()
|
| | have_c = config_cmd.try_compile('void foo() {{}}')
|
| | print('COMPILERS:%%d,%%d,%%d' %% (have_c,
|
| | config.have_f77c(),
|
| | config.have_f90c()))
|
| | sys.exit(99)
|
| | """
|
| | )
|
| | code = code % dict(syspath=repr(sys.path))
|
| |
|
| | tmpdir = tempfile.mkdtemp()
|
| | try:
|
| | script = os.path.join(tmpdir, "setup.py")
|
| |
|
| | with open(script, "w") as f:
|
| | f.write(code)
|
| |
|
| | cmd = [sys.executable, "setup.py", "config"]
|
| | p = subprocess.Popen(
|
| | cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=tmpdir
|
| | )
|
| | out, err = p.communicate()
|
| | finally:
|
| | shutil.rmtree(tmpdir)
|
| |
|
| | m = re.search(rb"COMPILERS:(\d+),(\d+),(\d+)", out)
|
| | if m:
|
| | _compiler_status = (
|
| | bool(int(m.group(1))),
|
| | bool(int(m.group(2))),
|
| | bool(int(m.group(3))),
|
| | )
|
| |
|
| | return _compiler_status
|
| |
|
| |
|
| | def has_c_compiler():
|
| | return _get_compiler_status()[0]
|
| |
|
| |
|
| | def has_f77_compiler():
|
| | return _get_compiler_status()[1]
|
| |
|
| |
|
| | def has_f90_compiler():
|
| | return _get_compiler_status()[2]
|
| |
|