aboutsummaryrefslogtreecommitdiff
path: root/docs/refman/main.py
diff options
context:
space:
mode:
authorDaniel Mensinger <daniel@mensinger-ka.de>2021-06-25 19:48:43 +0200
committerDaniel Mensinger <daniel@mensinger-ka.de>2021-10-03 11:46:34 +0200
commitad65a699f93a7659739287882ca27c58c564670b (patch)
tree956660da72b5322e1860c27f159da5d0463d5aca /docs/refman/main.py
parent3feaea6b29197cd224fbce0ac65fd43d08c3beac (diff)
downloadmeson-ad65a699f93a7659739287882ca27c58c564670b.zip
meson-ad65a699f93a7659739287882ca27c58c564670b.tar.gz
meson-ad65a699f93a7659739287882ca27c58c564670b.tar.bz2
docs: Initial reference manual generator
Diffstat (limited to 'docs/refman/main.py')
-rw-r--r--docs/refman/main.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/docs/refman/main.py b/docs/refman/main.py
new file mode 100644
index 0000000..96698ae
--- /dev/null
+++ b/docs/refman/main.py
@@ -0,0 +1,68 @@
+# Copyright 2021 The Meson development team
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from pathlib import Path
+import argparse
+import typing as T
+
+from mesonbuild import mlog
+
+from .loaderbase import LoaderBase
+from .loaderyaml import LoaderYAML
+
+from .generatorbase import GeneratorBase
+from .generatorprint import GeneratorPrint
+
+meson_root = Path(__file__).absolute().parents[2]
+
+def main() -> int:
+ parser = argparse.ArgumentParser(description='Meson reference manual generator')
+ parser.add_argument('-l', '--loader', type=str, default='yaml', choices=['yaml'], help='Information loader backend')
+ parser.add_argument('-g', '--generator', type=str, choices=['print'], required=True, help='Generator backend')
+ parser.add_argument('--depfile', type=Path, default=None, help='Set to generate a depfile')
+ parser.add_argument('--force-color', action='store_true', help='Force enable colors')
+ args = parser.parse_args()
+
+ if args.force_color:
+ mlog.colorize_console = lambda: True
+
+ loaders: T.Dict[str, T.Callable[[], LoaderBase]] = {
+ 'yaml': lambda: LoaderYAML(meson_root / 'docs' / 'yaml'),
+ }
+
+ loader = loaders[args.loader]()
+ refMan = loader.load()
+
+ generators: T.Dict[str, T.Callable[[], GeneratorBase]] = {
+ 'print': lambda: GeneratorPrint(refMan),
+ }
+ generator = generators[args.generator]()
+
+ # Generate the depfile if required
+ if args.depfile is not None:
+ assert isinstance(args.depfile, Path)
+ assert isinstance(args.out, Path)
+
+ # Also add all files of this package
+ script_files = list(Path(__file__).resolve().parent.glob('**/*.py'))
+ templates = list(Path(__file__).resolve().parent.glob('**/*.mustache'))
+
+ out_text = f'{args.out.resolve().as_posix()}: \\\n'
+ for input in loader.input_files + script_files + templates:
+ out_text += f' {input.resolve().as_posix():<93} \\\n'
+
+ args.depfile.write_text(out_text, encoding='utf-8')
+
+ generator.generate()
+ return 0