foreach lang : [ 'python', 'gjs' ] # XXX meson does not allow building into subdir: # https://github.com/mesonbuild/meson/issues/2320 # Otherwise I could use '-o', '@OUTDIR@' into following commands if # the `output` was subdir-able. gir_docs_dir = custom_target('g-ir-docs-' + lang + '-dir', depends: [ libpika_gir, libpikaui_gir ], input: [ ], output: [ 'gir-' + lang + '-dirs' ], command: [ 'mkdir', '-p', '@OUTDIR@' + '/pages/' + lang + '/PikaUi-' + pika_api_version, '@OUTDIR@' + '/pages/' + lang + '/Pika-' + pika_api_version, '@OUTDIR@' + '/html/' + lang + '/PikaUi-' + pika_api_version, '@OUTDIR@' + '/html/' + lang + '/Pika-' + pika_api_version ], build_by_default: true) ## Pika Module ## # XXX `output` is bogus. g-ir-doc-tool produces a lot of output, # basically one page per public symbol, which is more than 1000 so # it's not usable. Since custom_target() requires an 'output', I could # just set one output such as 'index.page` as a trick, but since we # have another issue on subdir anyway (cf. above), I use some bogus # file instead. The fact the bogus file is not even created does not # even seem to be a problem for meson. # Moreover I realized that the targets listed by ninja are only the # output files (not the target name), so I basically ends up using # this field to create understandable names). gir_docs_pages = custom_target('g-ir-Pika-' + lang + '-pages', depends: [ gir_docs_dir, libpika_gir ], input: [ libpika_gir[0] ], output: [ 'Pika-' + lang + '-pages' ], command: [ gir_doc_tool, '-I', prefix / 'share/gir-1.0/', '-I', meson.project_build_root() / 'libpika', '--language=' + lang, '-o', '@OUTDIR@' + '/pages/' + lang + '/Pika-' + pika_api_version, meson.project_build_root() / '@INPUT@' ], build_by_default: true) # This step is completely an ugly workaround for 2 tool issues. The # first issue is that g-ir-doc-tool generates invalid XML by not # transforming less-than signs into entities. So I am special-casing # the one API documentation where we need to write a less-than (it will # need to be updated if this happens again). # See PIKA issue #7685. # The second issue is in meson itself which transforms backslash into # slashes preventing to write most basic regexp in a 'command'. For # this reason, I need to add the sed command as an external script. # See meson issue #1564. docs_pages_fix_sh = find_program('docs_pages_fix.sh') gir_docs_pages_fix = custom_target('g-ir-Pika-' + lang + '-pages-fix', input: [ gir_docs_pages ], output: [ 'Pika-' + lang + '-pages-fix' ], command: [ docs_pages_fix_sh, '@OUTDIR@' + '/pages/' + lang + '/Pika-' + pika_api_version + '/Pika.Procedure.add_menu_path.page', '@OUTDIR@' + '/pages/' + lang + '/Pika-' + pika_api_version + '/Pika.checks_get_colors.page', ], build_by_default: true) gir_docs_cache = custom_target('g-ir-Pika-' + lang + '-cache', input: [ gir_docs_pages_fix ], output: [ 'Pika-' + lang + '-cache' ], command: [ yelp_build, 'cache', '-o', '@OUTDIR@' + '/pages/' + lang + '/Pika-' + pika_api_version + '/index.cache', '@OUTDIR@' + '/pages/' + lang + '/Pika-' + pika_api_version, ], build_by_default: true) gir_docs_html = custom_target('g-ir-Pika-' + lang + '-html', input: [ gir_docs_cache ], output: [ 'Pika-' + lang + '-html' ], # TODO: `output` needs to be complete for installation to work. So # we need to figure out how to install the generated files (listing # all of them is a crazy idea, but maybe we can generate the # expected list somehow? Maybe even using the .def file which is # already an exhaustive listing would be a good idea? # Also where should we install exactly? #install_dir: prefix / pikadatadir / 'g-ir-docs/html/' + lang + '/Pika', #install: true, command: [ 'yelp-build', 'html', '-o', '@OUTDIR@' + '/html/' + lang + '/Pika-' + pika_api_version, '@OUTDIR@' + '/pages/' + lang + '/Pika-' + pika_api_version, ], build_by_default: true) ## PikaUi module ## gir_ui_docs_pages = custom_target('g-ir-PikaUi-' + lang + '-pages', depends: [ gir_docs_dir, libpikaui_gir ], input: [ libpikaui_gir[0] ], output: [ 'PikaUi-' + lang + '-pages' ], command: [ gir_doc_tool, '-I', prefix / 'share/gir-1.0/', '-I', meson.project_build_root() / 'libpika', '--language=' + lang, '-o', '@OUTDIR@' + '/pages/' + lang + '/PikaUi-' + pika_api_version, meson.project_build_root() / '@INPUT@' ], build_by_default: true) gir_ui_docs_cache = custom_target('g-ir-PikaUi-' + lang + '-cache', input: [ gir_ui_docs_pages ], output: [ 'PikaUi-' + lang + '-cache' ], command: [ yelp_build, 'cache', '-o', '@OUTDIR@' + '/pages/' + lang + '/PikaUi-' + pika_api_version + '/index.cache', '@OUTDIR@' + '/pages/' + lang + '/PikaUi-' + pika_api_version, ], build_by_default: true) gir_ui_docs_html = custom_target('g-ir-PikaUi-' + lang + '-html', input: [ gir_ui_docs_cache ], output: [ 'PikaUi-' + lang + '-html' ], #install_dir: prefix / pikadatadir / 'g-ir-docs/html/' + lang + '/PikaUi', #install: true, command: [ 'yelp-build', 'html', '-o', '@OUTDIR@' + '/html/' + lang + '/PikaUi-' + pika_api_version, '@OUTDIR@' + '/pages/' + lang + '/PikaUi-' + pika_api_version, ], build_by_default: true) endforeach ## TODO: a unit test using yelp-check would be useful.