@@ -24,31 +24,44 @@ def _parse_args() -> argparse.Namespace:
24
24
"and cpp" )
25
25
p .add_argument ("--verbose" , "-v" , action = "store_true" , help = "print more information" )
26
26
p .add_argument ("--quiet" , "-q" , action = "store_true" , help = "only print errors" )
27
- p .add_argument ("--swift-dir" , type = _abspath , default = paths .swift_dir ,
28
- help = "the directory that should be regarded as the root of the swift codebase. Used to compute QL "
29
- "imports and in some comments (default %(default)s)" )
30
- p .add_argument ("--schema" , type = _abspath , default = paths .swift_dir / "schema.py" ,
31
- help = "input schema file (default %(default)s)" )
32
- p .add_argument ("--dbscheme" , type = _abspath , default = paths .swift_dir / "ql/lib/swift.dbscheme" ,
33
- help = "output file for dbscheme generation, input file for trap generation (default %(default)s)" )
34
- p .add_argument ("--ql-output" , type = _abspath , default = paths .swift_dir / "ql/lib/codeql/swift/generated" ,
35
- help = "output directory for generated QL files (default %(default)s)" )
36
- p .add_argument ("--ql-stub-output" , type = _abspath , default = paths .swift_dir / "ql/lib/codeql/swift/elements" ,
37
- help = "output directory for QL stub/customization files (default %(default)s). Defines also the "
38
- "generated qll file importing every class file" )
39
- p .add_argument ("--ql-test-output" , type = _abspath , default = paths .swift_dir / "ql/test/extractor-tests/generated" ,
40
- help = "output directory for QL generated extractor test files (default %(default)s)" )
27
+ p .add_argument ("--root-dir" , type = _abspath , default = paths .root_dir ,
28
+ help = "the directory that should be regarded as the root of the language pack codebase. Used to"
29
+ "compute QL imports and in some comments and as root for relative paths provided as options "
30
+ "(default %(default)s)" )
31
+ p .add_argument ("--language" , default = paths .root_dir .name ,
32
+ help = "string that should replace {language} in other provided options" )
33
+ path_arguments = [
34
+ p .add_argument ("--schema" , default = "schema.py" ,
35
+ help = "input schema file (default %(default)s)" ),
36
+ p .add_argument ("--dbscheme" , default = "ql/lib/{language}.dbscheme" ,
37
+ help = "output file for dbscheme generation, input file for trap generation (default "
38
+ "%(default)s)" ),
39
+ p .add_argument ("--ql-output" , default = "ql/lib/codeql/{language}/generated" ,
40
+ help = "output directory for generated QL files (default %(default)s)" ),
41
+ p .add_argument ("--ql-stub-output" , default = "ql/lib/codeql/{language}/elements" ,
42
+ help = "output directory for QL stub/customization files (default %(default)s). Defines also the "
43
+ "generated qll file importing every class file" ),
44
+ p .add_argument ("--ql-test-output" , default = "ql/test/extractor-tests/generated" ,
45
+ help = "output directory for QL generated extractor test files (default %(default)s)" ),
46
+ p .add_argument ("--cpp-output" ,
47
+ help = "output directory for generated C++ files, required if trap or cpp is provided to "
48
+ "--generate" ),
49
+ p .add_argument ("--generated-registry" , default = "ql/.generated.list" ,
50
+ help = "registry file containing information about checked-in generated code" ),
51
+ ]
41
52
p .add_argument ("--ql-format" , action = "store_true" , default = True ,
42
53
help = "use codeql to autoformat QL files (which is the default)" )
43
54
p .add_argument ("--no-ql-format" , action = "store_false" , dest = "ql_format" , help = "do not format QL files" )
44
55
p .add_argument ("--codeql-binary" , default = "codeql" , help = "command to use for QL formatting (default %(default)s)" )
45
- p .add_argument ("--cpp-output" , type = _abspath ,
46
- help = "output directory for generated C++ files, required if trap or cpp is provided to --generate" )
47
- p .add_argument ("--generated-registry" , type = _abspath , default = paths .swift_dir / "ql/.generated.list" ,
48
- help = "registry file containing information about checked-in generated code" )
49
56
p .add_argument ("--force" , "-f" , action = "store_true" ,
50
- help = "generate all files without skipping unchanged files and overwriting modified ones" )
51
- return p .parse_args ()
57
+ help = "generate all files without skipping unchanged files and overwriting modified ones" ),
58
+ opts = p .parse_args ()
59
+ # absolutize all paths relative to --root-dir
60
+ for arg in path_arguments :
61
+ path = getattr (opts , arg .dest )
62
+ if path is not None :
63
+ setattr (opts , arg .dest , opts .root_dir / path .format (language = opts .language ))
64
+ return opts
52
65
53
66
54
67
def _abspath (x : str ) -> typing .Optional [pathlib .Path ]:
@@ -65,7 +78,7 @@ def run():
65
78
log_level = logging .INFO
66
79
logging .basicConfig (format = "{levelname} {message}" , style = '{' , level = log_level )
67
80
for target in opts .generate :
68
- generate (target , opts , render .Renderer (opts .swift_dir ))
81
+ generate (target , opts , render .Renderer (opts .root_dir ))
69
82
70
83
71
84
if __name__ == "__main__" :
0 commit comments