"""Compile the actual production CI wrapper body against deterministic CI doubles.""" from pathlib import Path import subprocess import tempfile root = Path(__file__).resolve().parents[1] header = (root / 'include/Domito.h').read_text(encoding='utf-8-sig') start = header.index('#if (NTDDI_VERSION >= NTDDI_WIN10)\n// Native forwards') end = header.index('#define DOMITO_CI_SOURCE_EMBEDDED', start) constants_header = (root / 'include/Domito.MinCrypt.h').read_text(encoding='utf-8-sig') constants = '\n'.join(line for line in constants_header.splitlines() if line.startswith(('#define DOMITO_CI_VALIDATE_FLAG_', '#define MINCRYPT_MAX_HASH_LENGTH', '#define MINCRYPT_SHA'))) source = (root / 'src/Domito.CodeIntegrity.Validation.cpp').read_text(encoding='utf-8-sig') source = source.replace('#include "Domito.Internal.h"', '') with tempfile.TemporaryDirectory(prefix='domito-ci-validation-') as temporary: directory = Path(temporary) (directory / 'ci-validation-api.inc').write_text(constants + '\n' + header[start:end], encoding='utf-8') (directory / 'ci-validation-under-test.inc').write_text(source, encoding='utf-8') for branch in ['x64', 'other']: program = directory / (branch + '.exe') flags = ['/DDOMITO_TEST_OTHER_ARCH'] if branch == 'other' else [] subprocess.run(['cl','/nologo','/EHsc','/W4','/WX','/std:c++17', '/DNTDDI_VERSION=0x0A000008','/DNTDDI_WIN10=0x0A000000', '/I' + str(directory), *flags, str(Path(__file__).with_name('ci-validation-tests.cpp')), '/Fe' + str(program), '/Fo' + str(directory / (branch + '.obj'))], cwd=directory, check=True) subprocess.run([str(program)], check=True)