@@ -24,31 +24,44 @@ def _parse_args() -> argparse.Namespace:
2424 "and cpp" )
2525 p .add_argument ("--verbose" , "-v" , action = "store_true" , help = "print more information" )
2626 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+ ]
4152 p .add_argument ("--ql-format" , action = "store_true" , default = True ,
4253 help = "use codeql to autoformat QL files (which is the default)" )
4354 p .add_argument ("--no-ql-format" , action = "store_false" , dest = "ql_format" , help = "do not format QL files" )
4455 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" )
4956 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
5265
5366
5467def _abspath (x : str ) -> typing .Optional [pathlib .Path ]:
@@ -65,7 +78,7 @@ def run():
6578 log_level = logging .INFO
6679 logging .basicConfig (format = "{levelname} {message}" , style = '{' , level = log_level )
6780 for target in opts .generate :
68- generate (target , opts , render .Renderer (opts .swift_dir ))
81+ generate (target , opts , render .Renderer (opts .root_dir ))
6982
7083
7184if __name__ == "__main__" :
0 commit comments