#!/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')