1- import re , argparse , dataclasses
1+ import re , os . path , argparse , dataclasses
22
33from .build import get_mfc_target_names , get_target_names , get_dependencies_names
44from .common import format_list_to_string
55from .test .test import CASES as TEST_CASES
6-
6+ from . packer import packer
77
88def parse (config ):
99 from .run .engines import ENGINES
@@ -19,14 +19,25 @@ def parse(config):
1919 formatter_class = argparse .ArgumentDefaultsHelpFormatter ,
2020 )
2121
22- parsers = parser .add_subparsers (dest = "command" )
22+ parsers = parser .add_subparsers (dest = "command" )
23+ run = parsers .add_parser (name = "run" , help = "Run a case with MFC." , formatter_class = argparse .ArgumentDefaultsHelpFormatter )
24+ test = parsers .add_parser (name = "test" , help = "Run MFC's test suite." , formatter_class = argparse .ArgumentDefaultsHelpFormatter )
25+ build = parsers .add_parser (name = "build" , help = "Build MFC and its dependencies." , formatter_class = argparse .ArgumentDefaultsHelpFormatter )
26+ clean = parsers .add_parser (name = "clean" , help = "Clean build artifacts." , formatter_class = argparse .ArgumentDefaultsHelpFormatter )
27+ bench = parsers .add_parser (name = "bench" , help = "Benchmark MFC (for CI)." , formatter_class = argparse .ArgumentDefaultsHelpFormatter )
28+ count = parsers .add_parser (name = "count" , help = "Count LOC in MFC." , formatter_class = argparse .ArgumentDefaultsHelpFormatter )
29+ packer = parsers .add_parser (name = "packer" , help = "Packer utility (pack/unpack/compare)" , formatter_class = argparse .ArgumentDefaultsHelpFormatter )
30+
31+ packers = packer .add_subparsers (dest = "packer" )
32+ pack = packers .add_parser (name = "pack" , help = "Pack a case into a single file." , formatter_class = argparse .ArgumentDefaultsHelpFormatter )
33+ pack .add_argument ("input" , metavar = "INPUT" , type = str , default = "" , help = "Input file of case to pack." )
34+ pack .add_argument ("-o" , "--output" , metavar = "OUTPUT" , type = str , default = None , help = "Base name of output file." )
2335
24- run = parsers .add_parser (name = "run" , help = "Run a case with MFC." , formatter_class = argparse .ArgumentDefaultsHelpFormatter )
25- test = parsers .add_parser (name = "test" , help = "Run MFC's test suite." , formatter_class = argparse .ArgumentDefaultsHelpFormatter )
26- build = parsers .add_parser (name = "build" , help = "Build MFC and its dependencies." , formatter_class = argparse .ArgumentDefaultsHelpFormatter )
27- clean = parsers .add_parser (name = "clean" , help = "Clean build artifacts." , formatter_class = argparse .ArgumentDefaultsHelpFormatter )
28- bench = parsers .add_parser (name = "bench" , help = "Benchmark MFC (for CI)." , formatter_class = argparse .ArgumentDefaultsHelpFormatter )
29- count = parsers .add_parser (name = "count" , help = "Count LOC in MFC." , formatter_class = argparse .ArgumentDefaultsHelpFormatter )
36+ compare = packers .add_parser (name = "compare" , help = "Compare two cases." , formatter_class = argparse .ArgumentDefaultsHelpFormatter )
37+ compare .add_argument ("input1" , metavar = "INPUT1" , type = str , default = None , help = "First pack file." )
38+ compare .add_argument ("input2" , metavar = "INPUT2" , type = str , default = None , help = "Second pack file." )
39+ compare .add_argument ("-rel" , "--reltol" , metavar = "RELTOL" , type = float , default = 1e-12 , help = "Relative tolerance." )
40+ compare .add_argument ("-abs" , "--abstol" , metavar = "ABSTOL" , type = float , default = 1e-12 , help = "Absolute tolerance." )
3041
3142 def add_common_arguments (p , mask = None ):
3243 if mask is None :
@@ -117,8 +128,8 @@ def append_defaults_to_data(name: str, parser):
117128 if not key in args :
118129 args [key ] = val
119130
120- for a , b in [("run" , run ), ("test" , test ), ("build" , build ),
121- ("clean" , clean ), ("bench" , bench ), ("count" , count )]:
131+ for a , b in [("run" , run ), ("test" , test ), ("build" , build ),
132+ ("clean" , clean ), ("bench" , bench ), ("count" , count )]:
122133 append_defaults_to_data (a , b )
123134
124135 if args ["command" ] is None :
@@ -128,4 +139,11 @@ def append_defaults_to_data(name: str, parser):
128139 # "Slugify" the name of the job
129140 args ["name" ] = re .sub (r'[\W_]+' , '-' , args ["name" ])
130141
142+ for e in ["input" , "input1" , "input2" ]:
143+ if e not in args :
144+ continue
145+
146+ if args [e ] is not None :
147+ args [e ] = os .path .abspath (args [e ])
148+
131149 return args
0 commit comments