#!/usr/bin/python3 """Build or build-and-run the active contest source from an IDE task.""" import os from pathlib import Path import resource import shlex import subprocess import sys if len(sys.argv) != 3 or sys.argv[1] not in ('build', 'run'): raise SystemExit('Usage: acpc-solution build|run SOURCE') action, arg = sys.argv[1:] src = Path(arg).resolve(strict=True) os.chdir(src.parent) ext = src.suffix if ext == '.c': build = ['/usr/local/bin/acpc-gcc', src.name, '-o', src.stem] run = [str(src.with_suffix(''))] elif ext in ('.cpp', '.cc', '.C', '.cxx', '.c++'): build = ['/usr/local/bin/acpc-g++', src.name, '-o', src.stem] run = [str(src.with_suffix(''))] elif ext == '.java': build = ['/usr/lib/jvm/java-25-openjdk-amd64/bin/javac', '-encoding', 'UTF-8', '-sourcepath', '.', '-cp', './*', '-d', '.', src.name] run = ['/usr/local/bin/runjava', src.stem] elif ext in ('.py', '.py3'): build = ['/usr/local/bin/pypy3', '-m', 'py_compile', src.name] run = ['/usr/local/bin/pypy3', src.name] else: raise SystemExit('Use a C, C++, Java or Python source file.') print('Build: ' + shlex.join(build), flush=True) result = subprocess.run(build) if result.returncode: raise SystemExit(result.returncode) if action == 'run': print('Run: ' + shlex.join(run), flush=True) soft, hard = resource.getrlimit(resource.RLIMIT_STACK) resource.setrlimit(resource.RLIMIT_STACK, (hard, hard)) os.execv(run[0], run)