|
- import argparse
- import json
- import os
- from pathlib import Path
- from typing import Optional, Dict, Any
- from typing_extensions import Protocol
-
- from . import paths
-
-
- class Arguments(Protocol):
- out: Optional[Path]
-
-
- def gen_task_json_data() -> Dict[str, Any]:
- dds_ci_exe = paths.find_exe('dds-ci')
- assert dds_ci_exe, 'Unable to find the dds-ci executable. This command should be run in a Poetry'
- envs = {key: os.environ[key]
- for key in (
- 'CL',
- '_CL_',
- 'PATH',
- 'INCLUDE',
- 'LIBPATH',
- 'LIB',
- ) if key in os.environ}
- task = {
- 'label': 'MSVC Build',
- 'type': 'process',
- 'command': str(dds_ci_exe.resolve()),
- 'args': ['--rapid'],
- 'group': {
- 'kind': 'build',
- },
- 'options': {
- 'env': envs,
- },
- 'problemMatcher': '$msCompile',
- }
- return task
-
-
- def generate_vsc_task() -> None:
- parser = argparse.ArgumentParser()
- parser.add_argument('--out', '-o', help='File to write into', type=Path)
- args: Arguments = parser.parse_args()
-
- cl = paths.find_exe('cl')
- if cl is None:
- raise RuntimeError('There is not cl.exe on your PATH. You need to run '
- 'this command from within a Visual Studio environment.')
-
- data = gen_task_json_data()
- task_str = json.dumps(data, indent=4)
- if args.out:
- args.out.write_text(task_str)
- print(f'The task JSON has been written to {args.out}.')
- else:
- print(task_str)
- print('^^^ The task JSON has been written above ^^^')
- print('Add the JSON object to "tasks.json" to use it in VS Code')
|