| project('Meson documentation', version: '1.0') | |
| yaml_modname = get_option('unsafe_yaml') ? 'yaml' : 'strictyaml' | |
| py = import('python').find_installation('python3', modules: [yaml_modname], required: false) | |
| if not py.found() | |
| error(f'Cannot build documentation without yaml support') | |
| endif | |
| cur_bdir = meson.current_build_dir() | |
| sitemap = files('sitemap.txt') | |
| yaml_loader = get_option('unsafe_yaml') ? 'fastyaml' : 'yaml' | |
| genrefman = find_program('./genrefman.py') | |
| refman_binary = custom_target( | |
| 'gen_refman_bin', | |
| input: sitemap, | |
| output: 'reference_manual.bin', | |
| depfile: 'reman_dep.d', | |
| command: [ | |
| genrefman, | |
| '-l', yaml_loader, | |
| '-g', 'pickle', | |
| '-o', '@OUTPUT@', | |
| '--depfile', '@DEPFILE@', | |
| '--force-color', | |
| ] | |
| ) | |
| refman_json = custom_target( | |
| 'gen_refman_json', | |
| build_by_default: true, | |
| input: refman_binary, | |
| output: 'reference_manual.json', | |
| command: [ | |
| genrefman, | |
| '-l', 'pickle', | |
| '-g', 'json', | |
| '-i', '@INPUT@', | |
| '-o', '@OUTPUT@', | |
| '--force-color', | |
| ], | |
| ) | |
| test('validate_docs', find_program('./jsonvalidator.py'), args: [refman_json]) | |
| refman_man = custom_target( | |
| 'gen_refman_man', | |
| build_by_default: true, | |
| input: refman_binary, | |
| output: 'meson-reference.3', | |
| command: [ | |
| genrefman, | |
| '-l', 'pickle', | |
| '-g', 'man', | |
| '-i', '@INPUT@', | |
| '-o', '@OUTPUT@', | |
| '--force-color', | |
| '--no-modules', | |
| ], | |
| install: true, | |
| install_dir: get_option('mandir') / 'man3', | |
| ) | |
| # Everything past here is HTML resources. | |
| if not get_option('html') | |
| subdir_done() | |
| endif | |
| # Only the script knows which files are being generated | |
| docs_gen = custom_target( | |
| 'gen_docs', | |
| input: files('markdown/index.md'), | |
| output: 'gen_docs.stamp', | |
| command: [ | |
| files('../tools/regenerate_docs.py'), | |
| '--output-dir', cur_bdir, | |
| '--dummy-output-file', '@OUTPUT@', | |
| ], | |
| build_by_default: true, | |
| install: false, | |
| ) | |
| refman_md = custom_target( | |
| 'gen_refman_md', | |
| input: refman_binary, | |
| output: ['configured_sitemap.txt', 'refman_links.json'], | |
| command: [ | |
| genrefman, | |
| '-l', 'pickle', | |
| '-g', 'md', | |
| '-s', sitemap, | |
| '-i', '@INPUT@', | |
| '-o', '@OUTPUT0@', | |
| '--link-defs', '@OUTPUT1@', | |
| '--force-color', | |
| '--no-modules', | |
| ], | |
| ) | |
| sitemap = refman_md[0] | |
| genrelnotes = custom_target( | |
| output: ['sitemap-genrelnotes.txt'], | |
| build_always_stale: true, | |
| command: [find_program('genrelnotes.py'), | |
| '--input-sitemap', sitemap, | |
| '--output-sitemap', '@OUTPUT0@', | |
| '--output-dir', meson.current_build_dir(), | |
| '--source-dir', meson.current_source_dir(), | |
| ] | |
| ) | |
| sitemap = genrelnotes[0] | |
| hotdoc_prog = find_program('hotdoc', version: '>=0.13.7') | |
| py = import('python').find_installation('python3', modules: ['chevron'], required: false) | |
| if not py.found() | |
| error('Building the HTML docs requires the chevron module to render generated markdown pages') | |
| endif | |
| hotdoc = import('hotdoc') | |
| documentation = hotdoc.generate_doc(meson.project_name(), | |
| project_version: meson.project_version(), | |
| sitemap: sitemap, | |
| build_by_default: true, | |
| depends: docs_gen, | |
| index: 'markdown/index.md', | |
| install: false, | |
| extra_assets: ['images/'], | |
| include_paths: ['markdown', cur_bdir], | |
| default_license: 'CC-BY-SAv4.0', | |
| html_extra_theme: join_paths('theme', 'extra'), | |
| git_upload_repository: 'git@github.com:mesonbuild/mesonbuild.github.io.git', | |
| edit_on_github_repository: 'https://github.com/mesonbuild/meson', | |
| syntax_highlighting_activate: true, | |
| keep_markup_in_code_blocks: true, | |
| extra_extension: meson.current_source_dir() / 'extensions' / 'refman_links.py', | |
| refman_data_file: refman_md[1], | |
| fatal_warnings: true, | |
| devhelp_activate: true, | |
| devhelp_online: 'https://mesonbuild.com/', | |
| ) | |
| run_target('upload', | |
| command: [hotdoc_prog, 'run', | |
| '--conf-file', documentation.config_path(), | |
| '--git-upload', | |
| '-vv', | |
| ], | |
| depends: documentation, | |
| ) | |
| test('validate_links', find_program('./validatelinks.py'), args: meson.current_source_dir() / 'markdown' / 'Users.md', timeout: 65) |