Files
exoplasim/scripts/test-build-modes.py

37 lines
2.1 KiB
Python
Executable File

#!/usr/bin/env python3
from pathlib import Path
import shutil
import subprocess
import tempfile
root = Path(__file__).resolve().parents[1]
(root / 'tmp').mkdir(exist_ok=True)
with tempfile.TemporaryDirectory(prefix='build-mode-test-', dir=root / 'tmp') as temporary:
work = Path(temporary)
for label, arguments in [('checked', []), ('performance', ['--build-mode', 'performance']),
('native', ['--build-mode', 'performance', '--native'])]:
directory = work / label
(directory / 'plasim/bld').mkdir(parents=True)
for name in ['configure.sh', 'makecheck', 'f90check.f90', 'cc_check.c']:
shutil.copy2(root / 'exoplasim' / name, directory / name)
subprocess.run(['bash', 'configure.sh', *arguments], cwd=directory, check=True,
stdout=subprocess.DEVNULL, timeout=60)
config = (directory / 'most_compiler').read_text()
assert ('-fcheck=all' in config) == (label == 'checked')
assert ('-DEXOPLASIM_CHECKED' in config) == (label == 'checked')
assert ('-march=native' in config) == (label == 'native')
assert ('-ffp-contract=off' in config) == (label == 'native')
assert '-ffpe-trap=invalid,zero,overflow' in config
assert '-finit-real=zero' in config
assert '-fcheck=all' in (directory / 'most_debug_options').read_text()
assert '-fdefault-real-8' in (directory / 'most_precision_options').read_text()
assert '-march=native' not in (directory / 'most_debug_options').read_text()
assert config.split('MOST_F90_OPTS=', 1)[1].splitlines()[0] in (directory / 'most_compiler_mpi').read_text()
for arguments in [['--native'], ['--build-mode', 'invalid'], ['--build-mode']]:
result = subprocess.run(['bash', str(root / 'exoplasim/configure.sh'), *arguments],
cwd=work, capture_output=True, timeout=10)
assert result.returncode == 2, result
help_result = subprocess.check_output(['bash', str(root / 'exoplasim/configure.sh'), '-h'], cwd=work, timeout=10)
assert b'EXOPLASIM CONFIGURATION SCRIPT' in help_result
print('Build-mode tests passed')