|
|
'''Tests for numpy.distutils.build_ext.''' |
|
|
|
|
|
import os |
|
|
import subprocess |
|
|
import sys |
|
|
from textwrap import indent, dedent |
|
|
import pytest |
|
|
from numpy.testing import IS_WASM |
|
|
|
|
|
@pytest.mark.skipif(IS_WASM, reason="cannot start subprocess in wasm") |
|
|
@pytest.mark.slow |
|
|
def test_multi_fortran_libs_link(tmp_path): |
|
|
''' |
|
|
Ensures multiple "fake" static libraries are correctly linked. |
|
|
see gh-18295 |
|
|
''' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from numpy.distutils.tests.utilities import has_f77_compiler |
|
|
if not has_f77_compiler(): |
|
|
pytest.skip('No F77 compiler found') |
|
|
|
|
|
|
|
|
with open(tmp_path / '_dummy1.f', 'w') as fid: |
|
|
fid.write(indent(dedent('''\ |
|
|
FUNCTION dummy_one() |
|
|
RETURN |
|
|
END FUNCTION'''), prefix=' '*6)) |
|
|
with open(tmp_path / '_dummy2.f', 'w') as fid: |
|
|
fid.write(indent(dedent('''\ |
|
|
FUNCTION dummy_two() |
|
|
RETURN |
|
|
END FUNCTION'''), prefix=' '*6)) |
|
|
with open(tmp_path / '_dummy.c', 'w') as fid: |
|
|
|
|
|
fid.write('int PyInit_dummyext;') |
|
|
|
|
|
|
|
|
with open(tmp_path / 'setup.py', 'w') as fid: |
|
|
srctree = os.path.join(os.path.dirname(__file__), '..', '..', '..') |
|
|
fid.write(dedent(f'''\ |
|
|
def configuration(parent_package="", top_path=None): |
|
|
from numpy.distutils.misc_util import Configuration |
|
|
config = Configuration("", parent_package, top_path) |
|
|
config.add_library("dummy1", sources=["_dummy1.f"]) |
|
|
config.add_library("dummy2", sources=["_dummy2.f"]) |
|
|
config.add_extension("dummyext", sources=["_dummy.c"], libraries=["dummy1", "dummy2"]) |
|
|
return config |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
import sys |
|
|
sys.path.insert(0, r"{srctree}") |
|
|
from numpy.distutils.core import setup |
|
|
setup(**configuration(top_path="").todict())''')) |
|
|
|
|
|
|
|
|
build_dir = tmp_path |
|
|
subprocess.check_call([sys.executable, 'setup.py', 'build', 'install', |
|
|
'--prefix', str(tmp_path / 'installdir'), |
|
|
'--record', str(tmp_path / 'tmp_install_log.txt'), |
|
|
], |
|
|
cwd=str(build_dir), |
|
|
) |
|
|
|
|
|
so = None |
|
|
with open(tmp_path /'tmp_install_log.txt') as fid: |
|
|
for line in fid: |
|
|
if 'dummyext' in line: |
|
|
so = line.strip() |
|
|
break |
|
|
assert so is not None |
|
|
|