#!/usr/bin/python3
"""Load settings definitions and generates the corresponding documentation."""
import os
+from pathlib import Path
import sys
import tempfile
import yaml
return output
def main():
- docs_folder = 'docs/'
+ if len(sys.argv) != 2:
+ print(f'Usage: {sys.argv[0]} <path/to/source/dir>')
+ sys.exit(1)
+
+ source_dir = sys.argv[1]
+ docs_folder = f'{source_dir}/docs/'
if not os.path.isdir(docs_folder):
print('Skipping settings documentation generation because the docs/ folder does not exist')
return
generated_fp = get_temporary_file_for_generated_content(docs_folder)
- output = process_settings('dnsdist-settings-definitions.yml')
+ output = process_settings(f'{source_dir}/dnsdist-settings-definitions.yml')
generated_fp.write(output)
os.rename(generated_fp.name, f'{docs_folder}/reference/yaml-settings.rst')
generated_fp = get_temporary_file_for_generated_content(docs_folder)
- output = process_selectors_or_actions('dnsdist-actions-definitions.yml', 'action')
+ output = process_selectors_or_actions(f'{source_dir}/dnsdist-actions-definitions.yml', 'action')
generated_fp.write(output)
os.rename(generated_fp.name, f'{docs_folder}/reference/yaml-actions.rst')
generated_fp = get_temporary_file_for_generated_content(docs_folder)
- output = process_selectors_or_actions('dnsdist-response-actions-definitions.yml', 'response-action')
+ output = process_selectors_or_actions(f'{source_dir}/dnsdist-response-actions-definitions.yml', 'response-action')
generated_fp.write(output)
os.rename(generated_fp.name, f'{docs_folder}/reference/yaml-response-actions.rst')
generated_fp = get_temporary_file_for_generated_content(docs_folder)
- output = process_selectors_or_actions('dnsdist-selectors-definitions.yml', 'selector')
+ output = process_selectors_or_actions(f'{source_dir}/dnsdist-selectors-definitions.yml', 'selector')
generated_fp.write(output)
os.rename(generated_fp.name, f'{docs_folder}/reference/yaml-selectors.rst')
+ Path('.yaml-settings.stamp').touch()
+
if __name__ == '__main__':
main()
sources: [ffi_interface],
)
+py = import('python')
+python = py.find_installation('python3', required: true)
+
+yaml_settings_docs = custom_target(
+ 'yaml-settings-docs',
+ command: [
+ python,
+ product_source_dir / 'dnsdist-settings-documentation-generator.py',
+ '@SOURCE_ROOT@',
+ ],
+ depend_files: [
+ 'dnsdist-settings-definitions.yml',
+ 'dnsdist-actions-definitions.yml',
+ 'dnsdist-response-actions-definitions.yml',
+ 'dnsdist-selectors-definitions.yml'
+ ],
+ output: '.yaml-settings.stamp',
+)
+
+dep_yaml_settings_docs = declare_dependency(
+ sources: [yaml_settings_docs],
+)
+
deps = [
dep_pdns,
dep_no_config_in_source,
dep_libbpf,
dep_libxdp,
dep_dnsdist_rust_lib,
+ dep_yaml_settings_docs,
]
libdnsdist_dnslabeltext_source = src_dir / 'dnslabeltext.rl'
endif
# Man-pages.
-py = import('python')
-python = py.find_installation('python3', modules: 'venv', required: false)
+python_venv = py.find_installation('python3', modules: 'venv', required: false)
-summary('Python', python.found(), bool_yn: true, section: 'Manual Pages')
+summary('Python with venv', python_venv.found(), bool_yn: true, section: 'Manual Pages')
-if get_option('man-pages') and python.found()
- summary('Path', python.full_path(), section: 'Manual Pages')
- summary('Version', python.version(), section: 'Manual Pages')
+if get_option('man-pages') and python_venv.found()
+ summary('Path', python_venv.full_path(), section: 'Manual Pages')
+ summary('Version', python_venv.version(), section: 'Manual Pages')
generated_man_pages = []
foreach tool, info: tools
if 'manpages' in info
install: true,
install_dir: join_paths(get_option('mandir'), 'man1'),
command: [
- python,
+ python_venv,
product_source_dir / docs_dir / 'generate-man-pages.py',
'--build-root', '@BUILD_ROOT@',
'--source-root', '@SOURCE_ROOT@',
follow_symlinks: true
)
-if python.found()
-
+if python_venv.found()
html_docs = custom_target(
'html-docs',
command: [
- python,
+ python_venv,
product_source_dir / docs_dir / 'generate-docs.py',
'--build-root', '@BUILD_ROOT@',
'--source-root', '@SOURCE_ROOT@',
pdf_docs = custom_target(
command: [
- python,
+ python_venv,
product_source_dir / docs_dir / 'generate-docs.py',
'--build-root', '@BUILD_ROOT@',
'--source-root', '@SOURCE_ROOT@',