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, ) run_target('upload', command: [hotdoc_prog, 'run', '--conf-file', documentation.config_path(), '--git-upload', '-vv', ], depends: documentation, )